【发布时间】:2014-12-17 19:54:27
【问题描述】:
我正在尝试从用户个人资料中获取一些数据,但找不到该列。我已经检查了每个查询之间的空间,似乎没有错。直到现在我看不到问题,知道吗?之前谢谢 这是我的代码和错误信息
表名
private static final String TABLE_PROFILE = "users";
private static final String TABLE_STATUS = "status";
用户列名
//Users column names
private static final String KEY_USER_ID = "user_id";
private static final String KEY_USER_IMG = "picture";
private static final String KEY_USER_EMAIL = "email";
private static final String KEY_USER_NAME = "name";
private static final String KEY_USER_PASSWORD = "password";
private static final String KEY_USER_PHONE = "phone";
状态列名称
//Status column names
private static final String KEY_STATUS_ID = "status_id";
private static final String KEY_STATUS = "status";
表创建语句
//Users table create statement
private static final String CREATE_TABLE_PROFILE = "CREATE TABLE " + TABLE_PROFILE +
"(" + KEY_USER_ID + " INTEGER PRIMARY KEY," + KEY_USER_IMG + " BLOB," +
KEY_USER_EMAIL + " VARCHAR," + KEY_USER_NAME + " VARCHAR," + KEY_USER_PASSWORD + " VARCHAR,"
+ KEY_USER_PHONE + " VARCHAR," + KEY_CREATED_AT + " DATETIME," + KEY_STATUS_ID + " INTEGER,"
+ " FOREIGN KEY " + "(" + KEY_STATUS_ID + ")" + " REFERENCES " + TABLE_STATUS + "(" + KEY_STATUS_ID + ")" + ")";
getProfile 方法
public Profile getProfile(String username){
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_PROFILE + " WHERE " + KEY_USER_EMAIL + " = " + username;
Log.e(LOG, selectQuery);
Cursor c = db.rawQuery(selectQuery, null);
if(c!=null)
c.moveToFirst();
Profile pf = new Profile();
pf.setID(c.getInt(c.getColumnIndex(KEY_USER_ID)));
pf.setImg(c.getBlob(c.getColumnIndex(KEY_USER_IMG)));
pf.setEmail(c.getString(c.getColumnIndex(KEY_USER_EMAIL)));
pf.setName(c.getString(c.getColumnIndex(KEY_USER_NAME)));
pf.setPassword(c.getString(c.getColumnIndex(KEY_USER_PASSWORD)));
pf.setPhone(c.getString(c.getColumnIndex(KEY_USER_PHONE)));
pf.setCreatedAt(c.getString(c.getColumnIndex(KEY_CREATED_AT)));
return pf;
}
logcat 消息
12-18 02:50:32.616: E/DatabaseHelper(7093): SELECT * FROM users WHERE email = test1
12-18 02:50:32.616: E/SQLiteLog(7093): (1) no such column: test1
12-18 02:50:32.636: E/AndroidRuntime(7093): FATAL EXCEPTION: main
12-18 02:50:32.636: E/AndroidRuntime(7093): android.database.sqlite.SQLiteException: no such column: test1 (code 1): , while compiling: SELECT * FROM users WHERE email = test1
【问题讨论】:
-
您需要用顶点 (') 将查询内的
username值括起来,因为它是一个 字符串 值。您的查询必须变为:SELECT * FROM users WHERE email = 'test1' -
非常感谢@dergolem,它已经开始工作了
-
你知道
null在db.rawQuery(selectQuery, null);中的作用吗? -
@DerGolem:见xkcd.com/327
-
@njzk2 是的,我知道 SQL 注入。但是:1 - 你的数据库真的对其他应用程序可见吗? 2 - 只是一个简单的例子,更不用说绑定参数(顺便说一句,这对于减少连接也很有好处)。
标签: android sqlite android-sqlite