Android 具有多行时的SQLite Select语句
我想从比较3行的表中选择*并选择返回一个id,我创建了以下方法:Android 具有多行时的SQLite Select语句,android,sql,sqlite,android-sqlite,Android,Sql,Sqlite,Android Sqlite,我想从比较3行的表中选择*并选择返回一个id,我创建了以下方法: //UserDAO class private SQLiteDatabase mDatabase; private DatabaseHelper mDbHelper; // irelative code public Long selectUserLogin(String nickname, String chapter, String password) { long id; String selectQu
//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和密码=QQQ
这就是我调用该方法来测试其功能的地方
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设备监视器上查看我的数据文件夹时,该文件夹是空的,所以如果我无法访问数据库或插入不正确,我会有点困惑
我尝试调用selectUserLogin方法时日志的一部分:
10-09 00:46:01.198 7745-7745/com.org.feedme.cisvmeeting.activities
E/UserDAO:从昵称=q和章节=q的用户中选择*并
密码=qqqqq
10-09 00:46:01.208 7745-7745/com.org.feedme.cisvmeeting.activities
E/SQLiteLog:(1)没有这样的列:q
10-09 00:46:01.208 7745-7745/com.org.feedme.cisvmeeting.activities
W/System.err:android.database.sqlite.SQLiteException:没有这样的列:
q(代码1):,编译时:从昵称=q的用户中选择*
而chapter=Q和password=qqqq
编辑:我只在android设备上运行我的应用程序
编辑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 + "=? 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的查询参数中 检查您的数据库是否已创建,以及是否已使用模拟器插入数据检查您创建的表是否具有正确的字段名。我正在设备上运行@FilipeFilardi,您可以尝试在equals参数周围添加单引号,看看这样做是否有任何效果:
“=”+“+昵称+”和“
@jyanks尝试过,但仍然有问题!建议的thanx尝试了这两种方法并获得以下错误-->CursorIndexOutOfBoundsException:请求索引0,大小为0和java.lang.NullPointerException假设数据库设置正确,则此代码是正确的。您可以执行String selectQuery=“SELECT*FROM”+DatabaseHelper.TABLE_USERS”
,然后调用mDatabase.rawQuery(selectQuery,null).getCount();
查看数据库中是否确实有行。此外,我还将if块从if(cursor!=null){cursor cursor.moveToFirst()}
更改为:if(cursor!=null&&cursor.moveToFirst()){return id from cursor}
以便确保有实际行返回数据。感谢所有提示,从“+DatabaseHelper.TABLE\u USERS”中选择*
返回了5,所以我想问题不是数据库!谢谢,一个问题是引号,另一个问题是一个参数的.getText().toString()
!多亏了u!现在解决了!尝试了这些,但什么都没有发生
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);