有多个行时的 SQLite Select 语句
SQLite Select statement when have multiples rows
我想要 select * 来自 table 比较 3 行和 select return 一个 id,我创建了这个方法:
//UserDAO class
private SQLiteDatabase mDatabase;
private DatabaseHelper mDbHelper;
// irelative code
public Long selectUserLogin(String nickname, String chapter, String password) {
long id;
String selectQuery = "SELECT * FROM " +
DatabaseHelper.TABLE_USERS + " WHERE " +
DatabaseHelper.COLUMN_USERS_NICKNAME + " = " + nickname + " AND " +
DatabaseHelper.COLUMN_USERS_CHAPTER + " = " + chapter + " AND " +
DatabaseHelper.COLUMN_USERS_PASSWORD + " = " + password;
Log.e(TAG, selectQuery);
try {
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor != null)
cursor.moveToFirst();
id = cursor.getLong(cursor.getColumnIndex(DatabaseHelper.COLUMN_USERS_ID));
return id;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
已经在我的数据库上创建了昵称=q,章节=Q,密码=qqqqqq
这些是我调用方法来测试他的功能的地方
userDAO.selectUserLogin("q", "Q", "qqqqqq");
我用另一种列出我所有用户的方法进行了检查,我得到了我曾经创建的所有用户。
结果如下:
10-09 01:00:18.298 10978-10978/com.org.feedme.cisvmeeting.activities D/LeaderFragment: User: [
D/LeaderFragment: [1] 1, h, h, G
D/LeaderFragment: [2] 2, fkfkdk, fjfkdk, SAO
D/LeaderFragment: [3] 3, Filipe fila, Fil36
D/LeaderFragment: [4] 4, q, Q, qqqqqq
D/LeaderFragment: [5] 5, glgl, vmlc, GOLGO]
当我试图在 Android 设备监视器上查看我的数据文件夹时,该文件夹是空的,所以如果我无法访问数据库或者我没有正确插入,我会有点困惑。
我 logcat 的一部分,当我尝试调用方法 selectUserLogin:
10-09 00:46:01.198 7745-7745/com.org.feedme.cisvmeeting.activities
E/UserDAO: SELECT * FROM users WHERE nickname = q AND chapter = Q AND
password = qqqqqq
10-09 00:46:01.208 7745-7745/com.org.feedme.cisvmeeting.activities
E/SQLiteLog: (1) no such column: q
10-09 00:46:01.208 7745-7745/com.org.feedme.cisvmeeting.activities
W/System.err: android.database.sqlite.SQLiteException: no such column:
q (code 1): , while compiling: SELECT * FROM users WHERE nickname = q
AND chapter = Q AND password = qqqqqq
编辑:我的 android 设备上只有 运行 我的应用程序!
EDIT_2: 我测试了另一种类似的方法,第二种方法工作正常!
public String selectUser(long id) {
String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_USERS +
" WHERE " + DatabaseHelper.COLUMN_USERS_ID + "=" + id ;
String result = null;
Log.e(TAG, selectQuery);
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_USERS_NAME));
}
return result;
}
您需要用引号将字符串参数括起来,因为您没有使用 selectionArgs(rawQuery
中的第二个参数)。
String selectQuery = "SELECT * FROM " +
DatabaseHelper.TABLE_USERS + " WHERE " +
DatabaseHelper.COLUMN_USERS_NICKNAME + " = '" + nickname + "' AND " +
DatabaseHelper.COLUMN_USERS_CHAPTER + " = '" + chapter + "' AND " +
DatabaseHelper.COLUMN_USERS_PASSWORD + " = '" + password + "' ";
Log.e(TAG, selectQuery);
try {
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
或者您可以这样做,它会为您处理字符串。
String selectQuery = "SELECT * FROM " +
DatabaseHelper.TABLE_USERS + " WHERE " +
DatabaseHelper.COLUMN_USERS_NICKNAME + "=? AND " +
DatabaseHelper.COLUMN_USERS_CHAPTER + "=? AND " +
DatabaseHelper.COLUMN_USERS_PASSWORD + "=? ";
String[] selectionArgs = new String[] { nickname, chapter, password };
Log.e(TAG, selectQuery);
try {
Cursor cursor = mDatabase.rawQuery(selectQuery, selectionArgs);
首先,您在设备上删除您的应用程序,然后重新安装该应用程序,现在插入您需要的数据,现在无论您输入的数据是什么,都会记住并将这些数据应用到 select 的查询参数中。
我想要 select * 来自 table 比较 3 行和 select return 一个 id,我创建了这个方法:
//UserDAO class
private SQLiteDatabase mDatabase;
private DatabaseHelper mDbHelper;
// irelative code
public Long selectUserLogin(String nickname, String chapter, String password) {
long id;
String selectQuery = "SELECT * FROM " +
DatabaseHelper.TABLE_USERS + " WHERE " +
DatabaseHelper.COLUMN_USERS_NICKNAME + " = " + nickname + " AND " +
DatabaseHelper.COLUMN_USERS_CHAPTER + " = " + chapter + " AND " +
DatabaseHelper.COLUMN_USERS_PASSWORD + " = " + password;
Log.e(TAG, selectQuery);
try {
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
if (cursor != null)
cursor.moveToFirst();
id = cursor.getLong(cursor.getColumnIndex(DatabaseHelper.COLUMN_USERS_ID));
return id;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
已经在我的数据库上创建了昵称=q,章节=Q,密码=qqqqqq
这些是我调用方法来测试他的功能的地方
userDAO.selectUserLogin("q", "Q", "qqqqqq");
我用另一种列出我所有用户的方法进行了检查,我得到了我曾经创建的所有用户。
结果如下:
10-09 01:00:18.298 10978-10978/com.org.feedme.cisvmeeting.activities D/LeaderFragment: User: [
D/LeaderFragment: [1] 1, h, h, G
D/LeaderFragment: [2] 2, fkfkdk, fjfkdk, SAO
D/LeaderFragment: [3] 3, Filipe fila, Fil36
D/LeaderFragment: [4] 4, q, Q, qqqqqq
D/LeaderFragment: [5] 5, glgl, vmlc, GOLGO]
当我试图在 Android 设备监视器上查看我的数据文件夹时,该文件夹是空的,所以如果我无法访问数据库或者我没有正确插入,我会有点困惑。
我 logcat 的一部分,当我尝试调用方法 selectUserLogin:
10-09 00:46:01.198 7745-7745/com.org.feedme.cisvmeeting.activities E/UserDAO: SELECT * FROM users WHERE nickname = q AND chapter = Q AND password = qqqqqq
10-09 00:46:01.208 7745-7745/com.org.feedme.cisvmeeting.activities E/SQLiteLog: (1) no such column: q
10-09 00:46:01.208 7745-7745/com.org.feedme.cisvmeeting.activities W/System.err: android.database.sqlite.SQLiteException: no such column: q (code 1): , while compiling: SELECT * FROM users WHERE nickname = q AND chapter = Q AND password = qqqqqq
编辑:我的 android 设备上只有 运行 我的应用程序!
EDIT_2: 我测试了另一种类似的方法,第二种方法工作正常!
public String selectUser(long id) {
String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_USERS +
" WHERE " + DatabaseHelper.COLUMN_USERS_ID + "=" + id ;
String result = null;
Log.e(TAG, selectQuery);
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_USERS_NAME));
}
return result;
}
您需要用引号将字符串参数括起来,因为您没有使用 selectionArgs(rawQuery
中的第二个参数)。
String selectQuery = "SELECT * FROM " +
DatabaseHelper.TABLE_USERS + " WHERE " +
DatabaseHelper.COLUMN_USERS_NICKNAME + " = '" + nickname + "' AND " +
DatabaseHelper.COLUMN_USERS_CHAPTER + " = '" + chapter + "' AND " +
DatabaseHelper.COLUMN_USERS_PASSWORD + " = '" + password + "' ";
Log.e(TAG, selectQuery);
try {
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
或者您可以这样做,它会为您处理字符串。
String selectQuery = "SELECT * FROM " +
DatabaseHelper.TABLE_USERS + " WHERE " +
DatabaseHelper.COLUMN_USERS_NICKNAME + "=? AND " +
DatabaseHelper.COLUMN_USERS_CHAPTER + "=? AND " +
DatabaseHelper.COLUMN_USERS_PASSWORD + "=? ";
String[] selectionArgs = new String[] { nickname, chapter, password };
Log.e(TAG, selectQuery);
try {
Cursor cursor = mDatabase.rawQuery(selectQuery, selectionArgs);
首先,您在设备上删除您的应用程序,然后重新安装该应用程序,现在插入您需要的数据,现在无论您输入的数据是什么,都会记住并将这些数据应用到 select 的查询参数中。