Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL查询Android Where子句存在问题_Java_Android_Sqlite - Fatal编程技术网

Java SQL查询Android Where子句存在问题

Java SQL查询Android Where子句存在问题,java,android,sqlite,Java,Android,Sqlite,下面的代码创建了我的表。我向其中插入了如下所示的数据 _id date recordName total -------------------------------------- 7 2011 TestMaxRecord 5 Java代码: public static final String KEY_ROWID = "_id"; public static final String KEY_DATE = "date"; public

下面的代码创建了我的表。我向其中插入了如下所示的数据

_id     date     recordName     total
--------------------------------------
7      2011     TestMaxRecord     5
Java代码:

public static final String KEY_ROWID = "_id";   
public static final String KEY_DATE = "date";
public static final String KEY_TOTAL = "total";
public static final String KEY_RECORD_NAME = "recordName";

private static final String DATABASE_CREATE_RECORDS = "create table " + DATABASE_TABLE_RECORDS + " (" 
+ KEY_ROWID + " integer primary key autoincrement, " 
+ KEY_DATE + " text not null, "
+ KEY_RECORD_NAME + " text not null, "
+ KEY_TOTAL + " text not null);";

public Cursor getRecord(String name) throws SQLException {
  return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = " + name, null, null, null, null, null);
}
每当name=“TestMaxRecord”(尽管其中有数据)出现以下错误时,它都会抛出一个异常

android.database.sqlite.SQLiteException:没有这样的列:TestMaxRecord:,编译时:从recordName=TestMaxRecord的记录中选择DISTINCT _id、date、recordName、total


在我看来,它正在寻找一个列标题
TestMaxRecord
。我是一个android新手,但这部分内容几乎完全是从一个示例中复制的(虽然它使用int)。在查询中使用int和string有区别吗?

您需要在值周围加上单引号,否则它会将其视为一列

KEY_RECORD_NAME + " = '" + name + "'"
注意:此解决方案对Sql注入开放,您应该使用参数占位符,并通过
selectionArgs
参数传递值:

public Cursor getRecord(String name) throws SQLException {
  return mDb.query(true, 
    DATABASE_TABLE_RECORDS, 
    new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, 
    KEY_RECORD_NAME + " = ?",
    new String[] {name},
    null, null, null, null);
}

或者,看看

是的,这很有效,谢谢。这是因为它是一个字符串吗?我以前看过你链接中的参考资料,但它对WHERE子句没有帮助。WHERE子句中的字符串要少得多…至少我曾经发现过。