从数据库中不存在的数组中获取特定值

Posted

技术标签:

【中文标题】从数据库中不存在的数组中获取特定值【英文标题】:Getting specific value from Array which does not exist in database 【发布时间】:2017-02-13 21:28:38 【问题描述】:

我正在尝试从数据库中不存在的数组中获取值或数据。

 public  Cursor checkExistence()
        Cursor c=null;
        String[] values="headache","cold";
        SQLiteDatabase db= getReadableDatabase();
        String query="SELECT * FROM "+TABLE_SYMPTOMS+" WHERE "+COLUMN_SYMP+" IN ("+toArrayRep(values)+")";
        c=db.rawQuery(query,null);
        Log.i("From Cursor","Cursor Count : " + c.getCount());
        if(c.getCount()>0)
            String val= c.getString()
            Log.i("From Cursor","No insertion");
        else
            Log.i("From Cursor","Insertion");
        
        db.close();
        return c;
    



 public static String toArrayRep(String[] in) 
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < in.length; i++) 
        if (i != 0) 
            result.append(",");
        
        result.append("'" + in[i] + "'");
    
    return result.toString();

String values="headache","cold",数据库中存在头痛但不存在感冒。从上面的代码中,光标返回Count=1,即count&gt;0,因此我无法插入表中。我想知道如何独立检查单个数据是否存在,不存在的数据将被插入到表中。所以在这种情况下,“冷”将能够被插入到表中。

【问题讨论】:

根据您的逻辑,c.getCount() == values.length -> 所有记录都在数据库中。如果 c.getCount() 小于 values.length,则某些记录不在 db 中。虽然,没有逻辑,您可以使用 1 sql:***.com/questions/2779823/… 进行唯一插入 【参考方案1】:

如果您使用单个查询来检查所有值,那么您得到的是现有值的列表,您仍然需要在原始列表中搜索任何差异。

单独检查每个值更简单:

String[] values =  "headache", "cold" ;
SQLiteDatabase db = getReadableDatabase();

db.beginTransaction();
try 
    for (String value : values) 
        long count = DatabaseUtils.queryNumEntries(db,
                TABLE_SYMPTOMS, COLUMN_SYMP+" = ?", new String[]  value );
        if (count == 0) 
            ContentValues cv = new ContentValues();
            cv.put(COLUMN_SYMP, value);
            db.insert(TABLE_SYMPTOMS, null, cv);
        
    
    db.setTransactionSuccessful();
 finally 
    db.endTransaction();

【讨论】:

【参考方案2】:

您需要检查 Cursor。moveToFirst()

True = 光标中有记录。 错误 = 没有记录。

我的代码示例:

return database.query( table.getNameTable(),
                       table.getColumns(),
                       table.getWhereSelectTableScript(),
                       null,
                       table.getGroupBySelectTableScript(),
                       table.getHavingSelectTableScript(),
                       table.getOrderBySelectTableScript(),
                       table.getLimitRecordsSelectTableScript());

查看更多here!

【讨论】:

对不起,但这无济于事,我想用count=0 获取值,它显示它不在数据库中的值。不过感谢您的帮助

以上是关于从数据库中不存在的数组中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章

当代码从后面执行时,从 javascript 更新的文本框值不存在

如何从 Getnote.vue 中存在的 notes[] 数组中获取 id 并基于该 ID 如何更新特定卡?

pig - 将数据从行转换为列,同时为特定行中不存在的字段插入占位符

Swift 3 从一个数组中删除另一个数组中不存在的对象并保持顺序

即使数据库中不存在我如何返回特定时间的数据

即使数据库中不存在,也要显示记录