`
zhujianjia
  • 浏览: 484150 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

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

   Android开发时用到二进制数据(也可以理解为BYTE数组)的SQLite存取,可能会有人对存取如mp3、图片类文件困惑,其实mp3、图片类文件读到内存就可理解为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;

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

    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数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...

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

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

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

    存取数据库图片

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

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

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

    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