1

次のコードを使用してAndroidのデータベースに行を追加しようとしていますが、行がまだ存在しないことを確認したいのですが、どうすればよいですか?

void addKey(String key, String value, String table) {

            SQLiteDatabase db = this.getWritableDatabase();

            ContentValues values = new ContentValues();
            values.put(KEY_KEY, key);
            values.put(KEY_VALUE, value);

            // Inserting Row
            db.insert(table, null, values);
            db.close(); // Closing database connection          
    }

次のコードを使用してみましたが、機能しませんでした

public boolean check(String key, String value, String table) {
        SQLiteDatabase db = this.getWritableDatabase();
        String sql = "select * from " + table + " where key= " + key + " and value= " + value;
        Cursor cur = db.rawQuery( sql, new String[0] );

        if(cur.getCount() == 0)
        {
            cur.close();
            db.close();
            return false;
        }

        else{
            cur.close();
            db.close();
            return true;
        }

    }

エラー:

12-04 16:34:46.867: E/AndroidRuntime(2743): Caused by: android.database.sqlite.SQLiteException: no such column: hi: , while compiling: select * from tableOne where key= hi and value= baby
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1428)
12-04 16:34:46.867: E/AndroidRuntime(2743):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1396)
4

1 に答える 1

2

SQLで文字列を正しくフォーマットするか(文字列自体と文字列内の引用符を引用する必要があります)、パラメータを使用して文字列をデータベースに渡す必要があります。

String sql = "SELECT * FROM " + table + " WHERE key=? AND value=?";
Cursor cur = db.rawQuery(sql, new String[] { key, value });

値だけが変更された場合、本当に同じキーで別のレコードを挿入しますか?それとも、そのレコードを更新しますか?

于 2012-12-04T21:36:15.627 に答える