使用JDBC存储和调用大对象[绝对转载]

转载 2004年07月27日 17:25:00

           使用JDBC存储和调用大对象<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                      彭丽

 摘要:介绍用Java语言编程实现大对象文件在数据库中存储和调用的方法,在数据表中将图像、声音等大对象文件声明为BLOB类型数据。通过JDBC驱动程序与数据库建立连接,利用JDBC API包含的类PreparedStatementResultSet中的方法存储和调用BLOB类型数据。

 关键词:大对象(BLOB),数据库,JDBCJAVA API

 

随着Internet网络应用的发展,多媒体资料的应用越来越广泛,多媒体资料的管理也渐渐成为使用者迫切需要解决的问题,建立一个能够使多媒体资料方便存储和查找的多媒体资料库系统尤为必要。传统的文件系统管理方式只适合少量、单一的多媒体资料的浏览和查询。作为目前主流技术的是基于关系模型的数据库管理系统,通过在系统中引入新的数据类型如二进制大对象(Binary Large OBject, BLOB )来存储多媒体对象字段如图像、声音等。

下面以实现一个GIF格式的图像文件在MySQL数据库中的调入和调出为例,编程语言采用Java,原完整程序代码在JBuilder5 环境下编译通过。

1  首先在MySQL数据库中创建一个存储二进制数据的数据库myimage和表bin_data。

启动MySQL后,输入以下命令行:

mysql> create database myimage;

mysql> use myimage;

mysql> CREATE TABLE  bin_data (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), data LONGBLOB );

这样就建好了数据库和表。

2        建立数据库连接,装载JDBC驱动程序:

Java程序与数据库的连接是通过JDBC (Java DataBase Connectivity),JDBC 的基本结构是JDBC API 配合JDBC驱动程序。在程序的开头将包含JDBC API的java.sql套件import到程序中,这样才能通过JDBC所提供的丰富的类和接口来编写功能强大的Java数据库程序。而JDBC驱动程序则可细分为四种类型,不同类型的JDBC驱动程序有着不一样的特性和使用方法,而同一类型不同版本的JDBC对不同类型和不同版本的数据库的数据类型的支持也有很多差异,在此不一一详述。

本程序中的驱动程序采用JDBC-ODBC Bridage。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

 //装载驱动程序

Connection conn = DriverManager.getConnection (

"jdbc:odbc:bin_data",  // 数据库连接路径

"root",  // 用户名

"123");  // 用户密码

3   存储名为“dancegirl.gif”的图像文件,使用java.sql包PreparedStatement类的SetBinaryStream()方法:

 File files = new File("dancegirl.gif");

 FileInputStream fis=new FileInputStream(files);

 PreparedStatement ps = conn.prepareStatement(

          "INSERT INTO binary_data (name,data)" +

"VALUES (?, ?)");  //预编译SQL语句

 ps.setString(1, files.getName());

 ps.setBinaryStream(2, fis,(int)files.length());

 ps.executeUpdate();

 fis.close();

 ps.close();

4   调出已存入数据库的名为“dancegirl.gif”的文件,读出字节数并作为ImageIcon类对象在Label控件中显示出来:

ImageIcon ii;

JLabel jLabel1 = new JLabel();

JLabel jLabel1 = new JLabel();

int byteSum = 0;

int bytesRead = 0;

byte[] buffer = new byte[8 * 1924];

FileOutputStream fis = new FileOutputStream(

(String)(jComboBox1.getSelectedItem()));

PreparedStatement ps = conn.prepareStatement(

        "select data from binary_data where name=?");

ps.setString(1,

(String)(jComboBox1.getSelectedItem()));

ResultSet rs = ps.executeQuery();

if (rs != null)

{

while(rs.next())

{

InputStream is = rs.getBinaryStream(1);

while ((bytesRead = is.read(buffer)) != -1)

 {

        byteSum += bytesRead;

        fis.write(buffer, 0, bytesRead);

      }

      ii = new ImageIcon(buffer);

      jLabel1.setIcon(ii);

is.close( );

   }

   rs.close( );

}

