我不能在我的Android应用程序中将对象保存到sqlite中

时间:2016-08-06 08:17:50

标签: java android sqlite

我试图将对象保存到sqlite中,并且该对象的类已实现Serializable。但总有一个错误:

 android.database.sqlite.SQLiteException: unrecognized token:
 "[Ljava.lang.Object;@277c81d9" (code 1): , while compiling: insert
 into mClass(classData) values(?)[Ljava.lang.Object;@277c81d9

这是我的代码:

 public boolean add(ReturnInfo ri) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        db = dh.getWritableDatabase();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(ri);
        oos.flush();
        byte[] data = bos.toByteArray();
        bos.close();
        oos.close();
        db.execSQL("insert into mClass(classData) values(?)" + new Object[]{data});
        db.close();
        Log.e("db", "insert succeeded");
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("db", "insert failed");
        return false;
    }

数据库已成功创建,我不知道哪里出错了。

1 个答案:

答案 0 :(得分:1)

问题是您以错误的方式使用预准备语句。

db.execSQL("insert into mClass(classData) values(?)" + new Object[]{data});

在这里,您生成了不合适的SQL语句,因为您只需将一个对象添加到字符串的末尾,最后得到如下内容:

"insert into mClass(classData) values(?)[Ljava.lang.Object;@277c81d9"

这不是SQL语句。

要使用预准备语句,您需要编写以下内容:

SQLiteStatement stmt = 
    db.compileStatement("insert into mClass(classData) values(?)");
stmt.bindString(1, data);
stmt.execute()

另外,请查看this问题,以便更好地了解android中的预处理语句。