그림을 데이터베이스에 BLOB으로 저장하려고 시도했지만 데이터베이스에 제대로 저장되지 않았습니다.그림이 데이터베이스에 올바르게 저장되지 않았습니다 (BLOB).
전달되는 바이트 []는 정확하고 4300 자이며 데이터베이스에는 12 자만 있습니다. DB에 저장되어있는 무엇 :
public boolean SQL_INSERT_PICTURE(PictureDatatype type) {
try{
this.db = openHelper.getWritableDatabase();
Log.d(TAG, "Insert picture");
System.out.println("insert picture");
db.execSQL("DELETE FROM picture " +
"where " + LinkPic + " = '" + type.getLink() + "'");
db.execSQL("INSERT OR REPLACE INTO picture " +
"(" + NamePic + ", " + LinkPic + ", " + PicturePic + ") " +
"VALUES ('" + type.getName() + "', '" + type.getLink() +"', '" +
type.getPicture() +"')");
System.out.println("size of the picture (bytearray): " + type.getPicture().length);
System.out.println("the picture: " + type.getPicture());
System.out.println("insert complete");
db.close();
return true;
}
catch(SQLException s){
System.out.println("Insert failed");
db.close();
return false;
}
}
내 질문은 왜 안 올바른 바이트 [] 어떻게 DB 나에 저장되어 있습니다 : 여기 43e7be68
@ [B 내 SQL_INSERT의 코드 내가 할 수 있을까? 자세한 정보가 필요하거나 pls 코드가 필요하면 알려주십시오. 당신이 문자열로 바이트 [] 배열을 전달하려는 것 같습니다
들으 kirbby
그냥 측면 덧글. 당신은 데이터베이스에 이미지를 저장하지 말아야한다. 왜냐하면 바이너리를 미디어 유형으로 변환하는 것과 같은 작업을 CPU가 더 집중적으로 수행해야하기 때문이다. 그림을 데이터베이스에 저장하는 것이 왜 안되는가? – ForeverNights
사이드 노트 : 그림을 삭제할 필요가 없다. 어쨌든 INSERT OR REPLACE를 수행하는 경우 먼저 ... – Martijn
또한 문자열 연결을 사용하여 SQL 문을 어셈블하는 것은 SQL injection exploits에 대한 확실한 경로입니다. 바운드 인수를 사용하는 execSQL() 버전을 살펴보십시오. db.execSQL ("LinkPic =?", new Object [] {type.getLink()});'에서 DELETE FROM picture를 할 수 있습니다. 더 빠르고 읽기 쉽고 SQL 주입 문제로부터 완전히 격리됩니다. –