SQLite and WHERE - T9 dictionary



我在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();
}

最新更新