我在Android和关键字WHERE中使用SQLite有问题。
目前我正在使用T9字典编写Android应用程序。我的表如下所示:
@Override
public void onCreate( SQLiteDatabase db ){
db.execSQL( "CREATE TABLE IF NOT EXISTS " + TABLE_WORDS + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_CODE + " TEXT NOT NULL, " +
COLUMN_WORD + " TEXT NOT NULL, " +
COLUMN_FREQUENCY + " INTEGER NOT NULL, " +
"UNIQUE( " + COLUMN_WORD + "));"
);
}
然后我加载一些数据到它。例如,对于单词(COLUMN_WORD)"测试",我在T9字典中的代码(COLUMN_CODE)是8378,对于单词"example",我的代码等于3926753。
接下来我编写新的SQL查询:
sql = "SELECT `" + COLUMN_WORD+"`,`"+ COLUMN_CODE + "` FROM `" + TABLE_WORDS + "` LIMIT 10;";
接下来是另一个查询:
code = "2";
sql = "SELECT " + COLUMN_WORD+","+ COLUMN_CODE + " FROM " + TABLE_WORDS + " WHERE " + COLUMN_CODE + "='" + code + "';";
在JAVA中,我写道:Cursor cursor = database.rawQuery( sql, null );
现在在第一个查询中结果是正确的,但在第二个查询中我没有得到预期的结果。
日志在这里: http://oi57.tinypic.com/f78di.jpg
我在 SQL 查询中做错了什么?我尝试使用:
- 其中
code
='2' - 其中
code
="2" - 其中
code
=2 - 其中代码='2'
- 其中代码="2"
- 其中代码=2
- 其中
code
= '2' - 其中
code
= "2" - 其中
code
= 2 - 哪里
code
像"2" - 哪里
code
=? 然后cursor = database.rawQuery( sql, new String[] { code } );
尝试过的所有方法都给了我相同的负面结果。如果你知道如何解决这个问题,请帮助我。
此致敬意卡米尔4u
完整代码:
public List<String> getWords( String code ){
String word;
List<String> list = new ArrayList<String>();
String sql;
sql = "SELECT `" + COLUMN_WORD+"`,`"+ COLUMN_CODE + "` FROM `" + TABLE_WORDS + " WHERE " + COLUMN_CODE + "='" + code + "';";
Cursor cursor = database.rawQuery( sql, null );
Log.i("---TEXT---", sql );
if( cursor != null ){
cursor.moveToFirst();
while( cursor.moveToNext() ){
word = cursor.getString( cursor.getColumnIndex( COLUMN_WORD ) );
list.add( word );
Log.i("---TEXT---", "-->"+cursor.getString( cursor.getColumnIndex( COLUMN_WORD ) )+"<---->" + cursor.getString( cursor.getColumnIndex( COLUMN_CODE ) ) + "<--" );
}
}
Log.i("---TEXT---", "list( " + !list.isEmpty() + " )" + list );
list.clear();
sql = "SELECT `" + COLUMN_WORD+"`,`"+ COLUMN_CODE + "` FROM `" + TABLE_WORDS + "` LIMIT 10;";
Log.i("---TEXT---", sql );
cursor = database.rawQuery( sql, null );
if( cursor != null ){
cursor.moveToFirst();
while( cursor.moveToNext() ){
word = cursor.getString( cursor.getColumnIndex( COLUMN_WORD ) );
list.add( word );
Log.i("---TEXT---", "-->"+cursor.getString( cursor.getColumnIndex( COLUMN_WORD ) )+"<---->" + cursor.getString( cursor.getColumnIndex( COLUMN_CODE ) ) + "<--" );
}
}
Log.i("---TEXT---", "list( " + !list.isEmpty() + " )" + list );
return list;
}
将查询替换为这些
sql = "SELECT " + COLUMN_WORD + ", " + COLUMN_CODE + " FROM " + TABLE_WORDS + " WHERE " + COLUMN_CODE + "='" + code + "';";
和
sql = "SELECT " + COLUMN_WORD + ", "+ COLUMN_CODE + " FROM " + TABLE_WORDS + " LIMIT 10;";
编辑你的 while 循环弄乱了它。像这样使用它。
while(!cursor.isAfterLast()){
word = cursor.getString( cursor.getColumnIndex( COLUMN_WORD ) );
list.add( word );
Log.i("---TEXT---", "-->"+cursor.getString( cursor.getColumnIndex( COLUMN_WORD ) )+"<---->" + cursor.getString( cursor.getColumnIndex( COLUMN_CODE ) ) + "<--" );
cursor.moveToNext();
}