ps.close( );

fis.close( );

jLabel3.setText("bytes written: " + byteSum);

参考文献:

1、       [美]DenielI.Joshi Rodney  Rundfson  Ramesh  Chandak著,王翠英等译《Java的最新技术连接SQL的JDBC》

  北京:电子工业出版社,1999年。

2、       [美]Bruce Eckel著,京京工作室译《Java编程思想》

北京:机械工业出版社,1999年。

 

 

使用JDBC调用存储过程

存储过程,相当于数据库中的函数或方法。 现举例来说明使用JDBC调用存储过程。 编写存储过程(参看mysql文档) delimiter $$ 接收一个输入参数 create proc...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年08月24日 22:00
  • 1869

使用jdbc调用存储过程

存储过程是指保存在数据库并在数据库端执行的程序。你可以使用特殊的语法在Java类中通过JDBC调用存储过程。在调用时,存储过程的名称及指定的参数通过JDBC连接发送给DBMS,执行存储过程并通过连接(...
  • wangyonglin1123
  • wangyonglin1123
  • 2015年02月28日 11:19
  • 871

JDBC对MySQL数据库存储过程的调用

JDBC对MySQL数据库存储过程的调用
  • wangshuxuncom
  • wangshuxuncom
  • 2014年06月25日 15:58
  • 6166

JDBC执行存储过程的四种情况

本文主要是总结 如何实现 JDBC调用Oracle的存储过程,从以下情况分别介绍: [1]、只有输入IN参数,没有输出OUT参数[2]、既有输入IN参数,也有输出OUT参数,输出是简单值(非列表...
  • yczz
  • yczz
  • 2015年07月15日 14:07
  • 11995

使用JDBC将一个对象保存到数据库

今天在做项目的过程中遇见一个需求: 我有一个角色对象Role,对应数据库中的表role,字段和对象的属性一一对应,现在要实现一个方法saveRole(Role role)。 查了很多资料,但是也没...
  • m0_37630602
  • m0_37630602
  • 2017年04月26日 17:28
  • 959

初学JDBC(七)-使用CallableStatement接口调用存储过程

上一篇博客讲了对大数据对象的处理操作,用到了Clob和blob接口,这一篇博客我来说说CallableStatement接口调用存储过程。...
  • u013132035
  • u013132035
  • 2016年11月20日 23:21
  • 962

Java学习笔记1-JDBC数据库连接和无参存储过程

简单的回顾了一下之前学习的JDBC数据库连接, 现在梳理一下:方便自己整理,把JDBC这块知识划分成两部分,第一部分是简单的数据库连接,实现简单的增删改查操作;第二部分比较复杂,包括JDBC调用存储过...
  • Yan_Song_
  • Yan_Song_
  • 2016年03月28日 00:34
  • 1069

spring jdbc 调用存储过程封装

1、调用存储过程--返回list以及无结果返回以及只返回一个参数 /** * 获取数据库内的存储过程--返回一个List * @param procedureName 存储过程名 ...
  • zhuguominglove
  • zhuguominglove
  • 2015年05月20日 16:05
  • 569

Java jdbc调用Oracle数据库存储过程

一、了解CallableStatement接口 1.callablestatement接口提供了两种调用形式 {?= call [(,, ...)]} //包含结果参数的调用形式 如:函数(...
  • fjza1168
  • fjza1168
  • 2014年05月06日 17:22
  • 2342

java自学之路-----jdbc_分页查询,大数据,批处理,存储过程

分页查询{ 实际上就是每次查询一部分记录,并显示: select * from table_name limit StartIndex, PageSize;——>StartInde...
  • u011771674
  • u011771674
  • 2014年11月05日 10:41
  • 782
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用JDBC存储和调用大对象[绝对转载]
举报原因:
原因补充:

(最多只允许输入30个字)