`

【转】Android SQLite 数据库 存取 BLOB 二进制 文件

阅读更多

原文地址,转载请说明:http://blog.sina.com.cn/s/blog_539070ad0100nesa.html

   Android开发时用到二进制数据(也可以理解为BYTE数组)的SQLite存取,可能会有人对存取如mp3、图片类文件困惑,其实p3、图片类文件读到内存就可理解为BYTE数组,只要在下面的基础上增加将文件读到BYTE数组就可以了,其他操作是相同的(在网上搜了一段代码放下面了)。

  写此文的目的是方便自己今后查询,当然碰巧方便了其他人就当我奉献了:)


package com.Jung.DH;

 

import java.io.ByteArrayOutputStream;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.util.Log;

 

// 数据操作类

public class testSeedDB {

    private Context mContext = null; 

    private testDBHelper mDBHelper = null; 

    private SQLiteDatabase mTestDatabase = null; 

 

    private static final String DATABASE_NAME = "DHSeedData.db";  

    private static final int DATABASE_VERSION = 1;  

    private static final String TABLE_SEED = "TBseed";  

    private static final String TABLE_INFO = "TBinfo";  

 

    // 构造函数,一个引用类的Context作为参数

    public testSeedDB(Context context){ 

        mContext = context; 

    }

    // 打开数据库  

    public void open(){

        mDBHelper = new testDBHelper(mContext,DATABASE_NAME, null, DATABASE_VERSION); 

        mTestDatabase = mDBHelper.getWritableDatabase(); 

        Log.i("testSeedDB", "open");

    } 

    // Close the database

    public void close(){ 

         mDBHelper.close(); 

    }  

   

    public void CreateSeedTable() {  

    // 创建数据表是先删除以前的,以免出错

       String sql = "drop table "+ TABLE_SEED;

    try {

        mTestDatabase.execSQL(sql);

    } catch (SQLException e) {

    }   

    // second create table

        sql = "CREATE TABLE IF NOT EXISTS " + TABLE_SEED  

                + " (ID INTEGER PRIMARY KEY, ToyID INTEGER,ToySeed BLOB,ToyMemo TEXT);";  

        try {  

        mTestDatabase.execSQL(sql);  

        } catch (SQLException ex) {  

        }  

    Log.i("testSeedDB", "CreateSeedTable");

    }      

    public void CreateInfoTable() {  

    // first delete old table

    String sql = "drop table"+ TABLE_INFO;

    try {

        mTestDatabase.execSQL(sql);

    } catch (SQLException e) {

    }   

    // second create table

    sql = "CREATE TABLE IF NOT EXISTS " + TABLE_INFO  

                + " (ToyID INTEGER PRIMARY KEY,ToySeed BLOB,ToyMemo TEXT not null);";  

        try {  

        mTestDatabase.execSQL(sql);  

        } catch (SQLException ex) {  

        }  

    }      

   

    public void CleanSeedTable() {  

        try {  

        mTestDatabase.delete(TABLE_SEED, null, null);  

        } catch (SQLException e) {  

        } 

    Log.i("testSeedDB", "ClearSeedTable");        

    }      

   

    public void insertSeedItem(long ToyID, byte[]ToySeed) {  

    String sqlstr = "insert into " + TABLE_SEED + " (ToyID, ToySeed,ToyMemo) values (?,?,?);";

    Object[] args = new Object[]{ToyID,ToySeed,null};

        try{

        mTestDatabase.execSQL(sqlstr,args);  

        } catch (SQLException ex) {  

        }  

    Log.i("testSeedDB", "insertSeedItem");        

       

    }     

 

    public byte[] GetSeedItem(long ToyID) {  

    Cursor cur;

        byte[] strSeed = null;

   

        String col[] = {"ToyID", "ToySeed" ,"ToyMemo"};

        String strToy = "ToyID=" +  new Integer((int) ToyID).toString();

        try{

        cur = mTestDatabase.query(TABLE_SEED, col, strToy, null, null, null, null);

            cur.moveToFirst();

            strSeed = cur.getBlob(1);

        } catch (SQLException ex) {  

        }  

        if (cur !=null) cur.close;

        Log.i("testSeedDB", strToy);        

        return strSeed;

    }     

 

   // 数据操作的基础类,作为数据操作的内嵌子类

    public class testDBHelper extends SQLiteOpenHelper {

    public testDBHelper(Context context, String name, CursorFactory factory,

           int version) {

        super(context, name, factory, version);

        // TODO Auto-generated constructor stub

    }

 

    @Override

    public voidonCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub

    }

      @Override

    public voidonUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // TODO Auto-generated method stub

    }

    }  // end of testDBHelper

}


// 读文件到 BYTE 来自网上未验证

//http://www.a3gs.com/BookViews.asp?InfoID=2865&ClassID=935

 

导入包

 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

 

<span styl

分享到:
评论

相关推荐

    利用VB存取数据库中BLOB数据

    BLOB类型通常用于存储非结构化的数据,如图片、音频、视频或者任何二进制文件。以下将详细讲解如何利用VB来存取数据库中的BLOB数据。 首先,我们需要了解BLOB数据的基本概念。BLOB是数据库管理系统中用来存储大量二...

    JAVA中SQLlite数据库BLOB数据类型的存取.docx

    JAVA 中 SQLlite 数据库 BLOB 数据类型的存取是指在 JAVA 语言中使用 SQLlite 数据库来存储和读取大型二进制对象(BLOB),以便实现文件存储和读取的功能。本文将详细介绍如何使用 JAVA 语言来实现 SQLlite 数据库...

    C#使用SQLite存取图片的示例

    从数据库读取图片数据并显示在PictureBox中,我们可以使用`SELECT`语句获取二进制数据,然后将其保存为临时文件,最后加载到PictureBox控件: ```csharp // 获取图片ID(假设我们已知) int imageId = 1; // 创建...

    Q773503.zip SQLite数据库的存取照片

    总结,SQLite数据库在存取照片时,关键在于将照片转换为二进制数据,然后利用SQLite的blob类型存储,最后在需要时从数据库中取出并还原。这个过程涉及到文件操作、数据库操作以及可能的数据压缩和解压缩。对于开发者...

    java中sqllite数据库blob数据类型的存取.docx

    在Java中操作SQLite数据库时,BLOB(Binary Large Object)类型的数据处理是较为常见的需求之一,尤其是在需要存储图片、文档等二进制文件的情况下。本文档旨在解决如何在Java环境下通过SQLite有效地存储和提取BLOB...

    sqlite另类存取(对象存取)

    总的来说,通过将Java对象序列化为二进制数据并存储在SQLite的`BLOB`列中,我们可以实现对象级别的数据存取,这在处理复杂数据结构时能提供便利。然而,这种“另类存取”方式也有其局限性,需要权衡其性能和可维护性...

    C# 图片数据库存取示例

    总结,C#图片数据库存取涉及数据库选择、数据交互方式、图片的二进制存储、元数据管理、查询和检索以及性能优化和安全措施等多个方面。理解并掌握这些知识点,能够帮助开发者构建出高效、安全的图片管理系统。

    图片存取+数据库存取图片.rar

    图片不能直接存入SQLite数据库,因为它们是二进制数据,不适合文本型字段。通常,我们将其转换为`byte[]`或Base64编码字符串存入`BLOB`类型字段。使用`Bitmap`的`compress`方法可将图片转为字节数组,然后存储。 5...

    Android使用SQLiteDatabase直接存取数据与图像

    对于图像的存储,这里我们使用了Blob类型来存储二进制数据。注意,存储和读取大体积的图像可能会影响性能,因此在实际应用中,通常会考虑将图像存储到外部存储(如SD卡)并只在需要时加载。 在测试环境中,确保设备...

    android 图片在sqlite里的存取操作

    SQLite不直接支持二进制大对象(BLOB)类型的图片存储,但可以通过转换将图片数据存储为字节串,然后进行读取和显示。下面将详细解释如何在SQLite中进行图片的存取操作,并将其显示在ListView中。 1. **图片转换为...

    Android利用LitePal操作数据库存取图片

    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...

    SQL数据库直接存取图像

    首先,SQL数据库如MySQL、PostgreSQL、SQLite或MS SQL Server等,提供了对BLOB(Binary Large Object)类型字段的支持,这种字段类型可以用来存储像图像这样的二进制大对象。在Delphi中,我们可以使用ADO (ActiveX ...

    sqlite数据类型详细介绍+javaJDBC连接sqlite小例子

    5. BLOB:二进制大对象,用于存储任意二进制数据,如图片、文档等。 6. NUMERIC:这是一个动态类型,SQLite会根据值的类型自动选择INTEGER或REAL存储。 7. ANY:在某些特殊情况下,SQLite允许使用ANY作为数据类型,...

    计算机软件-商业源码-实例121-在数据库中存取声音.zip

    3. BLOB(Binary Large Object)类型:在数据库中存储声音文件,一般会使用BLOB数据类型,它能存储大块二进制数据。BLOB可以分为不同类型,如BINARY、VARBINARY、LONGBLOB等,选择哪种类型取决于声音文件的大小。 4...

    操作数据库V2.0 (可存取图片)

    《操作数据库V2.0 (可存取图片)》是一个针对SQLite3数据库的实用工具,主要功能在于实现数据库的增删改查操作,并且特别强调了对图片数据的存储和读取。SQLite3是一个轻量级的关系型数据库,广泛应用于移动设备和...

    C#实现数据库的图片存取

    以SQL Server为例,我们可以创建一个包含二进制大型对象(BLOB)类型的字段,如`imageData`,用于存储图片的字节流。 ```csharp CREATE TABLE Images ( Id INT PRIMARY KEY, ImageName NVARCHAR(255), imageData...

    存取数据库图片

    2. **图片存储**:当图片上传时,程序会读取图片文件的二进制数据,然后将其存储到数据库的BLOB字段中。这通常通过编程语言的数据库API完成,例如PHP的PDO,Java的JDBC,Python的sqlite3库等。 3. **数据库操作**:...

    DELPHI存取JPEG、BMP图像到数据库完整解决方案

    BLOB 类型用于存储大块二进制数据,如图像文件。 接着,你可以编写一个函数来读取图像文件并将其转换为二进制数据,如下所示: ```delphi function LoadImageToBlob(const FileName: string): TBytes; var ...

    安卓下sqlite3保存、读取图片

    在Android开发中,SQLite3是一种常用的轻量级数据库,用于存储结构化数据,包括文本、数字以及二进制数据如图片。本篇文章将详细介绍如何在Android环境下利用sqlite3来保存和读取图片。 首先,我们需要了解SQLite3...

Global site tag (gtag.js) - Google Analytics