java之操作MySql操作大对象

1.数据库表结构如下

  

  这里数据类型根据插入数据的大小进行选择。

1.具体实现如下,这里主要将图片转为二进制存入数据库

 1 Connection conn=null;
 2         PreparedStatement st=null;
 3         String sql="insert into users(username,password,regdate,img) values(?,?,?,?)";
 4         try {
 5             if(conn==null){
 6                 conn = db.getConnection();
 7             }
 8             st = conn.prepareStatement(sql);
 9             File file=new File(this.getClass().getClassLoader().getResource("../../").getPath()+"1.jpeg");
10             InputStream input=new BufferedInputStream(new FileInputStream(file));
11             st.setString(1,user.getUsername());
12             st.setString(2, user.getPassword());
13             st.setDate(3, new Date(user.getRegdate().getTime()));
14             st.setBinaryStream(4, input,(int)file.length());//这里需要注意,后面的file.length()数据类型为long,在这里需要将其强转为int类型
15             int result=st.executeUpdate();
16             if(result>0){
17                 return true;
18             }
19         } catch (SQLException e) {
20             e.printStackTrace();
21         } catch (FileNotFoundException e) {
22             e.printStackTrace();
23         } finally{
24             if(st!=null)
25             db.close(st);
26             if(conn!=null)
27             db.close(conn);
28         }
29         return false;

3.注意:

  PreparedStatement对象中的setBinaryStream(int index,inputstream input,long)方法在jdk1.6存在,但是在mysql的jdbc中并没有实现,如果后面的文件长度没有转换为int的话则会报以下错误

java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

4.从数据库中取出二进制文件

 1 Connection conn = null;
 2         PreparedStatement st = null;
 3         String sql = "select * from users where id=?";
 4         try {
 5             if (conn == null) {
 6                 conn = JdbcUtil.getConnection();
 7             }
 8             st = conn.prepareStatement(sql);
 9             st.setInt(1, user.getId());
10             File file = new File(this.getClass().getClassLoader().getResource("../../").getPath()+ "back.jpeg");
11             OutputStream output = new BufferedOutputStream(new FileOutputStream(file));
12             ResultSet result = st.executeQuery();
13             while (result.next()) {
14                 byte[] by = new byte[1024];
15                 int i = 0;
16                 InputStream input = result.getBinaryStream(5);//取出二进制数据
17                 try {
18                     while ((i = input.read(by)) != -1)
19                         output.write(by, 0, i);//通过输出流写到文件中
20                 } catch (IOException e) {
21                     e.printStackTrace();
22                 }
23
24             }
25
26         } catch (SQLException e) {
27             e.printStackTrace();
28         } catch (FileNotFoundException e) {
29             e.printStackTrace();
30         } finally {
31             if (st != null)
32                 JdbcUtil.close(st);
33             if (conn != null)
34                 JdbcUtil.close(conn);
35         }
36         return false;
时间: 2024-10-31 20:14:58

java之操作MySql操作大对象的相关文章

JDBC:数据库操作:处理大对象CLOB数据

目标: 了解大对象处理基本原理, 掌握CLOB数据的读,写操作. 可以使用CLOB类处理大文本数据. 大对象处理主要指CLOB和BLOB两种类型字段.可以大量存储文字. 要想在程序中处理这样的大数据操作,则必须使用preparedStatement完成.所有文件内容通过IO流方式从大文本字段中保存和读取. 写入大数据对象: 使用PreparedStatement接口中的方法. void setAsciiStream(int parameterIndex, InputStream x, int l

如何 操作Blob 大对象、映射派送属性 、映射组成关系

1. 项目结构 2. 三个持久化类 ① Pay.java package com.baidu.cfghbm; public class Pay { //月薪 private Integer monthlyPay; //年薪 private Integer yearPay; //带薪假 private Integer vocationWithPay; // private Worker worker; public Worker getWorker() { return worker; } pub

java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)

插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和服务器端交互,这个我之前没做过,因此接下来的时间里会陆续更 新这一些列的博客,记录学习的点滴.第一篇主要是java读取mysql数据库文件.安装及配置文件稍后会上传到我的百度网盘供大家下载.其他的介绍在网 上都可以找到相关的博客,下面直接给出源代码. mysql建立一个名为“vge_whu”的数据库

使用SSH操作Oracle中BLOB大对象

package entity; /** * Bigobject entity. @author MyEclipse Persistence Tools */ public class Bigobject implements java.io.Serializable { // Fields private Integer id; private byte[] tblob; private String filename; // Constructors /** default construct

Java实现对Mysql的图片存取操作

1.MySQL中的BLOB类型 Mysql中可以存储大文件数据,一般使用的BLOB对象.如图片,视频等等. BLOB是一个二进制大对象,可以容纳可变数量的数据.因为是二进制对象,所以与编码方式无关.有4种BLOB类型:TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同. 四种字段类型保存的最大长度如下: TINYBLOB - 255 bytes BLOB - 65535 bytes(64KB) MEDIUMBLOB - 16,777,215 byt

java jdbc操作mysql

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet; public class test {    public static final String DBDRIVER = "com.mysql.jdbc.Driver";    // 定义MySQL数据库的连接地址    public static fi

JAVA操作mysql(如何更加面向对象的操作数据库)

既然谈到面向对象,所以,先把连接信息给搞个对象出来: public class DBInfo { private String driver; private String host; private String port; private String user; private String pwd; private String dataBase; public DBInfo(){ this.driver = "com.mysql.jdbc.Driver"; this.host

Java使用Jdbc操作MySql数据库(一)

这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. 一.首先将mysql-connector-java-5.1.26-bin.jar开发包复制到lib文件夹中,并且Build Path->Add Build Path. 二.创建User类,用于封装从数据库读出来的数据. 1 package com.mylx.database; 2 3 public

Java 操作MySql数据库

Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Java Database Connectivity)是连接Java和数据库的纽带,简单的说,就是Java利用JDBC API屏蔽掉了底层数据库具体实现的差异.对于不同的数据库,Java的操作方式是不同的,这样有两个优点: 简化了访问数据库的程序代码,无须涉及与底层数据库实现相关的细节 可以在同一个Ja