にSQLiteのデータベースに格納されていないなぜビデオを挿入するための次のコードを書かれているデータベース
にバイトDBAdapter.javaBLOB値をアンドロイド
public void insertVideoBytesInVideoDownloadsTable(int id, byte[] videoBytes){
ContentDBHelper dbHelper = new ContentDBHelper(context);
sqliteDB = dbHelper.getWritableDatabase();
String sqlInsertVideoBytes = "Insert into " + tbl_video_downloads + " values (?, ?)";
Log.i(TAG, sqlInsertVideoBytes);
SQLiteStatement insertStatement = sqliteDB.compileStatement(sqlInsertVideoBytes);
insertStatement.clearBindings();
insertStatement.bindLong(1, id);
Log.i(TAG, "Inserted: "+id);
insertStatement.bindBlob(2, videoBytes);
Log.i(TAG, "Inserted: "+videoBytes);
insertStatement.executeInsert();
Log.i(TAG, "Execute inserted");
}
StoreVideoInDB.java
public String downloadAndStoreVideoInDB(String urlPath){
try {
Log.i(TAG , "URL " +urlPath);
URL url = new URL(urlPath);
URLConnection connection = url.openConnection();
connection.connect();
InputStream videoStream = connection.getInputStream();
BufferedInputStream videoBufferedStream = new BufferedInputStream(videoStream,128);
ByteArrayBuffer videoByteArray = new ByteArrayBuffer(500);
//Get the bytes one by one
int current = 0;
while((current = videoBufferedStream.read())!= -1){
videoByteArray.append((byte)current);
//Log.i(TAG, String.valueOf(current));
}
dbAdapter.insertVideoBytesInVideoDownloadsTable(id, videoByteArray.toByteArray());
}catch (IOException ex) {
Log.e(TAG, "error: " + ex.getMessage(), ex);
ex.printStackTrace();
}
return path;
}
DDMSログ:
01-16 16:03:13.563: INFO/DronaDBAdapter(18235): Insert into video_downloads values (?, ?)
01-16 16:03:13.563: INFO/DBAdapter(18235): Inserted: 1
01-16 16:03:13.573: INFO/DBAdapter(18235): Inserted: [[email protected]
01-16 16:03:13.653: INFO/DBAdapter(18235): Execute inserted
DDMSごとに、値1(ID)と[B44f35120(ビデオBLOB)]の値が正常に表示されています。しかし、DBには挿入されません。
次のように私はDBと、クエリを確認してください。
select * from video_downloads;
結果:
1 |
2番目のフィールドが空白になっているの! BLOB値は挿入されません!どうして?私のコードに何か間違っていますか?
おそらくvideoBytesをbase64に変換し、データベース – waqaslam
に保存してください。私はそれを試してみます。 –