当前位置:文档之家› 图像数据的数据库存储实现

图像数据的数据库存储实现

图像数据的数据库存储实现
图像数据的数据库存储实现

图像数据的数据库存储实现

XML 中的图像数据转换成数据库二进制类型功能的设计和实现

本文从介绍BASE64 编码的原理入手,通过采用 C 语言编写DB2 的嵌入存储过程,实现了在数据库内存中将文本格式的图片文件到二进制BLOB 字段之间的转换,并且就性能优化等提出若干建议,该设计思路和程序可以广泛的应用到图像图形数据在XML 的存储和转换。

简介

XML 是文本型的数据交换结构,对于字符类型的文本交换非常的方便,实际工作中我们往往需要通过XML 将二进制格式的图形图像信息数据进行数据交换。本文从介绍BASE64 编码的原理入手,通过采用C 语言编写DB2 的嵌入存储过程,实现了在数据库内存中将文本格式的图片文件到二进制BLOB 字段之间的转换,并且就性能优化等提出若干建议,该设计思路和程序可以广泛的应用到图像图形数据在XML 的存储和转换。

XML 存储图形图像的基本原理

XML 作为一种非常广泛的数据交换的载体被广泛的应用到了各行各业的数据交换中。对于图形图像数据的转换,需要采用Base64 编码将二进制格式的图形图像信息转换成文本格式再进行传输。

Base64 编码转换的思想是通过64 个ASCII 字符码对二进制数据进行重新编码组合,即将需要转换的数据每三个字节(24 位)为一组,再将这24 位数据按每组6 位进行重新划分,在每组的最高2 位填充0 最终成一个完整的8 位字节。如果所要编码的数据的字节数不是 3 的整数倍,需要在最后一组数据填充1 到2 个字节的0 字节。例如:我们对ABC 进行BASE64 的编码,ABC 的编码值:A(65), B(66), C(67)。再取二进制A(01000001)B(01000010)C(01000011)连接起来构成010000010100001001000011,然后按6 位为单位分成4 个数据块并在最高位填充两个0 后形成4 个字节的编码后的值(00010000)(00010100)(00001001)(00000011)。再将4 个字节的数据转换成十进制数为(16)(20)(19)(3)。最后根据BASE64 给出的64 个基本字符表,查出对应的ASCII 码字符(Q)(U)(J)(D)。这里的值实际就是数据在字符表中的索引。

BASE64 字符表:

某项目的数据交换采用XML 的为介质,XML 的结构包括个人基本信息:姓名、性别、相片等信息,其中相片信息是采用经过BASE64 函数转换后的文本型数据,图像图形信息通过BASE64 进行数据转换后,形成文本格式的数据类型,再将相应的数据存放到XML 中,最终形成可供交换的文本型的XML 数据结构。

XML 的数据结构如下所示:

相片数据在DB2 嵌入式 C 程序的实现方法

该项目要求能够在DB2 数据库中将相片数据存储为二进制BLOB 格式。我们采用DATASTAGE 进行XML 数据加载,将XML 中的姓名、性别等基本数据项加载到相应的字段,其中文本型的相片数据则加载到CLOB 字段中,再按照BASE64 的编码规则进行逆向转码,整个数据流程如下图所示:

图 1. 相片存储流程图

用户的相片每天的更新数据为30 万条,而且每个相片的平均大于32KB,为了获得最佳的数据库性能,选择采用C 存储过程的方式开发了BASE64 的转换函数。每次函数读取存储在CLOB 字段的文本格式数据全部存储到内存中,并且通过decode 函数在内存中进行转码,转码后再存入数据库中。

程序的清单1 是逐行读取CLOB 字段,并且调用decode 函数进行转码;程序的清单2 是decode 函数的关键性代码。完整的程序见源代码下载部分。

清单 1. 读入CLOB,写入BLOB 字段

EXEC SQL BEGIN DECLARE SECTION;

SQL TYPE IS CLOB(100 K) clobResume; //CLOB 结构体变量

SQL TYPE IS BLOB(100 K) blobResume; //BLOB 结构体变量

sqlint16 bobind;

sqlint16 lobind;

sqlint16 cobind;

sqlint32 idValue;

EXEC SQL END DECLARE SECTION;

int clob2bin(void)

{

// 声明 SQLCA 结构

struct sqlca sqlca;

int charNb;

int lineNb;

long n;

n=0;

// 定义数据库游标

EXEC SQL DECLARE c1 CURSOR WITH HOLD FOR

SELECT czrkxp_a

FROM CZRK_blob for update;

EXEC SQL OPEN c1;

// 活动 CLOB 字段的信息,已经 CLOB 字段的大小

EXEC SQL FETCH c1 INTO :clobResume:cobind;

// 循环读取 CLOB 字段,并且调用 DECODE 转码函数

while (sqlca.sqlcode != 100)

{

if (cobind < 0)

{

printf(“ NULL LOB indicated.\n”);

}

else

{

n++;

decode(); // 文本格式到二进制流的转码函数

printf(“\nCurrent Row =%ld”,n);

// 数据写入 BLOB 字段

EXEC SQL update czrk_blob set czrkxp_blob = :blobResume where current of c1; ;

// 提交事务

EXEC SQL COMMIT;

}

EXEC SQL FETCH c1 INTO :clobResume:cobind ;

}

// 关闭游标

EXEC SQL CLOSE c1;

EXEC SQL COMMIT;

return 0;

}

