2013-06-20 31 views
0

我的Android应用程序中有一个SQLite数据库。我希望能够根据数据库中的YEAR列选择一个随机行。我已经能够从整个表中选择一个随机行,像这样:Android SQLite选择参数

public String[] getTEST3RandChVerScrip() { 
    Cursor cursor = this.db.query("provtable Order BY RANDOM() LIMIT 1", 
      new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, null, 
      null, null, null, null); 
    if (cursor != null) { 
     for (cursor.moveToFirst(); !cursor.isAfterLast();) { 
      String colStrings[] = new String[3]; 
      colStrings[0] = cursor.getString(0); 
      colStrings[1] = cursor.getString(1); 
      colStrings[2] = cursor.getString(2); 
      return colStrings; 
     } 

    } 
    return null; 

} 

但是当我尝试添加一个选择参数,应用程序出现了错误。这里就是我已经添加了选择参数:

public String[] getTEST3RandChVerScrip() { 
    Cursor cursor = this.db.query("provtable Order BY RANDOM() LIMIT 1", 
      new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, KEY_YEAR = "1964", 
      null, null, null, null); 
    if (cursor != null) { 
     for (cursor.moveToFirst(); !cursor.isAfterLast();) { 
      String colStrings[] = new String[3]; 
      colStrings[0] = cursor.getString(0); 
      colStrings[1] = cursor.getString(1); 
      colStrings[2] = cursor.getString(2); 
      return colStrings; 
     } 

    } 
    return null; 

} 

是语法中KEY_YEAR = "1964"不正确的?如果有的话,任何想法应该是什么?

按tyczj的答案,我已经修改了查询:

 Cursor cursor = this.db.query("provtable Order BY RANDOM() LIMIT 1", 
      new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, KEY_YEAR +    "=?", 
      new String[] {"1964"}, null, null, null); 

...,我仍然得到一个错误,指出:06-20 15:18:33.644: E/AndroidRuntime(4758): android.database.sqlite.SQLiteException: near "WHERE": syntax error: , while compiling: SELECT make, model, note FROM provtable Order BY RANDOM() LIMIT 1 WHERE year=?

回答

2

在表名区

this.db.query("provtable", 
      new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, KEY_YEAR +    "=?", 
      new String[] {"1964"}, null, null, "RANDOM() LIMIT 1"); 
+0

THANK YOU尼古拉斯你不应该把顺序靠!它的工作原理就是我希望它能够工作!我对SQLite相当陌生,并且知道我希望查询做什么,但是并没有完全明白参数在哪里以及如何在Android SQLite查询中编写它们。 – kirktoon1882

1

应该

KEY_YEAR+"=1964" 

然而更好的语法伤口是把你的选择作为KEY_YEAR+"=?"然后你选择ARGS应该是new String[] {"1964"}

也发布错误