从不在Android SQLite中输入cursor.moveToNext()
我正在尝试Android的官方文档。创建数据库、表和插入数据工作正常。但我无法从数据库中获取数据。下面是从表中检索数据的代码段从不在Android SQLite中输入cursor.moveToNext(),android,sqlite,select,Android,Sqlite,Select,我正在尝试Android的官方文档。创建数据库、表和插入数据工作正常。但我无法从数据库中获取数据。下面是从表中检索数据的代码段 public Person searchDataInDB(String personCellString) { SQLiteDatabase db = getReadableDatabase(); // Define a projection that specifies which columns from the database // y
public Person searchDataInDB(String personCellString) {
SQLiteDatabase db = getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
PersonTable.COLUMN_NAME_ID,
PersonTable.COLUMN_NAME_NAME,
PersonTable.COLUMN_NAME_CELL_NO,
PersonTable.COLUMN_NAME_ADDRESS
};
// Filter results WHERE "cell#" = 'Person Cell #'
String selection = SQLiteDBHelper.PersonTable.COLUMN_NAME_CELL_NO + " = ?";
String[] selectionArgs = {"'" + personCellString + "'"};
// How you want the results sorted in the resulting Cursor
// String sortOrder = SQLiteDBHelper.PersonTable.COLUMN_NAME_ID + " DESC";
Cursor cursor = db.query(
SQLiteDBHelper.PersonTable.TABLE_NAME, // The table to query
null, // The array of columns to return (pass null to get all)
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
null // The sort order
);
String [] names = cursor.getColumnNames();
Log.e("SQLiteDB", "cursorCount = " + cursor.getCount() + ", cursorColumnCount = " + cursor.getColumnCount() + ", Column = " + names[0]);
Person person = null;
while (cursor.moveToNext()) {
int id = (int) cursor.getLong(
cursor.getColumnIndexOrThrow(PersonTable.COLUMN_NAME_ID));
Log.e("SQLiteDB", "moveToNext id = " + id);
String name = cursor.getString(
cursor.getColumnIndexOrThrow(SQLiteDBHelper.PersonTable.COLUMN_NAME_NAME));
Log.e("SQLiteDB", "moveToNext name = " + name);
String cellNo = cursor.getString(
cursor.getColumnIndexOrThrow(SQLiteDBHelper.PersonTable.COLUMN_NAME_CELL_NO));
Log.e("SQLiteDB", "moveToNext cell = " + cellNo);
String address = cursor.getString(
cursor.getColumnIndexOrThrow(SQLiteDBHelper.PersonTable.COLUMN_NAME_ADDRESS));
Log.e("SQLiteDB", "moveToNext address = " + address);
person = new Person(id, name, cellNo, address);
}
cursor.close();
return person;
}
我的应用程序似乎没有进入while循环,即while(cursor.moveToNext()
),因此此方法始终返回person的初始值,该值为null。因此,从代码下面看,第一个条件始终为true
Person person = dbHelper.searchDataInDB(personCellString);
if (person == null) {
Toast.makeText(mContext, "no such record exists in database!", Toast.LENGTH_LONG).show();
} else {
String personDetails = "Name = " + person.getName()
+ "Cell Number = " + person.getCellNumber()
+ "Address = " + person.getAddress();
personDetailsTV.setText(personDetails);
}
我正在使用SQLite的DB Browser,以便可以看到记录已成功添加到数据库中
我应该如何处理上述代码才能使其正常工作?您正在如何处理此代码:
String[] selectionArgs = {"'" + personCellString + "'"};
正在搜索包含在单引号中的personCellString
的字符串值,而不是字符串personCellString
的实际值删除单引号:
String[] selectionArgs = {personCellString};
您不必担心最终sql语句中
personCellString
的字符串表示形式,该语句将被构造和执行,其中将包含它们,而不显式设置它们。是的,它现在可以工作了。我把它与本机sql查询混淆了,我们必须在其中添加引号:)。谢谢