所以我有一个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(...)给了我“没有找到这样的表”的例外,而对于我的生活,我无法弄清楚为什么。有什么指针吗?
答案 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
。
避免在查询中使用*
,因为它可能会导致与主键相关的问题。