0

私のテーブル作成クエリは次のとおりです:--

     String CREATE_LOGIN_TABLE ="CREATE TABLE IF NOT EXIST "+ TABLE_FORWARDMSG +"("+KEY_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT,"+KEY_MSG_BODY+ " TEXT UNIQUE,"+KEY_MSG_ADDRESS+" TEXT UNIQUE,"+KEY_MSG_DATE+" TEXT UNIQUE" +")";

そして、私はこのコードから値にアクセスしています:---

String selectQuery="SELECT * FROM "+TABLE_FORWARDMSG;
     SQLiteDatabase db=this.getReadableDatabase();
 Cursor cursor=db.rawQuery(selectQuery, null);
  if( cursor.moveToFirst()){

        for(int i=0;i<cursor.getCount();i++){
            map.put("msgBody", cursor.getString(1));
            map.put("msgAddress", cursor.getString(2));
            map.put("msgDate", cursor.getString(3));
            user.add(map);
            cursor.moveToNext();

        }

       }
        cursor.close();
        db.close();

今私の問題はそれです:----

UNIQUEをCREATE TABLEから削除すると、同じ値を挿入すると新しい行が作成され、 CREATE TABLE で UNIQUE を使用している場合は、毎回cur.getCount()値が1になります。私はSQLiteが初めてです。何が問題なのか教えてください。

4

2 に答える 2

0

あなたのコードはOKのようです。たぶん、KEY_MSG_DATE を UNIQUE のようにすべきではありません。自分がやりたいことについて、より多くの情報を得るようにしてください。

于 2012-11-20T13:43:40.333 に答える
0

あなたが実装したのは、すべての列のすべてのエントリが列内で一意でなければならないということですが、列 msgBody、msgAddress、および msgDate を含む行はテーブル内で一意でなければならないということです。

UNIQUE 句ですべての列を一緒に配置することで、これを実現できます。

UNIQUE(msgBody, msgAddress, msgDate) ON CONFLICT REPLACE
于 2012-11-20T13:43:48.537 に答える