2015-03-20 4 views
0

В моем коде пользователь должен добавить информацию о продукте, включая имя, изображение, категорию и другие детали. Но после ввода данных и их сохранения он не может просматривать данные, которые они вводят, вместо этого он не может преобразовать BLOB в String.Невозможно преобразовать BLOB в String

Мое кодирование для добавления данных.

items Item= new items(); 
       db.getWritableDatabase(); 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       byte imageInByte[] = stream.toByteArray(); 
       Bitmap bMap= BitmapFactory.decodeByteArray(imageInByte, 0, imageInByte.length); 
       ivThumbnailPhoto.setImageBitmap(bMap); 
       Item.setName(name.getText().toString()); 
       Item.setCategory(SpCate.getSelectedItem().toString()); 
       Item.setDetails(details.getText().toString()); 
       Item.setImage(imageInByte); 
       db.addItemSpinner(new items()); 
        // Save the Data in Database 
        MyDb entry= new MyDb(SellingItem.this); 
        entry.getWritableDatabase(); 
        entry.addItemSpinner(Item); 
        entry.close(); 
        Toast.makeText(getApplicationContext(), "Account Successfully Created ", Toast.LENGTH_LONG).show(); 
        Log.d("name", Item.getName()); 
        Log.d("category", Item.getCategory()); 
        Log.d("detailsL", Item.getDetails()); 
        Intent i=new Intent(SellingItem.this,SearchItem.class); 
        startActivity(i); 

Моя база данных для ввода данных.

public void addItemSpinner(items i) 
    { 
      SQLiteDatabase db = this.getWritableDatabase(); 

      ContentValues values = new ContentValues(); 
      values.put(COLUMN_NAME, i.name); // Contact Name 
      values.put(COLUMN_IMAGE, i.image); // Contact Phone 
      values.put(COLUMN_CATE, i.category); // Contact Name 
      values.put(COLUMN_DETAILS, i.details); // Contact Phone 

      // Inserting Row 
      db.insert(TABLE_NAME, null, values); 
      db.close(); // Closing database connection 
     } 

logcat показывает это следующим образом.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.projectonline/com.example.projectonline.SearchItem}: android.database.sqlite.SQLiteException: unknown error (code 0): Unable to convert BLOB to string 

Это мой код товара.

package com.example.projectonline; 

import android.graphics.Bitmap; 

public class items { 

    int id; 
    String name, category, details; 
    byte[] image; 

    public items(){ 

    } 
    public items(int id, String name, String category, byte[]image, String details) 
    { 
     this.id=id; 
     this.name= name; 
     this.category=category; 
     this.image= image; 
     this.details=details; 
    } 
    public items(String name, String category, byte[]image, String details){ 
     this.name = name; 
     this.category = category; 
     this.image = image; 
     this.details = details; 
    } 
    public String getDetails() { 
     return details; 
    } 
    public void setDetails(String details) { 
     this.details = details; 
    } 
    public byte[] getImage() { 
     return image; 
    } 
    public void setImage(byte[] image) { 
     this.image = image; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getCategory() { 
     return category; 
    } 
    public void setCategory(String category) { 
     this.category = category; 
    } 
    public Bitmap getBitmap() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

И это мой DB выглядит

public static final String TAG = "MyDb"; 
public static final String TABLE_NAME="PRODUCT"; 
public static final String COLUMN_ID="id"; 
public static final String COLUMN_NAME="name"; 
public static final String COLUMN_CATE="category"; 
public static final String COLUMN_IMAGE="image"; 
public static final String COLUMN_DETAILS="details"; 


private static final String DATABASE_NAME="Spinner"; 
private static final int DATABASE_VERSION= 1; 


private static final String SQL_CREATE_ITEM = "CREATE TABLE " + TABLE_NAME + "(" 
     + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + COLUMN_NAME + " TEXT NOT NULL, " 
     + COLUMN_CATE + " TEXT NOT NULL, " 
     + COLUMN_IMAGE + " BLOB, " 
     + COLUMN_DETAILS + " TEXT NOT NULL " 
     +")"; 
+0

где ваш код __Item__? опубликуйте его –

+0

Посмотрите здесь: http://stackoverflow.com/questions/15937983/sqliteexception-unable-to-convert-blob-to-string-when-contact-have-photo-androi – Bubu

+0

Каков ваш код для таблицы , означает, какую структуру данных вы определили для изображения? –

ответ

3

Используйте следующий код

java.sql.Blob ablob = rs.getBlob(1); 
String str = new String(ablob.getBytes(1l, (int) ablob.length())); 

или

Попробуйте это (а2 BLOB COL)

PreparedStatement ps1 = conn.prepareStatement("update t1 set a2=? where id=1"); 
Blob blob = conn.createBlob(); 
blob.setBytes(1, str.getBytes()); 
ps1.setBlob(1, blob); 
ps1.executeUpdate(); 

Он может работать даже без BLOB, драйвер будет автоматически преобразовывать типы:

ps1.setBytes(1, str.getBytes); 
ps1.setString(1, str); 

Кроме того, если вы работаете с текстом CLOB кажется более естественным типом цв.

+0

, если вы используете соединение jdbc (Connector/J) и задаете параметр 'useServerPrepStmts = true', getString ("blob") может не сработать для вас. https://bugs.mysql.com/bug.php?id=84086 –

Смежные вопросы