如何将图像插入SQLite数据库?如何将、图像、数据库、SQLite

2023-09-06 05:47:19 作者:好看的七个字游戏昵称

我曾尝试以下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],巴里);
 
将备份的SQLServer数据库转换为SQLite数据库操作方法

的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.