我有以下名为DatabaseHandler
public class DatabaseHandler extends SQLiteOpenHelper {
// Database Name
private static final String DATABASE_NAME="contacts_provider";
// Database Version
private static final int DATABASE_VARSION=1;
// Table Name
private static final String TABLE_NAME="contacts";
// Column Names
private static final String COL_CONTACT_ID="contact_id";
private static final String COL_NAME="name";
private static final String COL_PHONE="phone";
public DatabaseHandler(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VARSION);
}
@Override
public void onCreate(SQLiteDatabase db){}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){}
public void addContact(Contact contact){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(COL_NAME,contact.getName());
values.put(COL_PHONE,contact.getPhone());
db.insert(TABLE_NAME,null,values);
db.close();
}
public List<Contact> getAllContacts(){
SQLiteDatabase db=getReadableDatabase();
List<Contact> list=new ArrayList<>();
String sql="SELECT * FROM "+TABLE_NAME;
Cursor cursor=db.rawQuery(sql,null);
if(cursor!=null){
if(cursor.moveToFirst()){
do{
int contact_id=Integer.parseInt(cursor.getString(0));
String name=cursor.getString(1);
String phone=cursor.getString(2);
Contact contact=new Contact(contact_id,name,phone);
list.add(contact);
}while(cursor.moveToNext());
}
cursor.close();
}
db.close();
return list;
}
}
您可以观察到,我还没有在onCreate()方法中创建contacts
表。
以下是我的观察,
当我执行addContact(Contact contact)方法时,会发生以下情况:
一个。生成SQLiteException
。
logcat显示,android.database.sqlite.SQLiteException: no such table: contacts (code 1): , while compiling: INSERT INTO contacts(phone,name) VALUES (?,?)
湾该应用程序不会在模拟器上崩溃。
当我执行getAllContacts()方法时,会发生以下情况:
一个。生成RuntimeException
。
logcat显示,java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.sqlite2/com.example.user.sqlite2.SQLite.SQLiteExecution}: android.database.sqlite.SQLiteException: no such table: contacts (code 1): , while compiling: SELECT * FROM contacts
湾应用程序在模拟器上崩溃
所以我的问题是,如果表格在SQLite数据库中不存在,那么哪种SQL指令会产生什么样的异常?
答案 0 :(得分:-1)
在进行任何插入之前,您必须在public void onCreate(SQLiteDatabase db)
中创建表格。
public void onCreate(SQLiteDatabase db) {
db.execSQL(String.format("CREATE TABLE %s(%s ID INT PRIMARY KEY,
%s TEXT,
%s TEXT);",
TABLE_NAME,
COL_CONTACT_ID,
COL_NAME,
COL_PHONE);
}