android:SQLiteDatabase rawQuery上的错误(获取数据)

时间:2011-01-15 03:47:37

标签: android sqlite

所以我有一个SQliteDatabase mDb。它只有一列,其数据是先前保存的输入的字符串。我正在尝试将mDb中的所有数据填充到AutoCompleteTextView的String []中(以便自动完成基于以前的输入),这是我获取所有String的代码。

public String[] fetchAllSearch() {
 ArrayList<String> allSearch = new ArrayList<String>();
 Cursor c = mDb.rawQuery("select * from " + DATABASE_TABLE, null);
 c.moveToFirst();
 if (c.getCount() > 0) {
  do {
   allSearch.add(c.getString(c.getColumnIndex("KEY")));
  } while (c.moveToNext());
 }
 String[] foo = (String[]) allSearch.toArray();
 if (foo == null) {
  foo = new String[] {""};
 }

 return foo;
}

我的CREATE_TABLE命令是

private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE;
..

public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
        }

但由于某种原因,行mDb.rawQuery(...)给了我“没有找到这样的表”的例外,而对于我的生活,我无法弄清楚为什么。有什么指针吗?

2 个答案:

答案 0 :(得分:1)

DATABASE_TABLE的价值是什么?

如果它只是一个表名,那么create语句就不完整了,因为它没有指定列。

如果是名称加列定义,那么选择将不起作用。

因此,您需要在使用DATABASE_TABLE

的两个地方使用不同的文字

尝试使用SQLite3命令行程序来试用SQL。例如,

sqlite> create table foo;
Error: near ";": syntax error
sqlite> create table foo(col);
sqlite> select * from foo(col);
Error: near "(": syntax error
sqlite> 

答案 1 :(得分:0)

使用SELECT column_name FROM table_name

避免在查询中使用*,因为它可能会导致与主键相关的问题。