Android:SQLiteOpenHelper类 - SQL查询产生的所有异常是什么?

时间:2016-10-09 06:54:35

标签: java android sqlite android-sqlite

我有以下名为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表。

以下是我的观察,

  1. 当我执行addContact(Contact contact)方法时,会发生以下情况: 一个。生成SQLiteException。 logcat显示,android.database.sqlite.SQLiteException: no such table: contacts (code 1): , while compiling: INSERT INTO contacts(phone,name) VALUES (?,?) 湾该应用程序不会在模拟器上崩溃。

  2. 当我执行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 湾应用程序在模拟器上崩溃

  3. 所以我的问题是,如果表格在SQLite数据库中不存在,那么哪种SQL指令会产生什么样的异常?

1 个答案:

答案 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);
}