2016-08-06 6 views
1

オブジェクトをsqliteに保存しようとしましたが、オブジェクトのクラスがSerializableを実装しました。私のアンドロイドアプリでsqliteにオブジェクトを保存できません

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; 
    } 

データベースが正常に作成された、私は間違っていた見当がつかない:

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

はここに私のコードです。しかし、常にエラーがあります。

+0

確かに可能ですが、構文エラーはありませんか? (SQLSyntax) – Luftbaum

+1

パラメータ値のプレースホルダを置き換える文字列連結が必要なようです。あなたのSQLクエリはmClass(classData)の値(?)[Ljava.lang.Object; @ 277c81d9 "'に挿入されます。これは有効なSQLではありません。 'db.execSQL(" mClass(classData)values(?) "、data)'に挿入しますか?しかし、私の推測では 'compileStatement()'と 'bindBlob()'を使う必要があるということです。 – dhke

+0

関連:[画像をSqliteにBLOBとして保存する方法とそれを取得する方法](https://stackoverflow.com/questions/7331310/how-to-store-image-as-blob-in-sqlite-how- to-retrieve-it) – dhke

答えて

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質問を見て:

では、次の記述必要プリペアドステートメントを使用します。

+0

OPは明らかにデータベース内のオブジェクト配列の文字列表現を望ましくありません。 'bindBlob()'が必要です。 – dhke

+0

@dhkeええ、そうです。だから、私はオブジェクトのシリアル化に関する記事へのリンクを残しています。おそらく 'toString()'の部分を編集して明確にする必要がありますか? –

+0

ありがとうございます。あなたの答えが私を大いに助けます! –

関連する問題