我想检查记录是否存在.
这是我尝试过的:
MainActivity.class
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("Ontext changed " + new String(s.toString()));
strDocumentFrom = s.toString();
if(s.toString().isEmpty()){
} else {
try{
strTransactionDate = dbHelper.getTransactionDateByDocumentNumber(strDocumentFrom);
//strTotalAmount = dbHelper.getTotalAmountByDocumentNumber(strDocumentFrom);
//strVan = dbHelper.getVanByDocumentNumber(strDocumentFrom);
//etTransactionDate.setText(strTransactionDate);
//etTotalAmount.setText(strTotalAmount);
//Log.d("Van", "" + strVan);
//etVan.setText(strVan);
} catch (SQLiteException e) {
e.printStackTrace();
Toast.makeText(ReceivingStocksHeader.this,
"Document number does not exist.", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
DBHelper.class
// TODO DISPLAYING RECORDS TO TRANSRCVHEADER
public String getTransactionDateByDocumentNumber(String strDocumentNumber){
String[] columns = new String[]{KEY_TRANSACTIONDATE};
Cursor c = myDataBase.query(TBL_INTRANS,
columns, null,
null, null, null, null, null);
if(c != null){
c.moveToFirst();
String date = c.getString(0);
return date;
} else {
Log.d("Error", "No record exists");
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
但它没有让它到catch块来显示吐司.
我在这里做错了什么?
dip*_*ali 91
public static boolean CheckIsDataAlreadyInDBorNot(String TableName,
String dbfield, String fieldValue) {
SQLiteDatabase sqldb = EGLifeStyleApplication.sqLiteDatabase;
String Query = "Select * from " + TableName + " where " + dbfield + " = " + fieldValue;
Cursor cursor = sqldb.rawQuery(Query, null);
if(cursor.getCount() <= 0){
cursor.close();
return false;
}
cursor.close();
return true;
}
Run Code Online (Sandbox Code Playgroud)
我希望这对你有用...如果db中已存在记录,则此函数返回true.否则返回false.
Cha*_*ham 30
这些都是很好的答案,但许多人忘记关闭光标和数据库.如果不关闭游标或数据库,则可能会遇到内存泄漏.
另外:
搜索时可能会出现String
包含非字母/数字字符的错误.例如:" 1a5f9ea3-ec4b-406b-a567-e6927640db40
".破折号(-
)会导致unrecognized token
错误.您可以通过将字符串放入数组中来克服此问题.所以养成这样查询的习惯:
public boolean hasObject(String id) {
SQLiteDatabase db = getWritableDatabase();
String selectString = "SELECT * FROM " + _TABLE + " WHERE " + _ID + " =?";
// Add the String you are searching by here.
// Put it in an array to avoid an unrecognized token error
Cursor cursor = db.rawQuery(selectString, new String[] {id});
boolean hasObject = false;
if(cursor.moveToFirst()){
hasObject = true;
//region if you had multiple records to check for, use this region.
int count = 0;
while(cursor.moveToNext()){
count++;
}
//here, count is records found
Log.d(TAG, String.format("%d records found", count));
//endregion
}
cursor.close(); // Dont forget to close your cursor
db.close(); //AND your Database!
return hasObject;
}
Run Code Online (Sandbox Code Playgroud)
Piy*_*ush 21
你也可以看到这个:
if (cursor.moveToFirst()) {
// record exists
} else {
// record not found
}
Run Code Online (Sandbox Code Playgroud)
要么
你只需检查Cursor not null,然后检查count不为0.
所以,你试试这个......
DBHelper.getReadableDatabase();
Cursor mCursor = db.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE yourKey=? AND yourKey1=?", new String[]{keyValue,keyvalue1});
if (mCursor != null)
{
return true;
/* record exist */
}
else
{
return false;
/* record not exist */
}
Run Code Online (Sandbox Code Playgroud)
Kap*_*uri 14
原始查询更容易受到SQL注入攻击.我建议改用query()
方法.
public boolean Exists(String searchItem) {
String[] columns = { COLUMN_NAME };
String selection = COLUMN_NAME + " =?";
String[] selectionArgs = { searchItem };
String limit = "1";
Cursor cursor = db.query(TABLE_NAME, columns, selection, selectionArgs, null, null, null, limit);
boolean exists = (cursor.getCount() > 0);
cursor.close();
return exists;
}
Run Code Online (Sandbox Code Playgroud)
来源:这里
您可以使用SELECT EXISTS
命令并从文档中cursor
使用a 执行它rawQuery
EXISTS运算符始终求值为整数值0和1之一.如果执行指定为EXISTS运算符的右侧操作数的SELECT语句将返回一行或多行,则EXISTS运算符的计算结果为1.如果执行SELECT根本不返回任何行,然后EXISTS运算符的计算结果为0.
SELECT EXISTS with LIMIT 1要快得多。
查询示例:SELECT EXISTS (SELECT * FROM table_name WHERE column='value' LIMIT 1);
代码示例:
public boolean columnExists(String value) {
String sql = "SELECT EXISTS (SELECT * FROM table_name WHERE column='"+value+"' LIMIT 1)";
Cursor cursor = database.rawQuery(sql, null);
cursor.moveToFirst();
// cursor.getInt(0) is 1 if column with value exists
if (cursor.getInt(0) == 1) {
cursor.close();
return true;
} else {
cursor.close();
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
105599 次 |
最近记录: |