没有这样的列:嘿(代码1 SQLITE_ERROR [1]):,而在编译时:从ALLWORKHOURS WHERE NOTEMEMOS =嘿中选择ID

问题描述 投票:-1回答:3

日志猫:

no such column: hey (code 1 SQLITE_ERROR[1]): , while compiling: SELECT ID FROM ALLWORKHOURS WHERE NOTEMEMOS = hey

代码:

    102) public String getID(String note){
    103)      SQLiteDatabase db = this.getWritableDatabase();
    104)      String  query = ("SELECT " + COL_0 + " FROM " + TABLE_NAME + " WHERE " + COL_5 + " = " + note);
    105)      db.rawQuery(query,null);
    106)      return query;
    107) }

我的数据库中确实有一个列名嘿Database Picture

java sqlite android-studio android-sqlite sqlite-net
3个回答
0
投票

您的查询应该看起来像这样

SELECT ID FROM ALLWORKHOURS WHERE NOTEMEMOS = 'hey'

让我知道是否有帮助


0
投票

连接参数note的方式创建此sql语句:

SELECT ID FROM ALLWORKHOURS WHERE NOTEMEMOS = hey

so hey被认为是列标识符,而不是字符串文字,因为它没有包含在单引号内。您可以改为:

String  query = "SELECT " + COL_0 + " FROM " + TABLE_NAME + " WHERE " + COL_5 + " = '" + note + "'";

它会起作用。但是建议的方法是像这样将参数作为字符串数组传递:

String  query = "SELECT " + COL_0 + " FROM " + TABLE_NAME + " WHERE " + COL_5 + " = ?";
Cursor cursor = db.rawQuery(query, new String[] {note});
return cursor;

我想您想返回Cursor对象而不是sql查询字符串,对吧?


0
投票

您的术语感到困惑。

嘿是一个值,NOTEMEMOS是一列。

您需要引用值hey,以使SQL编译器知道它是字符串值,而不是您要与之比较的列。

String  query = ("SELECT " + COL_0 + " FROM " + TABLE_NAME + " WHERE " + COL_5 + " = '" + note + "'");

请注意,使用参数化查询会更好,因为使用原始值是不安全的(请参阅SQL注入)。>

String  query = ("SELECT " + COL_0 + " FROM " + TABLE_NAME + " WHERE " + COL_5 + " = ?"); // That's right, quotes aren't needed for a parameterized query.
String result = "";
Cursor cursor = db.rawQuery(query,new String[] {note} );
if (cursor.moveToFirst()) {
    result = cursor.getString(cursor.getColumnIndex(COL_0));
}
cursor.close();
return result;
© www.soinside.com 2019 - 2024. All rights reserved.