无法使用字母数字值获取sqlite记录

时间:2012-09-26 14:21:52

标签: android sqlite map hashmap

我使用下面的代码在我的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

2 个答案:

答案 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);