BLOB(Binary Large Object):可存储大型二进制对象,如图形、视频、声音等文件。
JAVA对SQLite BLOB的操纵:
存:直接把文件读取到Byte数组中,再把Byte数组直接插入到数据库。
取:把记录读取到Byte数组中,再把Byte数组直接写入文件。
没有用“流”的方式(SQLite JDBC没有实现相应接口)。
存入处理步骤:
创建相应表:
create table blob (id integer primary key, context blob);
JDBC处理:
a) File file = new File(fileName);
a) FileInputStream new FileInputStream(file);
int len = (int) file.length();
byte[] bytes = new byte[len];
PreparedStatement prep ;
.. .. .. ..
prep.setBytes(1, bytes);
prep.executeUpdate();
潜在问题:
有可能文件的长度超出int 所能表示的范围,则会出错——插入不了,因为是把整个文件读到Byte数组中的。
Integer 定义的最大范围为:
public static final int MAX_VALUE = 0x7fffffff;
即:2147483647
过程总结:
以前都没有把图片等直接存入数据库中,查了一些JAVA向数据库中存取BLOB数据类型的资料。
MySQL、Oracle都有相应的方法,惟独存取到SQLite里没有。
值得一提的是,C++一个函数就搞定了, SQLite为C/C++提供了很多直接操作SQLite数据的接口。
按理说JAVA应该也很简单——结果证明确实很简单,只是没想到……或者说想法僵在“流”里了。
首先查看API,可以直接设定Blob对象。
不过,new不出来——接口java.sql.Blob没有实现类……
再看JAVA向MySQL存取数据都是用“流”的方式, 然后用“流”试着向SQLite里插入数据,可SQLite JDBC没有实现相应方法。
一心想着,网上一定会有现成的例子,可自己的百度谷歌用得不大顺手……没能找到。
昨天在网上找了近一下午, 今天早上自己试着弄一下——另再去想相应的实现类了:
先把文件读到Byte数组中,再直接把Byte数组存于数据库——不用“流”的方式。
从数据库到文件同理。
|
分享到:
相关推荐
java sqlite bolb 将图片存入sqlite blob 字段中,然后读取sqlite
在Delphi中,与数据库交互通常会用到ADO(ActiveX Data Objects)或DBX(Database Express)等组件库,它们支持BLOB字段的读写操作。 在实现这个功能时,TStream类起着核心作用。TStream是一个抽象类,它定义了读写...
总之,VS和VC++环境下实现对象序列化到SQLite的blob字段,需要结合对象序列化技术(如Boost.Serialization)和SQLite的C API进行操作。通过编写适当的序列化和反序列化函数,以及正确地使用数据库接口,可以有效地...
通过这个库,可以创建数据库对象,执行SQL语句,以及更方便地读写BLOB数据。例如,可以创建一个Statement对象,设置参数,然后执行插入BLOB的SQL语句。 项目中的文件`sqlite3_test.sln`是Visual Studio的解决方案...
以下是如何读写BLOB字段的示例: ```csharp using System.Data.SQLite; // 连接SQLite数据库 SQLiteConnection conn = new SQLiteConnection("Data Source=mydatabase.db;Version=3;"); conn.Open(); // 创建命令...
在提供的"FileArc.exe"程序中,可能包含了上述步骤的实现,它可能实现了读取本地文件,将其内容存储到SQLite3数据库的Blob字段中,然后能从数据库中取出并解压回原始文件。为了更深入理解这个程序的工作原理,你可以...
此类集成了许多数据库常用操作和一些不常用操作的方法和实例(包括blob数据类型的操作,此blob类型的读写不限于单个读写,可自由灵活的操作多个blob字段);本程序为本人对sqlite3的包装,目的在于更方便的调用数据库...
1. 数据库创建与连接:通过工具可以新建 SQLite 数据库文件(通常扩展名为 `.db`),并连接到已存在的数据库,进行读写操作。 2. 表管理:你可以创建新的表,定义字段类型(如 INTEGER、TEXT、REAL、BLOB),设置...
2. **创建数据库表**:设计一个包含字段来存储照片信息的表,比如照片ID、照片名称、拍摄日期以及二进制数据的“blob”字段。例如: ```sql CREATE TABLE IF NOT EXISTS Photos ( ID INTEGER PRIMARY KEY ...
在Android基础编程中,SQLite数据库扮演着至关重要的角色。SQLite是一个开源、轻量级的嵌入式关系型数据库,特别适合于移动设备上的应用程序。它无需服务器进程,且占用资源极小,仅几百KB,却能提供完整的SQL语法...
SQLite是一种轻量级的、嵌入式的、零配置的数据库管理系统,它被广泛应用于各种小型应用和嵌入式系统中。...通过PHP的SQLite扩展,开发者可以轻松地实现对SQLite数据库的读写操作,实现数据的存储和检索。
为存储图片,我们需要在数据库中创建一个BLOB(二进制大对象)字段,用于存放图片的字节流。 3. **图片处理**:在WPF中,可以使用BitmapImage类来处理图片。读取图片时,将其转换为字节数组,然后存储到数据库;...
1. **关系型数据库**: SQLite遵循SQL标准,支持常见的数据类型如INT、TEXT、REAL和BLOB,以及复杂的查询操作,如JOIN、子查询和事务。 2. **嵌入式**: SQLite完全内置于应用程序中,无需额外的服务进程或客户端/...
SQLiteExpertPersonal是一款强大的SQLite数据库管理工具,主要用于个人用户和小型团队。SQLite是一个开源的关系型数据库系统,它不依赖于服务器,可以直接嵌入到各种应用程序中,因此在移动设备和轻量级应用中非常...
首先,你需要创建一个SQLite数据库并定义一个包含Blob字段的表。使用`FMDB`库可以方便地操作SQLite,这是一款Objective-C封装的SQLite库。例如: ```objc FMDatabase *db = [FMDatabase databaseWithPath:@"path/...
8. **安全性**:SQLiteStudio允许设置数据库的访问权限,控制不同用户对数据库的读写权限。 9. **导出和导入数据**:用户可以将数据导出为CSV、XML、JSON等多种格式,或者从这些格式导入数据到SQLite数据库。 10. ...
在Android开发中,SQLite数据库是默认的轻量级数据库,用于存储应用的本地数据。SQLite是一种关系型数据库,它提供了一种结构化的方式来组织和管理数据。以下是对Android中使用SQLite数据库的一些关键知识点的详细...
SQLite是一款轻量级的、开源的、自包含的数据库引擎,它无需单独的服务器进程,而是作为应用程序的一部分直接运行在用户空间。SQLite支持多种操作系统,包括Windows、Linux、Mac OS等,广泛应用于移动设备、嵌入式...
2. **Blob字段创建**:在创建表的时候,我们需要定义一个Blob类型的字段来存储图片数据。例如: ```sql CREATE TABLE Images ( id INTEGER PRIMARY KEY AUTOINCREMENT, imageName TEXT, imageData BLOB ); ``...