1

私はSqliteデータベースを使用しており、行に空の値を保存しています.データベースに空の値を保存するためにこのコードを使用しています:

            ContentValues values = new ContentValues();
            values.put(KEY_NAME,"");
            values.put(KEY_PH_NO,"");           
            values.put(KEY_FOLDER_NAME, contact.getFolderName());
            values.put(KEY_FolderAddress, contact.getParentFolderAddress());
            values.put(KEY_TIME, contact.getTime());    
            values.put(KEY_DATE, contact.getDate());

そして、次のクエリを使用して、空の値を持つデータベース エントリを取得しています。

String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS + " WHERE "+KEY_FolderAddress+" ='"
                     +FileAddress+"'"+" AND "+KEY_FOLDER_NAME+" ='"+FileName+"'"+" AND "+KEY_DATE+" ='"+"0"+"'"
                     +" AND "+KEY_PH_NO+" ='"+""+"'"+" AND "+KEY_NAME+" ='"+""+"'";

しかし、空の値を取得しているときにこの例外が発生しています:

12-25 11:52:40.531: E/Exception:(1990): android.database.sqlite.SQLiteException: unknown error: , while compiling: SELECT  * FROM rules WHERE folderaddress ='/sdcard/Velosys/a' AND folder_name ='a' AND date ='0' AND phone_number ='' AND name ='' Exception occured in getTimeOfTheFolderFromContact() of DatabaseHandlerRule.java

私はたくさん検索しましたが、解決策が得られませんでした.sqliteデータベースから空の値を取得する正しい方法を見つけるのを手伝ってください.よろしくお願いします

編集:

I am storing 2 entries with empty values i.e KEY_NAME and KEY_PH_NO

これはテーブル形式です:

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY, " +KEY_NAME+" TEXT, "+ KEY_PH_NO + " TEXT, "
            +KEY_FOLDER_NAME+" TEXT, "+ KEY_FolderAddress + " TEXT, "+KEY_TIME + " TEXT, "+KEY_DATE+" TEXT "+")";
            db.execSQL(CREATE_CONTACTS_TABLE);
4

4 に答える 4

1

データベースに保存するには、共通の値を使用する必要があります。

ContentValues values = new ContentValues();
            values.put(KEY_NAME,"null");
            values.put(KEY_PH_NO,"null");  

このコードを使用して null 値を取得してください。「null」値はデータベースに文字列値として格納されるため、その通りです。

int i = resultSet.getInt(resultSet.getColumnIndex(columnName));
        String str = resultSet.getString(resultSet.getColumnIndex(columnName));
        boolean bool = resultSet.isNull(resultSet.getColumnIndex(columnName));
        if( str == null )
        {
            return -1;
        }
        return i; 
于 2012-12-25T07:11:07.977 に答える
1

insert Any value の場合、メソッドの方法は正しいです。例えば:

public boolean insertSample() {
    boolean success = false;

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, "");
    values.put(KEY_PH_NO, "");
    values.put(KEY_FOLDER_NAME, "foldername");
    values.put(KEY_FolderAddress, "folderAddress");
    values.put(KEY_TIME, "anytime");
    values.put(KEY_DATE, "date");

    long id = database.insert(TABLE_SAMPLe_DETAIL, null, values);

    success = id > 0;

    return success;
}

取得には、このように使用できます。

public Cursor getAllSample(String fileAddress, String fileName,
        String keyDate, String keyPhone, String keyName) {

    String whereClause = KEY_FolderAddress + "=? AND " + KEY_FOLDER_NAME
            + " =? AND " + KEY_DATE + " =? AND " + KEY_PH_NO + " =? AND "
            + KEY_NAME + " =?";
    String[] whereArgs = new String[] { String.valueOf(fileAddress),
            String.valueOf(fileName), String.valueOf(keyDate),
            String.valueOf(keyPhone), String.valueOf(keyName) };

    Cursor cursor = database.query(TABLE_SAMPLe_DETAIL, null, whereClause, whereArgs,
            null, null, null);

    if(cursor != null && cursor.getCount() > 0) {
        System.out.println("Your Query is correct");
    }

    return cursor;
} 

このメソッドは次のように呼び出すことができます: getAllSample("folderAddress", "foldername", "date", "", "");

database は SQLiteDatabase のオブジェクトです。

于 2012-12-25T07:37:00.590 に答える
1

この 2 つの値を文字列として保存してみてください

        values.put(KEY_TIME, contact.getTime());    
        values.put(KEY_DATE, contact.getDate());
于 2012-12-25T07:42:26.100 に答える
0

各 SQL クエリを実行する前に、Sqliteman または任意の sqlite クエリ ブラウザで実行するのが最善です。これには 2 つの利点があります。1-
構文エラーが表示され、修正できます。
2-テーブルの列のデフォルト値を知っている


したがって、列に null が格納されている場合は、クエリの where 句で「IS NULL」を使用できます。

于 2012-12-25T08:28:03.027 に答える