`

java操纵sqlite数据库读写blob字段

阅读更多

BLOBBinary Large Object):可存储大型二进制对象,如图形、视频、声音等文件。

JAVASQLite BLOB的操纵:

存:直接把文件读取到Byte数组中,再把Byte数组直接插入到数据库。

取:把记录读取到Byte数组中,再把Byte数组直接写入文件。

没有用“流”的方式(SQLite JDBC没有实现相应接口)。

 

存入处理步骤:

    创建相应表:

        create table blob (id integer primary key, context blob);

JDBC处理:

1.     创建文件:

a)       File file = new File(fileName);

2.     文件输入流:

a)       FileInputStream new FileInputStream(file)

3.     文件读进数组:

a)       获取文件长度:

int len = (intfile.length();

b)       创建对应长度Byte数组:

byte[] bytes = new byte[len];

c)       读取文件内容存于Byte数组:

fis.read(bytes);

4.     插入数据库:

PreparedStatement prep ;

.. .. .. ..

prep.setBytes(1, bytes);

prep.executeUpdate();

5.     关闭相应资源。

 

读取与存入相仿。

潜在问题:

有可能文件的长度超出int 所能表示的范围,则会出错——插入不了,因为是把整个文件读到Byte数组中的。

Integer 定义的最大范围为:

public static final int   MAX_VALUE = 0x7fffffff;

即:2147483647

 

过程总结:

以前都没有把图片等直接存入数据库中,查了一些JAVA向数据库中存取BLOB数据类型的资料。

MySQLOracle都有相应的方法,惟独存取到SQLite里没有。

值得一提的是,C++一个函数就搞定了, SQLiteC/C++提供了很多直接操作SQLite数据的接口。

按理说JAVA应该也很简单——结果证明确实很简单,只是没想到……或者说想法僵在“流”里了。

 

首先查看API,可以直接设定Blob对象。

    不过,new不出来——接口java.sql.Blob没有实现类……

 

再看JAVAMySQL存取数据都是用“流”的方式, 然后用“流”试着向SQLite里插入数据,可SQLite JDBC没有实现相应方法。

 

    一心想着,网上一定会有现成的例子,可自己的百度谷歌用得不大顺手……没能找到。

   

    昨天在网上找了近一下午, 今天早上自己试着弄一下——另再去想相应的实现类了:

先把文件读到Byte数组中,再直接把Byte数组存于数据库——不用“流”的方式。

 

 

 

    从数据库到文件同理。

分享到:
评论

相关推荐

    java sqlite blob 读写

    java sqlite bolb 将图片存入sqlite blob 字段中,然后读取sqlite

    VS、VC++实现对象序列化保存到sqlite表blob类型字段中,包含blob字段的读取和保存,

    总之,VS和VC++环境下实现对象序列化到SQLite的blob字段,需要结合对象序列化技术(如Boost.Serialization)和SQLite的C API进行操作。通过编写适当的序列化和反序列化函数,以及正确地使用数据库接口,可以有效地...

    sqlite3_blob_test.zip

    通过这个库,可以创建数据库对象,执行SQL语句,以及更方便地读写BLOB数据。例如,可以创建一个Statement对象,设置参数,然后执行插入BLOB的SQL语句。 项目中的文件`sqlite3_test.sln`是Visual Studio的解决方案...

    Sqlite大对象字段读写及数据流的解压缩

    以下是如何读写BLOB字段的示例: ```csharp using System.Data.SQLite; // 连接SQLite数据库 SQLiteConnection conn = new SQLiteConnection("Data Source=mydatabase.db;Version=3;"); conn.Open(); // 创建命令...

    SQLite3使用blob存储文件的VC程序

    在提供的"FileArc.exe"程序中,可能包含了上述步骤的实现,它可能实现了读取本地文件,将其内容存储到SQLite3数据库的Blob字段中,然后能从数据库中取出并解压回原始文件。为了更深入理解这个程序的工作原理,你可以...

    sqlite3数据库操作类

    此类集成了许多数据库常用操作和一些不常用操作的方法和实例(包括blob数据类型的操作,此blob类型的读写不限于单个读写,可自由灵活的操作多个blob字段);本程序为本人对sqlite3的包装,目的在于更方便的调用数据库...

    sqlite 数据库工具

    1. 数据库创建与连接:通过工具可以新建 SQLite 数据库文件(通常扩展名为 `.db`),并连接到已存在的数据库,进行读写操作。 2. 表管理:你可以创建新的表,定义字段类型(如 INTEGER、TEXT、REAL、BLOB),设置...

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

    2. **创建数据库表**:设计一个包含字段来存储照片信息的表,比如照片ID、照片名称、拍摄日期以及二进制数据的“blob”字段。例如: ```sql CREATE TABLE IF NOT EXISTS Photos ( ID INTEGER PRIMARY KEY ...

    Android基础编程-sqlite数据库介绍.pptx

    在Android基础编程中,SQLite数据库扮演着至关重要的角色。SQLite是一个开源、轻量级的嵌入式关系型数据库,特别适合于移动设备上的应用程序。它无需服务器进程,且占用资源极小,仅几百KB,却能提供完整的SQL语法...

    SQLite操作配置数据库连接命令

    SQLite是一种轻量级的、嵌入式的、零配置的数据库管理系统,它被广泛应用于各种小型应用和嵌入式系统中。...通过PHP的SQLite扩展,开发者可以轻松地实现对SQLite数据库的读写操作,实现数据的存储和检索。

    WPF 加密记事本存储图片-sqlite数据库

    为存储图片,我们需要在数据库中创建一个BLOB(二进制大对象)字段,用于存放图片的字节流。 3. **图片处理**:在WPF中,可以使用BitmapImage类来处理图片。读取图片时,将其转换为字节数组,然后存储到数据库;...

    Sqlite数据库

    1. **关系型数据库**: SQLite遵循SQL标准,支持常见的数据类型如INT、TEXT、REAL和BLOB,以及复杂的查询操作,如JOIN、子查询和事务。 2. **嵌入式**: SQLite完全内置于应用程序中,无需额外的服务进程或客户端/...

    SQLiteExpertPersonal

    SQLiteExpertPersonal是一款强大的SQLite数据库管理工具,主要用于个人用户和小型团队。SQLite是一个开源的关系型数据库系统,它不依赖于服务器,可以直接嵌入到各种应用程序中,因此在移动设备和轻量级应用中非常...

    图片存进数据库以及读出

    首先,你需要创建一个SQLite数据库并定义一个包含Blob字段的表。使用`FMDB`库可以方便地操作SQLite,这是一款Objective-C封装的SQLite库。例如: ```objc FMDatabase *db = [FMDatabase databaseWithPath:@"path/...

    SQLiteStudio.rar

    8. **安全性**:SQLiteStudio允许设置数据库的访问权限,控制不同用户对数据库的读写权限。 9. **导出和导入数据**:用户可以将数据导出为CSV、XML、JSON等多种格式,或者从这些格式导入数据到SQLite数据库。 10. ...

    android中使用Sqlit数据库

    在Android开发中,SQLite数据库是默认的轻量级数据库,用于存储应用的本地数据。SQLite是一种关系型数据库,它提供了一种结构化的方式来组织和管理数据。以下是对Android中使用SQLite数据库的一些关键知识点的详细...

    SQLite(2.0和3.0)管理工具sqliteadmin

    SQLite是一款轻量级的、开源的、自包含的数据库引擎,它无需单独的服务器进程,而是作为应用程序的一部分直接运行在用户空间。SQLite支持多种操作系统,包括Windows、Linux、Mac OS等,广泛应用于移动设备、嵌入式...

    Sqlite存储图片

    2. **Blob字段创建**:在创建表的时候,我们需要定义一个Blob类型的字段来存储图片数据。例如: ```sql CREATE TABLE Images ( id INTEGER PRIMARY KEY AUTOINCREMENT, imageName TEXT, imageData BLOB ); ``...

    Unity SQLite DB

    Unity SQLite DB 是一款专为Unity游戏引擎设计的SQLite数据库插件,它允许开发者在Unity项目中集成和操作轻量级的关系型数据库系统。SQLite是一种开源、无服务器、自包含、可移植的SQL数据库,适用于移动设备和桌面...

Global site tag (gtag.js) - Google Analytics