如何将图像插入SQLite数据库? [英] How to insert an image into sqlite database?

查看:114
本文介绍了如何将图像插入SQLite数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾尝试以下code:

1,code位图转换为字节数组:

 专用字节[] bitmaptoByteArray(BMP位图)
      {
          ByteArrayOutputStream流=新ByteArrayOutputStream();
          bmp.com preSS(Bitmap.Com pressFormat.PNG,100,流);
          字节[]的字节数组= stream.toByteArray();
          返回的字节数组;
      }
 

2,code要插入值到数据库

 公共无效insertIntoImageTable(INT companyid,产品名称字符串,字符串productdesc,byte []的BMP)
      {
          ContentValues​​值=新ContentValues​​();
            values​​.put(dataBaseHelper.COMPANY_ID,companyid);
            values​​.put(dataBaseHelper.PRODUCT_NAME,产品名称);
            values​​.put(dataBaseHelper.PRODUCT_DESCRIPTION,productdesc);
            values​​.put(dataBaseHelper.PRODUCT_IMAGE,BMP);
            尝试
            {
                db.insert(dataBaseHelper.IMAGE_DATA,空,价值观);
            }
            赶上(例外五)
            {
                e.printStackTrace();
            }
      }
 

我得到空指针异常。

从调用该函数将数据到数据库:

  insertIntoImageTable(7,产品名称[0],productdesc [0],巴里);
 

的code

所有三位都在同一个类文件。

编辑:堆栈跟踪是如下

  03-24 16:04:26.245:WARN / System.err的(13255):显示java.lang.NullPointerException
03-24 16:04:26.265:WARN / System.err的(13255):在com.omkarsoft.ImagePortofolio.sqlQueries.insertIntoImageTable(sqlQueries.java:101)
03-24 16:04:26.275:WARN / System.err的(13255):在com.omkarsoft.ImagePortofolio.sqlQueries.upLoadtoDatabase(sqlQueries.java:118)
03-24 16:04:26.305:WARN / System.err的(13255):在com.omkarsoft.ImagePortofolio.ImageAdapter< INIT>(ImageAdapter.java:58)。
03-24 16:04:26.315:WARN / System.err的(13255):在com.omkarsoft.ImagePortofolio.imageGridView.onCreate(imageGridView.java:42)
03-24 16:04:26.335:WARN / System.err的(13255):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-24 16:04:26.335:WARN / System.err的(13255):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-24 16:04:26.355:WARN / System.err的(13255):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-24 16:04:26.385:WARN / System.err的(13255):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
03-24 16:04:26.385:WARN / System.err的(13255):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)
03-24 16:04:26.415:WARN / System.err的(13255):在android.os.Handler.dispatchMessage(Handler.java:99)
03-24 16:04:26.415:WARN / System.err的(13255):在android.os.Looper.loop(Looper.java:123)
03-24 16:04:26.435:WARN / System.err的(13255):在android.app.ActivityThread.main(ActivityThread.java:3683)
03-24 16:04:26.445:WARN / System.err的(13255):在java.lang.reflect.Method.invokeNative(本机方法)
03-24 16:04:26.455:WARN / System.err的(13255):在java.lang.reflect.Method.invoke(Method.java:507)
03-24 16:04:26.475:WARN / System.err的(13255):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
03-24 16:04:26.475:WARN / System.err的(13255):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-24 16:04:26.505:WARN / System.err的(13255):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

它看起来像你的数据库为空或产品名称[0] productdesc [0] barry`为空。

在一般节能在Android大文件时,你应该将文件保存到硬盘上(也许是SD卡,如果它是可用),然后将该文件URI存储在数据库中。 Android上的SQLite数据库是不是真的设计用于存储大量的内容 - 你吸气剂性能直接存储大文件

I have tried the following code :

1.Code to convert bitmap to byte array :

private byte[] bitmaptoByteArray( Bitmap bmp)
      {
          ByteArrayOutputStream stream = new ByteArrayOutputStream();
          bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
          byte[] byteArray = stream.toByteArray();
          return byteArray;
      }

2.Code which to insert the values into DB

  public void insertIntoImageTable( int companyid , String productname , String productdesc , byte[] bmp )
      {
          ContentValues values = new ContentValues();
            values.put(dataBaseHelper.COMPANY_ID, companyid);           
            values.put(dataBaseHelper.PRODUCT_NAME, productname);
            values.put(dataBaseHelper.PRODUCT_DESCRIPTION, productdesc);
            values.put(dataBaseHelper.PRODUCT_IMAGE, bmp);
            try
            {
                db.insert(dataBaseHelper.IMAGE_DATA, null, values);
            }
            catch( Exception e)
            {
                e.printStackTrace();
            }
      }

I get nullpointer exception.

Call from the function to put data into DB :

   insertIntoImageTable( 7 , productname[0] , productdesc[0] , barry);

All the three bits of code are in the same class file.

Edit: The stack trace is as below.

03-24 16:04:26.245: WARN/System.err(13255): java.lang.NullPointerException
03-24 16:04:26.265: WARN/System.err(13255):     at com.omkarsoft.ImagePortofolio.sqlQueries.insertIntoImageTable(sqlQueries.java:101)
03-24 16:04:26.275: WARN/System.err(13255):     at com.omkarsoft.ImagePortofolio.sqlQueries.upLoadtoDatabase(sqlQueries.java:118)
03-24 16:04:26.305: WARN/System.err(13255):     at com.omkarsoft.ImagePortofolio.ImageAdapter.<init>(ImageAdapter.java:58)
03-24 16:04:26.315: WARN/System.err(13255):     at com.omkarsoft.ImagePortofolio.imageGridView.onCreate(imageGridView.java:42)
03-24 16:04:26.335: WARN/System.err(13255):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-24 16:04:26.335: WARN/System.err(13255):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-24 16:04:26.355: WARN/System.err(13255):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-24 16:04:26.385: WARN/System.err(13255):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-24 16:04:26.385: WARN/System.err(13255):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-24 16:04:26.415: WARN/System.err(13255):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-24 16:04:26.415: WARN/System.err(13255):     at android.os.Looper.loop(Looper.java:123)
03-24 16:04:26.435: WARN/System.err(13255):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-24 16:04:26.445: WARN/System.err(13255):     at java.lang.reflect.Method.invokeNative(Native Method)
03-24 16:04:26.455: WARN/System.err(13255):     at java.lang.reflect.Method.invoke(Method.java:507)
03-24 16:04:26.475: WARN/System.err(13255):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-24 16:04:26.475: WARN/System.err(13255):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-24 16:04:26.505: WARN/System.err(13255):     at dalvik.system.NativeStart.main(Native Method)

解决方案

It looks like your database is null or productname[0],productdesc[0]orbarry` is null.

In general when saving large files on Android, you should save the file to disk (maybe the SD card if it's available) and then store the file URI in the database. The SQLite database on Android is not really designed for storing large content - you'll getter performance storing large files directly.

这篇关于如何将图像插入SQLite数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