【问题标题】:Android SQLiteDatabase Query SQL Logic Error or Missing DatabaseAndroid SQLiteDatabase 查询 SQL 逻辑错误或缺少数据库
【发布时间】:2011-06-04 02:39:44
【问题描述】:

所以我使用 SQLiteOpenHelper 创建了一个数据库,并尝试查询它。它返回光标,但是当我调用 moveToFirst() 时,它崩溃并出现错误 SQL Logic Error or Missing Database.

我按照这个网站的代码来创建和查询我的数据库:http://www.vogella.de/articles/AndroidSQLite/article.html

编辑:

我的数据库:

public class Database{
     private static final String DATABASE_NAME = "MyDatabase";
     private static final int DATABASE_VERSION = 1;
     private static final String TABLE_NAME = "MyTable";

     // Column Names
     public static final String ID = "_id";                 // INTEGER
     public static final String NUMBER = "number";          // TEXT

     private SQLiteDatabase database;
     private DatabaseHelper mDatabaseOpenHelper;

     public Database(Context context){
          mDatabaseOpenHelper = new DatabaseHelper(context);
          database = mDatabaseOpenHelper.getWritableDatabase();
     }

     public void close(){
          database.close();
     }

     public long addNumber(String number){
          ContentValues values = new ContentValues();
          values.put(NUMBER, number);
          return database.insert(TABLE_NAME, null, values);
     }

     public Cursor getNumber(String number){
          String selection = NUMBER + " MATCH ?";
          String[] selectionArgs = new String[] {number};
          return database.query(TABLE_NAME, null, selection, selectionArgs, null, null, null);
     }

     private class DatabaseHelper extends SQLiteOpenHelper{

          private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + NUMBER + " TEXT)";

          public DatabaseHelper(Context context){
               super(context, DATABASE_NAME, null, DATABASE_VERSION);
          }

          public void onCreate(SQLiteDatabase db) {
               db.execSQL(CREATE_TABLE);
          }

          public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
               db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
               onCreate(db);
          }
      }
 }

这就是我的查询方式:

 Database database = new Database(this);

 Cursor cursor = database.getTrUpdate("1234");

 if (cursor.moveToFirst()){
      do{
           int d = cursor.getInt(cursor.getColumnIndex(Database.ID));
      } while(cursor.moveToNext());
 }

【问题讨论】:

  • 您能否也发布您的 DataBaseHelper 代码?

标签: android sqlite


【解决方案1】:

我认为错误与我的 getNumber 方法中的 selection 和 selectionArgs 有关,因为如果我删除它们就没有问题。

【讨论】:

    【解决方案2】:

    你检查过它返回的数组是否不为空吗?

    【讨论】:

    • 你在说什么数组?
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多