SQLite和WHERE - T9字典

时间:2014-12-30 18:16:25

标签: android sql sqlite dictionary where

Android中的SQLite和关键字WHERE都有问题。

目前我正在使用T9字典编写Android App。我的表看起来像这样:

        @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)" test" T9字典中的代码(COLUMN_CODE)是8378,而#34;示例"我的代码等于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查询中做错了什么?我尝试使用:

  • WHERE code =' 2'
  • WHERE code =" 2"
  • WHERE code = 2
  • WHERE code =' 2'
  • WHERE code =" 2"
  • WHERE code = 2
  • WHERE code =' 2'
  • WHERE code =" 2"
  • WHERE code = 2
  • WHERE code喜欢" 2"
  • WHERE code =?然后cursor = database.rawQuery( sql, new String[] { code } );

我尝试过的所有方法都给了我同样的负面结果。如果您知道如何解决这个问题,请帮助我。

祝你好运 Kamil4u

完整代码:

    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;
}   

1 个答案:

答案 0 :(得分:0)

用这些

替换您的查询
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();
}