我目前的数据库设置如下:
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_LOCKERNUMBER
+ " TEXT NOT NULL, " + KEY_STATUS + " INTEGER, " + KEY_PIN
+ " INTEGER);");
我正在尝试编写一种方法来从列中获取特定储物柜号码的密码。有任何想法吗?我很新,我想我需要使用查询功能和游标。我只需要一个获取整数值并将其存储到int变量中,这样我就可以比较用户输入的密码和数据库中的密码。
答案 0 :(得分:1)
查询数据库返回Cursor object
。您应该使用db.query()
方法获取行。传递表名,要获取的列数组(如果需要所有列,则返回null),传递应该类似于"id = ?"
或"key > ?"
的选择字符串等,然后传递一个字符串包含前一个字符串中?
的值的数组,
最后为having
,groupBy
和orderBy
传递null,除非你想使用它们。
Cursor cursor = db.query(TABLE_NAME, new String[] { KEY_ROWID }, "id = ?", new String[] { Integer.toString(id) }, null, null, null);
获得Cursor
后,请cursor.moveToFirst()
或cursor.moveToPosition(0)
(无法记住确切的方法,但重点是将光标移动到第一个检索到的行)
然后您将使用
迭代cursor
while(cursor.moveToNext()) {
int keyRowIdColumnIndex = cursor.getColumnIndex(KEY_ROWID);
int yourValue = cursor.getInt(keyRowIdColumnIndex);
int keyLockNumberColumnIndex = cursor.getColumnIndex(KEY_LOCKNUMBER);
int pin = cursor.getInt(keyLockNumberColumnIndex);
}
答案 1 :(得分:0)
这是一项非常直接的任务,有很多tutorials, examples,similar questions on SO:
How to perform an SQLite query within an Android application?
通常 - 您需要查询传递搜索参数的数据库。请参阅documentation。
它会返回一个Cursor,其中包含匹配的结果,您可以then iterate over和manipulate as you wish。
Fyi - 将密码存储在数据库表中是个坏主意。在Android数据库上可以访问并轻松阅读。如果重要的话,您需要加密数据或考虑另一种存储方式。
答案 2 :(得分:0)
//Try This code
public String getLabeId(String LockNo)
{
ArrayList<String> Key_Pin_array = new ArrayList<String>();
Cursor cur = db.rawQuery("SELECT * FROM DATABASE_TABLE where KEY_LOCKERNUMBER = '" + LockNo + "'", null);
try {
while (cur.moveToNext())
{
System.out.println("Key_Pin" + cur.getString(3));
Key_Pin_array.add(cur.getString(3));
}
}
catch (Exception e)
{
System.out.println("error in getLabelID in DB() :" + e);
}
finally
{
cur.close();
}
return id;
}