2016-08-06 2 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 쿼리는 유효한 SQL이 아닌 mClass (classData) 값 (?) [Ljava.lang.Object; @ 277c81d9 "'에 삽입됩니다. '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

문제는 준비된 명령문을 잘못된 방법으로 사용한다는 것입니다.

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

를 SQL 문하지 않은 : 당신은 그냥 문자열의 마지막에 객체를 추가하고이 같은 끝낼 때문에

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

여기서 부적절한 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

감사합니다. 당신의 대답은 제게 많은 도움이됩니다! –

관련 문제