将值插入数据库sqlite无法正常工作

时间:2013-12-07 12:03:44

标签: android sqlite android-sqlite

您好我有数据库SQLITE android

的问题

请查看我的代码以供参考

当我要插入值时,它返回-1,我从调试中得知 这不是插入值所以告诉我有什么问题 我从列表视图中插入值。

public void add_device(String data,
        ArrayList<HashMap<String, String>> jsonlist) {
    try {
        SQLiteDatabase db = this.getReadableDatabase();
        // database = this.getWritableDatabase();
        for (HashMap<String, String> map : jsonlist) {

            ContentValues values = new ContentValues();
            values.put(SAVE_COLUMN_NAME, data);
            values.put(SAVE_COLUMN_KEY, map.get(SAVE_COLUMN_KEY));
            values.put(SAVE_COLUMN_VALUE, map.get(SAVE_COLUMN_VALUE));
            @SuppressWarnings("unused")
            Long int1 = db.insert(SAVE_TABLE_NAME, null, values);
            Log.i("insserted value ", int1 + "");
        }

    }
    /*
     * for(HashMap<String, String> map : mylist){ ContentValues cv = new
     * ContentValues(); cv.put(FILE_NAME, map.get(FILE_NAME)); cv.put(DESC,
     * map.get(DESC)); cv.put(UPLOADED_BY, map.get(DATE_UPLOADED));
     * cv.put(ACTION, map.get(FILE_NAME)); cv.put(ID, map.get(ID));
     * cv.put(FILE_URI, map.get(FILE_URI)); db.insert("tablename", null,
     * cv); }
     */

    catch (Exception e) {
        // TODO: handle exception
    }
}

提前致谢

3 个答案:

答案 0 :(得分:2)

我猜测“-1”值来自你的Log.i(...)消息,所以-1是db.insert(...)调用的返回值。 -1表示发生了错误。

而不是使用insert,用户insertOrThrow(...)并查看异常以找出问题原因。

答案 1 :(得分:1)

插入记录时返回

-1。 这可能是由于违反了表属性(比如你插入的数据类型与表中列的类型之间的冲突,是“key”和表中的“Value”列都是字符串类型)也可能有其他几个原因为此,您可能会错过插入操作中的任何表列值或'SAVE_COLUMN_NAME'的值,'SAVE_COLUMN_KEY','SAVE_COLUMN_VALUE'与表中的相应列名称不匹配。

[在运行应用程序时打开单独的命令提示符并编写adb logcat)并在此处显示结果(特别是当您尝试插入记录时),以便我们有更多与问题相关的信息]

[编辑]

好的,所以我认为我找到了问题

 SQLiteDatabase db = this.getReadableDatabase();

您正在插入声明

   Long int1 = db.insert(SAVE_TABLE_NAME, null, values);

INSERT应该使用可写数据库无法读取的数据库。

这里SQLiteDatabase db是一个可读数据库,它应该是一个可写数据库

变化

         SQLiteDatabase db = this.getReadableDatabase();

         SQLiteDatabase db = this.getWritableDatabase();

答案 2 :(得分:0)

我做了类似

的更改
public void add_device(String data,ArrayList<HashMap<String, String>> jsonlist) {
    try {
        database = this.getWritableDatabase();
        for (HashMap<String, String> map : jsonlist) {
            ContentValues values = new ContentValues();
            values.put(SAVE_COLUMN_NAME, data);
            values.put(SAVE_COLUMN_KEY, map.get(SAVE_COLUMN_KEY));
            values.put(SAVE_COLUMN_VALUE, map.get(SAVE_COLUMN_VALUE));
            Long int1 = database.insertOrThrow(SAVE_TABLE_NAME, null,
                    values);
            Log.i("insserted value ", int1 + "");
        }
    }

    /*
     * for(HashMap<String, String> map : mylist){ ContentValues cv = new
     * ContentValues(); cv.put(FILE_NAME, map.get(FILE_NAME)); cv.put(DESC,
     * map.get(DESC)); cv.put(UPLOADED_BY, map.get(DATE_UPLOADED));
     * cv.put(ACTION, map.get(FILE_NAME)); cv.put(ID, map.get(ID));
     * cv.put(FILE_URI, map.get(FILE_URI)); db.insert("tablename", null,
     * cv); }
     */
    catch (Exception e) {

    }
}