清单 2. 文本文件到二进制文件的转换

unsigned char in[4], out[3], v;

int I, len;

long j,k;

j = -1;

k=0;

// 将读入 CLOB 结构体变量的数据进行转换

while( j < clobResume.length){

for( len = 0, I = 0; I < 4 && ( j < clobResume.length ); i++ ) {

v = 0;

while((j < clobResume.length) && v == 0 ) {

j++;

v = (unsigned char) clobResume.data[j];

v = (unsigned char) ((v < 43 || v > 122) ? 0 : cd64[ v –43 ]);

if( v ) {

v = (unsigned char) ((v == …$?) ? 0 : v – 61);

}

}

if( j < clobResume.length ) {

len++;

if( v ) {

in[ I ] = (unsigned char) (v – 1);

}

}

else {

in[i] = 0;

}

}

if( len ) {

decodeblock( in, out );

// 写入到 BLOB 结构体变量中

for( I = 0; I < len – 1; i++ ) {

blobResume.data[k] = out[i];

k++;

}

}

}

blobResume.length= k;

}

数据的转换效率和优化建议

在IBM P570 数据库服务器上运行,该程序的运行效率非常高,先后进行了几个数量级的测试,最终平

均测试的转换效率为:每1 万笔数据记录,转换的效率55 秒,即182 条/ 秒。值得注意的是,整个转换过程占用CPU 的量并不特别大,主要的性能瓶颈在磁盘阵列中。

以后可以进一步在以下方面进行调优,确保程序转换的效率更高:

1)采用多进程调用的方式,以获得更高的并发数量;

2)采用每10 次或者100 次提交事务的方式,减少访问磁盘的次数;

3)将CLOB 和BLOB 分别放置在不同的表空间上,并且将表空间分布在在多个磁盘上,获得最佳的磁盘访问速度。

结束语

该程序最终被用户所使用,用户通过DATASTAGE 调用该程序,并且实现了多进程调用,使得整体的性能转换的效率非常高,可以广泛的应用于相片数据的转换中。值得注意的是DB2 V9.5 具有对PureXML 函数的良好支持,DB2 V9.5 提供了xmlcast 函数,该函数可以直接把XML 中的二进制格式的图片转换到BLOB 字段,最大可转换2GB 的数据。

下载

本文将展示的采用C 语言开发的DB2 嵌入式SQL 提供你给,这些C 函数已经在DB2 UDB v8.2 平台被编译和执行过。如果您对确切的实现细节很感兴趣,就请查阅这些代码。

要完成这项任务,您必须确保在用来开发这些函数的系统上安装了 C 编译器,编译并链接了源代码(或安装了预编译的库)以及在数据库中注册了这些过程和函数之后,您就可以按本文实例所演示的那样来使用。

参考文档

?读写CLOB 和BLOB 对象可以参考DB2 的示例程序dtlob.sqc,也可以可以访问:DB2 9 信息中心的相关内容。

?关于BASE64 函数的详细内容,你可以阅读RFC 3548 (RFC3548) 规范,也可以访问:https://www.doczj.com/doc/be11485115.html,/rfcs/rfc3548.html

?developerWorks 中国网站Information Management 专区:在这里可以找到更多适用于DB2 UDB 开发人员和管理员的资源。

?随时关注developerWorks 技术活动和网络广播。

?使用可直接从developerWorks 下载的IBM DB2 试用软件构建您的下一个开发项目。

?参与论坛讨论。

数据库图片的存储

1、引言 数据库应用程序,特别是基于WEB的数据库应用程序,常会涉及到图片信息的存储和显示。通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,在JSP中建立相应的数据源,利用数据库访问技术处理图片信息。但是,如果我们想动态的显示图片,上述方法就不能满足需要了。我们必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。实际操作中,可以利用JSP的编程模式来实现图片的数据库存储和显示。 2、建立后台数据库 假定处理的是图片新闻,那么我们可以建立相应的数据库及数据表对象。我们要存取的数据表结构的SQL脚本如下所示: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[picturenews]') andOBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[picturenews] GO CREATE TABLE [dbo].[picturenews] ( [id] [int] IDENTITY (1, 1) NOT NULL , [image] [image] NULL , [content] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL , [detail] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO 表picturenews中,字段id作为标识,每存储一行数据,自动增加1。字段image 用于存储图片信息,其数据类型为“image”。 3、向数据库存储二进制图片 启动Dreamweaver MX后,新建一个JSP文件。其代码如下所示。 <%@ page contentType="text/html;charset=gb2312"%>

java连接mysql数据库

