2014-02-09 40 views
0

我有一个简单的android应用程序,连接到我的服务器并将表保存到数据库,并显示按钮单击所需的数据库行。
问题是每当我想通过使用“日期”列到达我的行时,它会在下面引发该异常。
好吧,如果我通过id调用行,所有工作都是正确的。Android Sqlite语法读取行时出错

我的问题是,这是因为日期点变量或别的东西? 注意:我用opener程序查看数据库,一切看起来都很好,但是我不能用android日期列读取行。

这是我的例外是

02-09 19:45:21.909: E/AndroidRuntime(8286): Caused by: android.database.sqlite.SQLiteException: 
near ".2014": syntax error (code 1): , while compiling: SELECT DISTINCT _id, Date, Day, v1, v2, v3, 
v4 FROM db1 WHERE Date=07.02.2014 

我创建的SQL命令

DATABASE_CREATE = "create table " + DbTableName + " (" + KEY_ROWID 
       + " integer primary key autoincrement, " + KEY_Date 
       + " text not null, " + KEY_Day + " text not null, " + KEY_v1 
       + " text not null, " + KEY_v2 + " text not null, " + KEY_v3 
       + " text not null, " + KEY_v4 + " text not null " 
       + ");"; 

我get方法

public Cursor getDay(String date) throws SQLException { 
     Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { 
       KEY_ROWID, KEY_Date, KEY_Day, KEY_v1, KEY_v2, KEY_v3, KEY_v4 }, 
       KEY_Date + "=" + date, null, null, null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

回答

1

让您远离字符串文字与''或使用?占位符。也就是说,要么改变

KEY_Date + "=" + date, 

KEY_Date + "='" + date + "'" 

,甚至更好,改变

KEY_Date + "=" + date, null 

KEY_Date + "=?", new String[] { date } 
+0

是关于SQL注入攻击的问题? – user2638084

+0

是的,'?'bind arg方法可以防止语法问题和SQL注入,并且在某些情况下可以提高性能。但最初的问题只是字符串文字没有被引用。 – laalto

+0

好吧,这是我第一次想到的。感谢您的解决方案。 – user2638084