我使用下面的代码在我的Android应用程序中获取sqlite记录。此代码提取数值,但不提取字母数字值。
例如:当“tempno”为2时,将获取记录,但当“tempno”为2A时,它不会获取记录。
我使用的所有变量都是“String”数据类型。
public Map<String, Object> getDetails(String tempno) throws SQLException{
Map<String, Object> map = new HashMap<String, Object>();
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "=" + tempno, null, null, null, null, null);
我正在调用另一个类的代码。
请让我知道我哪里出错。
Map<String, Object> temp = dbAdapt.getDetails(tempno);
以下是Logcat中的错误
09-26 18:42:52.108: E/AndroidRuntime(2363): android.database.sqlite.SQLiteException: unrecognized token: "2A": , while compiling: SELECT DISTINCT source, destination, routelength, note FROM route WHERE routeno=2A
答案 0 :(得分:2)
将其更改为:
public Map<String, Object> getDetails(String tempno) throws SQLException{
Map<String, Object> map = new HashMap<String, Object>();
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "='" + tempno+"'", null, null, null, null, null);
//ROUTENO + "='" + tempno+"'",
这是一个快速而肮脏的解决方案,但它有效。这不是将值放在sql字符串中的常用方法。
答案 1 :(得分:0)
使用query
的参数替换代替您自己的参数:
public Map<String, Object> getDetails(String tempno) throws SQLException{
Map<String, Object> map = new HashMap<String, Object>();
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "= ?", new String[] { tempno }, null, null, null, null);