Java连接MySQL 数据库的正确操作流程 时间:2010-05-25 15:41 来源:博客园字体:[大中小] 以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例),我们主要是以MySQL数据库为例讲下Java正确连接MySQL数据库的实际操作流程,以下就是对其详细内容的描述。 当然,首先要安装有JDK(一般是。然后安装MySQL,这些都比较简单,具体过程就不说了。配置好这两个环境后,下载JDBC驱动(这个是最新版的)。然后将其解压缩到任一目录。我是解压到D盘,然后将其目录下的加到classpath里,具体如下: “我的电脑”-> “属性” -> “高级” -> “环境变量”,在系统变量那里编辑classpath,将D:\加到最后,在加这个字符串前要加“;”,以与前一个classpath区分开。然后确定。 环境配置好了,很简单。现在,先配置MySQL,设其用户名为“root”,密码为“root”。在命令行或用一个SQL的前端软件创建Database。 我是用SQLyog的前端软件来创建Database的。 先创接MySQL 数据库: 1.CREATE DATABASE SCUTCS; 接着,创建表: 1.CREATE TABLE STUDENT 2.( 3.SNO CHAR(7) NOT NULL, 4.SNAME VARCHAR(8) NOT NULL, 5.SEX CHAR(2) NOT NULL, 6.BDATE DATE NOT NULL, 7.HEIGHT DEC(5,2) DEFAULT , 8.PRIMARY KEY(SNO) 9.); 然后插入数据,可以用SQL语句insert into <表名> values (value1, value2, ...); 也可以用SQLyog来操作 好了,创建好了。

C#从SQL 数据库中读取和存入图片

C#从SQL 数据库中读取和存入图片 本实例主要介绍如何将图片存入数据库。将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类、BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用 ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中。主要代码如下: private void button1_Click(object sender, EventArgs e) { openFileDialog1.Filter = "*jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP"; if(openFileDialog1.ShowDialog()==DialogResult.OK) { string fullpath =openFileDialog1.FileName;//文件路径 FileStream fs = new FileStream(fullpath, FileMode.Open); byte[] imagebytes =new byte[fs.Length]; BinaryReader br = new BinaryReader(fs); imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length)); //打开数据库 SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_05"); con.Open(); SqlCommand com = new SqlCommand("insert into tb_08 values(@ImageList)",con); com.Parameters.Add("ImageList", SqlDbType.Image); com.Parameters["ImageList"].Value = imagebytes; com.ExecuteNonQuery(); con.Close();

Java中连接MySql数据库的几种方法

JDBC Java中JDBC定义了java与各种sql数据库之间的编程接口,JDBC API是一个统一的标准应用程序编程接口,这样可以屏蔽异种数据库之间的差异。 JDBC的工作原理 JDBC与ODBC(OpenData Base Connectivity,开放式数据库连接)的作用非常类似,它在应用程序和数据库之间起到了桥梁的作用。ODBC使用的特别广泛,在java中还提供了JDBC-ODBC桥,能够在JDBC与ODBC之间进行转换,这样可以通过ODBC屏蔽不同种数据库之间的差异。在JDK的包java.sql.*中定义了一系列的类、接口、异常以及这些类和接口中定义的属性和方法,java的开发人员通过一定的规则调用java.sql.*中的API就可以实现对数据库管理系统的访问。 JDBC的四种驱动 1.JDBC-ODBC Bridge JDBC-ODBC Bridge可以访问一个ODBC数据源,但在执行Java程序的机器上必须安装ODBC驱动,并作出配置,它的调用方式如下图: 因为中间有个JDBC-ODBC,所以影响了执行效率。 配置ODBC数据源的方法如下(以Mysql为例): 第一步,打开控制面板—>管理工具--->数据源(ODBC) 选择系统DSN,这一项默认应该是空的,我这里是已经配置好了一个数据源。

第二步,点击添加 第三步,选择Mysql的ODBC驱动,点击完成。 注:MySQL的ODBC驱动在系统中一般是找不到的,因为它不是系统默认自带的驱动,所以,我们要自己安装我们所需要的MySQL的ODBC驱动。安装步骤如下: ①.下载安装包,https://www.doczj.com/doc/be11485115.html,/downloads/connector/odbc/ ②.我们下载与自己系统相应的ODBC驱动 这里我们选择

数据库的存储结构

第五章数据库的存储结构 5.1数据库存储介质的特点 ●内存 容量低(一般只有几百M,最多一两个G),价格高,速度快,数据易丢失(掉电、当机等)。 一般做DBMS(或CPU)和DB之间的数据缓冲区。 实时/内存数据库系统中使用内存存放实时数据。 ●硬盘 容量高(一般有几十G,多到一两百G),价格中,速度较快,数据不易丢失(除非物理性损坏)。 一般做用来存放DB。 实时/内存数据库系统中使用硬盘存放历史数据库。 ●移动硬盘(USB接口) 容量高(一般有几十G),价格中,速度较快,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 ●光盘 容量低(一般650M/片,但光盘可在线更换,海量),价格低,速度中,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 ●磁盘(软盘) 容量低(一般有几M,优盘多到一两百M),价格中,速度较慢,数据不易丢失(除非物理性损坏)。 一般数据库不使用磁盘。 ●磁带 容量低(但可在线更换,海量),价格低,速度最慢,且要按顺序存取,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 按速度从高到低: 内存、硬盘、USB盘(移动硬盘和优盘)、光盘、软盘、磁带。 按在线容量从大到小: 硬盘、移动硬盘、内存、光盘、磁带、优盘、软盘。 物理块:512byte/1K/2K/4K/8K 原因: (1)减少I/O的次数; (2)减少间隙的数目,提高硬盘空间的利用率。 ORACLE逻辑块与物理块(init.ora中db_block_size定义逻辑块大小) 缓冲块和缓冲区(即SGA中的Data Buffer Cache) 延迟写(delayed write)技术/预取(Prefetching)技术(ORACLE中由DBWR进程完成数据的读写)

通过java或jsp想数据库存取二进制图片(精)

1 MySQL存储大容量的二进制文件的格式是 blob ,其实除了图片还可以存别的 2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流 废话就不多说了, 大家看看代码很容易明白, 先来看一个 app 程序, 当然首先您要在数据库中先建立一个用于保存图片的表和相应的列,数据格式为 blob package com.lizhe; import Java.io.*; import java.sql.*; public class PutImg { public void putimg( { try { Class.forName("org.gjt.mm.mysql.Driver".newInstance(; String url = "JDBC:mysql://localhost/img?user=root&password=root&useUnicode=true&characterE ncoding= gbk"; Connection conn = DriverManager.getConnection(url; Statement stmt = conn.createStatement(; //stmt.execute("insert into imgt (id values (5"; stmt.close(; PreparedStatement pstmt = null; String sql = "";

File file = new File("c: log.jpg"; InputStream photoStream = new FileInputStream(file; //sql = " UPDATE imgt SET img = ? "; sql = "INSERT INTO imgtable (img VALUES (?"; pstmt = conn.prepareStatement(sql; pstmt.setBinaryStream(1, photoStream, (int file.length(; pstmt.executeUpdate(; pstmt.close(; conn.close(; } catch (Exception e { e.printStackTrace(; } } public static void main(String args[]{ PutImg pi=new PutImg(; pi.putimg(; } } InputStream photoStream = new FileInputStream(file;

Java连接MySql数据库,并且实现插入、删除、更新、选择操作

天之火–Qutr的专栏 君子终日乾乾,夕惕若,厉,无咎。 Home Java连接MySql数据库,并且实现插入、删除、更新、选择操作! 这是我最近写的一个连接MySql数据库的一个例子,主要实现了插入,删除,更新,选择操作,用的环境是j2sdk1.4.2_08,Eclipse3.1。以前我的同事用Python 写了同样的类,非常的好用,支持了我们公司的大部分业务,现在我们慢慢改用Java了,所以我用Java重写了一遍。一方面在今后的业务中能够用到,另一方面熟悉一下Java。 下面我把在Eclipse3.1下怎样配置数据库连接信息简单说一下。 1.启动Eclipse3.1。 2.建立一个Java project就叫DbConnect 吧,再在该Project下建立一个新类也叫 DbConnect 吧。 3.右击DbConnect.java文件点import,选择Archive file然后选择你的 mysql-connector-java-3.1.8-bin.jar文件,点Finish。你会看到有好些文件被加载进来,OK这就是连接MySql所需的驱动信息。如果到了这里你都成功的话那么恭喜你,你已经成功一半了!:) 4.接下来把我下面的代码copy到你的Java文件中,修改相关的数据库连接信息 运行一下。OK? 我说一下那个mysql-connector-java-3.1.8-bin.jar文件,其实这就是一个MySql的驱动,各数据库厂商提供了不同的适用于JDBC的驱动使得在Java中连接数据库非常简单。这里我就不多说了,以后我会写篇专门介绍数据库驱动的文章。关于MySql的驱动还有更新版本的,你需要到MySql的网站上去下载,这个网上到处都是,我就不多说了。下面看程序,有些地方我写了详细的注释应该能看懂。 这个类是非常有特色的,在每个方法的传人参数和返回值不变的情况下,希望高手能提出改进意见。多指教,谢谢! /** * 数据库连接、选择、更新、删除演示 */ //import java.sql.*; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.DriverManager; import java.util.*; public class DbConnect {

如何在数据库中保存大量图片

如何在数据库中保存大量图片 作者: 刘师义上海盟威软件有限公司软件开发工程师 时间: 2010/6/1 来源: 上海盟威软件有限公司(https://www.doczj.com/doc/be11485115.html,)。公司拥有以微软最有价值专家为核心的技术团队,专业从事Aaccess开发培训,学员可非脱产方式参加培训,自由安排学习时间,并通过网络获得公司的技术支持,几年来已为全国各地大中型企事业单位培养了众多“精管理、懂编程”的复合型人才,详情了解:https://www.doczj.com/doc/be11485115.html,/training.asp。 一、摘要: 我们将图片保存到数据库中,使用维护起来都变得很简单尤其适用于小型便携式的Access管理系统。但如果直接通过绑定对象框控件的插入对象方法将图片插入的话,非位图图片体积会暴增几十上百倍,从而大大降低了实用性。在本文中,讲述了如何将图片以原始大小保存到数据库中进行使用的方法。 二、正文: 一般情况下,如果要将图片保存到数据库中,都是通过绑定对象框的“插入对象”功能来实现,但是这样做会造成数据库体积的明显增大。尤其是在Access 2007之前的版本中所有插入的图上均会被转换成位图,而如果把一个JPG图片转换成位图,我们会发现图片的大小增大了几十上百倍。那么有没有一种办法能够直接把保存源格式的图片到数据库中呢?答案是肯定的,答案就在ADO中的流对象(Stream)。此处要注意的是,ADO必须是2.5以及更新的版本,老版本中是没有流对象的。 流对象主要有两种用途:一种是处理文档数据,这样可以通过流对象的属性和方法来读取和修改文档内容;另一种就是把其它任意格式的文件以二进制数据流进行处理,不关心文件的格式和内容。在本文中我们讨论的是在数据库中存储图片,所以我们这里主要讨论的就是它的后一种用途。为了更容易理解,我们在此基于一个示例程序来进行说明。 首先我们需要在表中添加至少两个字段,一个用来存放图片的名称,一个用来存放图片的二进制文件数据: 然后我们基于此表来创建窗体,通过窗体实现图片的保存以及将保存的图片显示出来。在此窗体中我们需要手动添加三个控件: 图像控件:名称:imgPic 图片类型:链接 按钮控件:名称:cmdAdd 标题:添加/更改图片单击事件:[事件过程] 按钮控件:名称:cmdDel 标题:删除图片单击事件:[事件过程] 由于相关的记录修改添加都是通过代码完成,所以我们需要将“图片名称”的“锁定”属性设为“是”,另外图片数据是一个绑定对象框控件,它只用来存放图片文件数据,不需要显示出来,所以我们要将其“可见性”属性设为“否”。(这里有一个可能由于ADO的流对象和窗体绑定的DAO记录集兼容性造成的问题:向流对象中写入图片数据时,直接把窗体绑定记录集中“图片数据”字段值中的二进制数据写入时会出错,需要绑定一个“绑定对象控件”,将控件中的二进制数据写入才不会出错。)

数据库与存储架构

数据库与存储架构 前言 决定应该赋予数据库什么样的存储和配置,已经成为一项杂乱无章的工作,这种现象我见得多了。数据库工程师一般都是数据库的专家,而对于存储配置的低层细节几乎一无所知。另外存储管理员和工程师也往往不知道数据库如何利用下层的存储,以及数据库、索引文件、记录文件,当然还有文件系统和卷管理器的需求和最佳配置又是什么。 这往往造成了存储资源利用率低,增加了整体成本,导致性能降低甚至可能无法满足你的需求,此外预算也总是很紧张,而管理上又要求有效地利用可获得的预算。本文将解决数据库管理员和存储工程师在解决架构问题而进行协作时的一些问题。 数据库与存储架构配置 组件 大部分数据库的端到端存储架构所需硬件和软件如下: 数据库 * 控制文件(Control file) * 表空间(Table space) * 索引文件(Index file) * 重做日志(亦称在线日志,Redo log) 操作系统 文件系统和卷管理器(如果数据库运行在裸设备上,这一项可能没有关系)、主机总线适配器(HBA)、存储硬件。 以上每一部分都拥有多个组件,具有多种特性和功能,对整体性能影响显著。 数据库 数据库应用本身具有多重特性和功能,必须加以考虑。Oracle的组件如下: 控制文件――记录数据库的物理结构,用于激活数据库 表空间――来自数据库各行各列的实际数据 索引文件/空间――Oracle中并不需要索引,不过大型数据库总会用到索引,因为在数据库中进行查找时,索引可以大幅提升查找速度 重做日志――被激活的数据库请求,允许你在数据库崩溃后进行重建并重新启动(这些日志本质上类似于文件系统日志) 因为上述组件都有不同类型的访问模式,所以每种文件类型均被存储在不同的文件系统中,并有调节选项。其它数据库也拥有相似的文件类型,需要以相似的方式考虑。 控制文件 大部分数据库都建议使用多个控制文件以确保可靠性。控制文件并不需要常写常读,不过你必须确定各文件被放置在不同的RAID集上,适用于不同的RAID控制器。 表空间 表空间一般是数据库中量最大的数据。当读取列上的大表时,表空间可以由更大的I/O请求访问。根据大小和更新频率的不同,表空间常常位于更大的数据条带化RAID-5上,以便获得较RAID-1更高的密度和提升的性能。 索引文件/空间 在许多数据库中,索引文件是被访问频率最高的数据。查找索引文件有可能需要很大的IOPS(每秒I/O操作)。另外,有时候数据库被重新索引,这在计算上非常密集,并且需要大量的I/O带宽。因为数据库和所需的查找类型不同,索引空间也许会很大,一般来说,根据传统的UNIX文件尺寸,索引

Java连接mysql数据库源代码

Java连接mysql数据库源代码 /** *@author mervyn *@Development_time 2011.3.12 *welcome to https://www.doczj.com/doc/be11485115.html,/mervyn_hb */ package src; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.sql.*; import java.util.*; public class MysqlConnectSystem { /** * @param args * @throws IOException */ public static void main(String[] args) throws SQLException, IOException { String Usename,KeyID,UrlString; //String DriverConnect; char MenuExitValue; String driver="com.mysql.jdbc.Driver"; Scanner EntryValue=new Scanner(System.in); System.out.println("欢迎使用MysqlConnectSystem信息管理系统!"); MysqlConnectSystem mysqlconnect=new MysqlConnectSystem(); MysqlConnectSystem mysqlinsert=new MysqlConnectSystem(); MysqlConnectSystem mysqlupdate=new MysqlConnectSystem(); MysqlConnectSystem mysqldelete=new MysqlConnectSystem(); System.out.println("请输入要登录的用户名:"); Usename=EntryValue.next(); System.out.println("请输入要登录的数据库的密码:"); KeyID=EntryValue.next(); System.out.println("请输入需要登录的数据库:"); UrlString="jdbc:mysql://127.0.0.1:3306/"+EntryValue.next(); do{ try { Class.forName(driver); Connection conn=DriverManager.getConnection(UrlString, Usename,

【数据库复习资料】数据库是长期储存在计算机内

数据库是长期储存在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。其具有永久储存、有组织和可共享三个基本特点 数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。 客观存在并可相互区别的事物称为实体 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 封锁是指事物T在对某个数据对象,例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事物T就对该数据对象有了一定的控制,在事物T释放它的锁之前,其他的事物不能更新此数据对象。基本的封锁包括排他锁和共享锁两种。 数据库管理系统是位于用户和操作系统之间的一层数据管理软件。它和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。主要功能有:数据定义功能;数据组织、储存和管理;数据操纵功能;数据库的事务管理和运行管理;数据库的建立和维护功能;其他功能 关系数据模型具有下列优点:1关系模型与格式化模型不同,它是建立在严格的数学概念的基础上的;2关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。对数据的检索和更新结果也是关系(即表)。所以其数据结构简单、清晰、用户易懂易用;3关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。缺点:由于存取路径对用户透明,查询效率往往不如格式化数据模型。因此为了提高性能,DBMS必须对用户的查询请求进行优化,增加了开发DBMS的难度 数据模型是对现实世界数据特征的抽象,是用来描述数据、组织数据和对数据进行操作的。数据模型是数据库系统的核心和基础,其应该满足三方面要求:1能比较真实的模拟现实世界;2容易为人所理解;3便于在计算机上实现。 两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。1在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;2在释放一个封锁之后,事务不再申请和获得任何其他封锁。 一对一、一对多、多对多;层次模型、网状模型、关系模型、面向对象模型、对象关系模型;一次封锁法、顺序封锁法;技术安全、管理安全、政策安全 码也成为码键,表中的某个属性组,它可以唯一确定的一个元组,也就成为本关系的码。一个关系只有一个主码。操作码就是指令。 关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件,这些规范条件中最基本的一条就是关系的每一个分量必须是一个不可分的数据项,即不允许表中有表。关系数据模型的操作主要包括查询、插入、删除和更新数据,其数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合。 在视图上不能完成的操作是在视图上定义新的表,可以更新视图、查询、在视图上定义新的视图。视图查询正确的是将对视图的查询转换为对相关基本表的查询 数据库设计中,用E-R 图描述信息结构但不涉及信息在计算机中的表示,这是数据库 设计的概念设计阶段。当局部E-R图合并成全局E-R图时可能出现冲突,不属于合并冲突的是语法冲突

java实现图片或文件的上传功能实现代码

java实现图片或文件的上传功能具体思路及代码 一、思路 文件是如何从本地发送到服务器的呢? 首先,我们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,这样当我们将该工程部署到服务器上时,服务器便也生成个upload文件夹,用来存放上传的资源。 然后,在WebRoot目录下新建一个jsp文件,主要实现的作用就是选择上传的文件,提交至servlet来进行处理 详细代码如下:一个form将文件信息通过post方式传送到指定的servlet 二、代码 复制代码代码如下: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> "> My JSP 'upload.jsp' starting page

请选择上传的图片或文件:

Java使用JDBC连接MYSQL数据库增删改查示例

Java使用JDBC连接MYSQL数据库增删改查示例JDBC连接MYSQL数据库: import java.sql.Connection; import java.sql.DriverManager; public class Mysql { public static void main(String arg[]) { try { Connection con = null; //定义一个MYSQL链接对象 Class.forName("com.mysql.jdbc.Driver").newInstance(); //MYSQL 驱动 con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root"); //链接本地MYSQL System.out.print("yes"); } catch (Exception e) { System.out.print("MYSQL ERROR:" + e.getMessage()); } }

} Class.forName("com.mysql.jdbc.Driver").newInstance(); 我们链接的是MYSQL 数据库,所以需要一个MYSQL的数据库驱动,如果你的环境中没有安装,可以下载:mysql-connector-java-5.1.17-bin.jar JAR包,然后放进jdk1.6.0_37\jre\lib\ext 重启eclispe 就可以在JRE系统库中看到。 con = DriverManager.getConnection;("jdbc:mysql://127.0.0.1:3306/test", "root", "root"); 是链接数据库的语句,返回Connection con;对象。参数格式:("jdbc:mysql://ip:端口/数据库名称", 用户名,密码) 写入一条数据 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Mysql { /**

5-数据库存储结构练习题参考答案

数据库存储结构 一、选择题 1、一个数据库系统,必须配备的外存储器是( C )。 A.软磁盘存储器B.光盘存储器C.硬磁盘存储器D.磁代存储器 2、下面对磁盘阵列(RAID)的正确叙述是(C ) A.独立磁盘构成的具有冗余能力的阵列。 B.利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 C.RAID 1称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,因此可以提高数据传输率。 D.RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率。 3、下面关于RAID(磁盘冗余阵列)的不正确叙述是( C )。 A.RAID 0技术可提高输入/输出速度,但可靠性下降。 B.RAID 1技术可提高可靠性,但输入/输出速度下降。 C.RAID 1技术多用于不在乎数据丢失的应用中。 D.RAID 0+1技术既可提高可靠性,又可提高输入/输出速度。 4、在( B )组织结构中,记录是以输入顺序存储的。 A.顺序文件B.堆文件C.散列文件D.聚集文件 5、在( A )组织结构中,记录是按查找键值的升序或降序顺序存储的。 A.顺序文件B.堆文件C.散列文件D.聚集文件 6、下面对SQL Server数据库的存储结构的错误叙述是(C )。 A.一个SQL Server数据库可以有多个数据文件,但最多不能超过32767个。 B.一个SQL Server数据库可以有多个文件组,但最多不能超过256个。 C.一个文件组最多只能包含2个数据文件。 D.一个SQL Server数据库可以有多个数据文件组,但必须有一个主文件组。 E.主文件被放在主文件组中。 7、下面对SQL Server数据库数据文件的错误叙述是( D )。 A.每个数据文件由一系列数据页组成,每个页最多存储8060字节的数据。 B.行不跨页,就是说表中的一行数据(元组)只能存放在一个数据页中。 C.一个SQL Server数据库可以有多个数据文件,但必须有一个主文件。 D.不能把用户表存放在主文件中。 8、下面对SQL Server数据库文件组、文件与表之间关系的错误叙述是(D )。 A.一个数据库的系统表被存放在主文件组中。 B.一个数据库的系统表被存放在主文件中。 C.一个表的各列占用存储空间总和不能超过8060字节。 D.用户可以直接指示把用户表放在哪个文件中。

存储过程_将图片存入数据库

一、写一个存储过程,将图片存入数据库中 基本情况介绍: 数据库版本:oracle 11g 数据库用户:scott 数据库密码:tiger JDK:1.6 要导入的图片:D:\picture\1.jpg --创建存储图片的表 CREATE TABLE IMAGE_LOB (T_ID V ARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL); --创建存储图片的目录 CREATE OR REPLACE DIRECTORY IMAGES AS 'D:\picture'; 存储过程如下: CREATE OR REPLACE PROCEDURE IMG_INSERT (TID V ARCHAR2,FILENAME V ARCHAR2) AS F_LOB BFILE;--文件类型 B_LOB BLOB; BEGIN iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE) V ALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB; --插入空的blob F_LOB:= BFILENAME ('IMAGES', FILENAME); --获取指定目录下的文件 DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONL Y); --以只读的方式打开文件 DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB)); --传递对象 DBMS_LOB.FILECLOSE (F_LOB); --关闭原始文件 COMMIT; END;

java上传文件通过mybatis存储到数据库的BLOB格式中

上传文件通过mybatis存储到数据库的BLOB格式中 HTML 页面需要设置一个文件框 [html]view plaincopy 1.

2. 3. 4. 5.
上传操作方法: [java]view plaincopy 1.public int doUpload() throws Exception { 2. 3. Map param = new HashMap(); 4. ServletFileUpload servletFileUpload = new ServletFileUpload(); 5. FileItemIterator itr = servletFileUpload.getItemIterator(mSGA.getCur rentRequest()); 6.while (itr.hasNext()) { 7. FileItemStream fi = itr.next(); 8.if ("file".equals(fi.getFieldName())) { 9. InputStream is = fi.openStream(); 10.byte[] b = FileCopyUtils.copyToByteArray(is); //FileCopyU tils 为spring下的一个工具类。 11.if (b == null || b.length == 0) { return0; } 12. param.put("FILE", b);//此处所用的参数类型为 byte[] 13. } 14. } 15. 16.//////////各种参数放入param你懂得。。。。 17. 18.//dao 为个人封装的工具类。。。 19. 20. param.put("ID", dao.getSequence("SEQ_NAME")); 21.

图像检索与数据库

西北工业大学 得分: 学号 ___________________________ 姓名 ___________________________ 考试课程 ___________________________ 考试日期 ___________________________

图像检索与数据库 近年来, 由于现代电子技术的发展,文字情报与文字情报一样,也能够经过数字化处理制成数据库用于计算机检索。本文便是对图像数据库及其检索的初步探讨。 1、图像数据库 1.1 图像数据库的类型 数据库一般分为文献参考数据库和源数据库。前者本身并不直接提供用户所需情报, 而是起着一种指示、介绍、牵线搭桥的作用;后者提供的是可供用户直接使用的一次情报。显然图像数据库属于后一类型。目前的图像数据库按照图像情报类型可分为三类, 即图形数据库、照片数据库、绘画图案数据库。 图形数据库大多应用于自然科学、工程技术领域, 收录的是用线条来表达概念的图形资料,包括设计图、配线图、住宅草图; 地图( 如地形图、地势图、道路地图、住宅地图、指路图;天气图等)。 照片数据库在图像数据库中占有主要地位, 广泛应用于社会, 人文科学和自然科学,工程技术各领域。收录的主要内容有:报纸照片; X光片、C T 等医用诊断图;幻灯片;卫星照片、宇航照片等观测图;;资料照片、肖像、记录照片;商品广告用赠礼照片等等。日本摄影研究中心的Photo Disc Library System 光盘数据库便属此类, 它收录了日本著名摄影家的5 万多幅彩色照片, 极富观赏性。 绘画·图案数据库数量也在逐年增多, 涉及的专业领域较多。该类数据库一般收录绘画、插图、图案、CAD 、注册商标、公共设施

Java连接MySQL数据库

Java与Myql数据库的连接问题 在我痛苦的try了N多次之后我终于明白,一个.java文件如何与mysql数据库连同并且可以在小黑屏里显示数据库里面的内容,数据库的驱动文件的安装实在是件头疼的事,实际上是不需要安转的,按如下步骤即可轻松解决。 1.在网上下载一个数据库驱动程序,例如我下载的是(0002mysqlconnectorjava517(1).rar)大小是7.71MB,解压之,到 0002mysqlconnectorjava517(1)或者到当前文件,在mysql-connector-java-5.1.7文件里有个mysql-connector-java-5.1.7-bin.jar文件,可以将此文件解压也可以不解压, 下面有a、b两种方法(结果是一样),首先我的文件是这样放的: a.我的那个没解压的.jar文件在D:\mysql-connector-java-5.1.7这个文件夹里面(就是那个694kb的压缩包) b.我把这个.jar文件解压后放在的D:\mysql-connector-java-5.1.7这个文件夹里面(就是那个mysql-connector-…)文件夹 2.配置环境变量(这是最要命的)我的电脑-->属性-->高级-->环境变量(N)-->系统变量-->新建classpath

如果是上面的a情况那么是这样配的 变量值是:D:\mysql-connector-java-5.1.7\mysql-connector-java-5.1.7-bin.jar; 请切记变量值后面一定要有一个分号----【;】切记要有这个不然就出现如下异常错误并且在每次设置环境变量之后DOS框是要重新启动的不然没有生效的是。 D:\Java>javac database.java D:\Java>java database Exception in thread "main" https://www.doczj.com/doc/be11485115.html,ng.NoClassDefFoundError: database Caused by: https://www.doczj.com/doc/be11485115.html,ng.ClassNotFoundException: database at https://www.doczj.com/doc/be11485115.html,.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at https://www.doczj.com/doc/be11485115.html,.URLClassLoader.findClass(URLClassLoader.java:188) at https://www.doczj.com/doc/be11485115.html,ng.ClassLoader.loadClass(ClassLoader.java:307) at https://www.doczj.com/doc/be11485115.html,uncher$AppClassLoader.loadClass(Launcher.java:301) at https://www.doczj.com/doc/be11485115.html,ng.ClassLoader.loadClass(ClassLoader.java:252) at https://www.doczj.com/doc/be11485115.html,ng.ClassLoader.loadClassInternal(ClassLoader.java:320) Could not find the main class: database. Program will exit. D:\Java>

数据存储方式

数据存储的几种方式: 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式;数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等;网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理。对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络。但从开发者的角度来讲它可以分为以下五种方式: 1.SharedPreferences共享偏好2.Internal Storage内部存储空间3.External Storage外部存储空间4.SQLite Database数据库5.Internet网络这几种方式各自有各自的优点和缺点,要根据不同的实际情况来选择,而无法给出统一的标准。下面就各种方式谈谈它们的优缺点,以及最合适的使用情况:1.Shared Preferences共享偏好SharedPreferences是用来存储一些Key/Value类似的成对的基本数据类型,注意,它只能存储基本数据类型,也即int, long, boolean, String, float。事实上它完全相当于一个HashMap,唯一不同的就是HashMap中的Value可以是任何对象,而SharedPreferences中的值只能存储基本数据类型(primitive types)。对于它的使用方法,可以参考Android Developer Guide,这里不重复。如此来看,最适合SharedPreferences的地方就是保存配置信息,因为很多配置信息都是Key/Value。事实上,在Android当中SharedPreferences使用最多的地方也是用来保存配置(Settings)信息,系统中的Settings中这样,各个应用中的Settings也是这样。并且,Android中为了方便的使用SharedPreferences 保存配置信息,它来专门有PreferenceActivity用来封装。也就是说如果你想在应用程序中创建配置(Settings),你可以直接使用PreferenceActivity和一些相关的专门为Preference封装的组件,而不用再直接去创建,读取和保存SharedPreference,Framework中的这些组件会为你做这些事。再谈谈一些使用SharedPreference时的技巧,它只能保存基本数据类型,但假如我想保存一个数组,怎么办?可以把数据进行处理,把它转化成一个String,取出的时候再还原就好了;再如,如想保存一个对象,怎么办,同样,可以把对象序列化成为字符序列,或转成String(Object.toString()),或是把它的HashCode(Object.hashCode())当成Value 保存进去。总之,SharedPreferences使用起来十分的方便,可以灵活应用,因为它简单方便,所以能用它就尽量不要用文件或是数据库。 1.Internal Storage内部存储空间所谓的内部存储与外部存储,是指是否是手机内置。手机内置的存储空间,称为内部存储,它是手机一旦出厂就无法改变,它也是手机的硬件指标之一,通常来讲手机内置存储空间越大意味着手机价格会越贵(很多地方把它称为手机内存,但我们做软件的知道,这并不准确,内存是指手机运行时存储程序,数据和指令的地方;这里应该是手机内部存储的简称为内存,而并非严格意义上的内存)。内部存储空间十分有限,因而显得可贵,所以我们要尽可能避免使用;另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。上面所谈到的Shared Preferences和下面要谈到的SQLite数据库也都是存储在内部存储空间上的。Android本身来讲是一个Linux操作系统,所以它的内部存储空间,对于应用程序和用户来讲就是“/data/data"目录。它与其他的(外部的存储)相比有着比较稳定,存储方便,操作简单,更加安全(因为可以控制访问权限)等优点。而它唯一的缺点就是它比较有限,比较可贵。虽然,可以非常容易的知道程序本身的数据所在路径,所有的应用程序的数据路径都是“/data/data/app-package-name/”,所有的程序用到的数据,比如libs库,SharedPreferences

相关主题
文本预览
相关文档 最新文档