Почему значение BLOB-объекта не хранится в базе данных sqlite в Android - PullRequest
1 голос
/ 16 января 2012

Я написал следующий код для вставки видео байтов в базу данных
DBAdapter.java

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: [B@44f35120
01-16 16:03:13.653: INFO/DBAdapter(18235): Execute inserted

Что касается DDMS, значения 1 (ID) и [B @ 44f35120 (видеоблок) успешно отображаются.Но они не вставляются в БД.

Когда я проверяю БД и запрашиваю следующее:

select * from video_downloads;

Результат:

 1 | 

Второе поле пустое!Значение BLOB-объекта не вставлено!Зачем?Что-то не так в моем коде

1 Ответ

1 голос
/ 16 января 2012

Я думаю, что вы неправильно читаете вывод выбора. Ваши данные есть, но «select» не показывает их, так как не знает, что делать с BLOB-объектами. Выводить его байты буквально не имеет смысла для большинства видов BLOB-объектов.

Попробуйте прочитать данные обратно из своего кода, и они будут там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...