博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC处理文本和二进制文件
阅读量:6958 次
发布时间:2019-06-27

本文共 5846 字,大约阅读时间需要 19 分钟。

        JDBC支持文本(CLOB)和二进制(BLOB)文件的处理,比如要往数据库里存取文章或者图片。这都是用流的思想来解决的。

        来两个Demo看看JDBC是怎么操作文本和二进制文件的。

        CLOB:

 

package com.wxisme.jdbcclob;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.Reader;import java.sql.Clob;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;/** * 数据库中对文本对象的操作。 * @author wxisme * */public class CLOBTest {	/**	 * 标准时间对象转换成long	 * @param date	 * @return long	 */	public static long dateTolong(String date) {		DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");		long time = 0;		try {			time = format.parse(date).getTime();		} catch (ParseException e) {			e.printStackTrace();		}				return time;	}	/**	 * 向数据库中插入一条带有Clob文本对象字段的记录	 */	public void test1() {		Connection conn = null;		PreparedStatement ps = null;				try {			Class.forName("com.mysql.jdbc.Driver");		} catch (ClassNotFoundException e) {			e.printStackTrace();		}				String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";		try {			conn = DriverManager.getConnection(c, "root", "1234");			String sql = "insert into student (name,pswd,time,stime,myImg) values(?,?,?,?,?)";			ps = conn.prepareStatement(sql);						java.sql.Date date = new java.sql.Date(dateTolong("2015-5-14 9:25:32"));			Timestamp stime = new Timestamp(dateTolong("2015-5-14 9:25:32"));			ps.setString(1, "张三");			ps.setString(2, "123456");			ps.setDate(3, date);			ps.setTimestamp(4, stime);			ps.setClob(5, new FileReader("e:" +File.separator + "a.txt"));			ps.executeUpdate();					} catch (SQLException e) {			e.printStackTrace();		} catch (FileNotFoundException e) {			e.printStackTrace();		}	}	public static void main(String[] args) {				//从数据库中读取Clob文本对象并输出		Connection conn = null;		PreparedStatement ps = null;		ResultSet rs = null;		Reader r = null;				try {			Class.forName("com.mysql.jdbc.Driver");		} catch (ClassNotFoundException e) {			e.printStackTrace();		}				String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";		try {			conn = DriverManager.getConnection(c, "root", "1234");			String sql = "select myImg from student where id=?";			ps = conn.prepareStatement(sql);			ps.setInt(1, 1);						rs = ps.executeQuery();						while(rs.next()) {				Clob clob = rs.getClob("myImg");				r = clob.getCharacterStream();				int t = 0;				while((t=r.read()) != -1) {					System.out.println((char)t);				}							}								} catch (SQLException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		}finally {			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}			try {				ps.close();			} catch (SQLException e) {				e.printStackTrace();			}			try {				r.close();			} catch (IOException e) {				e.printStackTrace();			}						try {				conn.close();			} catch (SQLException e) {				e.printStackTrace();			}		}			}}

 

 BLOB:

package com.wxisme.jdbcblob;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.sql.Blob;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * 数据库操作二进制文件 Blob类的使用 * @author wxisme * */public class BLOBTest {	/**	 * 向数据库中插入二进制	 */	public void test1() {		Connection conn = null;		PreparedStatement ps = null;				try {			Class.forName("com.mysql.jdbc.Driver");		} catch (ClassNotFoundException e) {			e.printStackTrace();		}				String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";		try {			conn = DriverManager.getConnection(c, "root", "1234");			String sql = "insert into student (img) values(?)";			ps = conn.prepareStatement(sql);			ps.setBlob(1, new FileInputStream("e:" + File.separator + "b.jpg"));						ps.executeUpdate();								} catch (SQLException e) {			e.printStackTrace();		} catch (FileNotFoundException e) {			e.printStackTrace();		}finally {			try {				ps.close();			} catch (SQLException e) {				e.printStackTrace();			}			try {				conn.close();			} catch (SQLException e) {				e.printStackTrace();			}		}	}	public static void main(String[] args) {				//从数据库中读取二进制文件并恢复		Connection conn = null;		PreparedStatement ps = null;		ResultSet rs = null;		InputStream r = null;		OutputStream os = null;		try {			Class.forName("com.mysql.jdbc.Driver");		} catch (ClassNotFoundException e) {			e.printStackTrace();		}				String c = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8";		try {			conn = DriverManager.getConnection(c, "root", "1234");			String sql = "select img from student where id=?";			ps = conn.prepareStatement(sql);			ps.setInt(1, 3);			rs = ps.executeQuery();			 			os = new FileOutputStream(new File("e:/e.jpg"));			while(rs.next()) {				Blob blob = rs.getBlob("img");				r = blob.getBinaryStream();				int t = 0;				while((t=r.read()) != -1) {					os.write(t);				}							}								} catch (SQLException e) {			e.printStackTrace();		} catch (FileNotFoundException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		}finally {			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}			try {				ps.close();			} catch (SQLException e) {				e.printStackTrace();			}			try {				r.close();			} catch (IOException e) {				e.printStackTrace();			}						try {				conn.close();			} catch (SQLException e) {				e.printStackTrace();			}						try {				os.close();			} catch (IOException e) {				e.printStackTrace();			}		}	}}

 

转载于:https://www.cnblogs.com/wxisme/p/4506485.html

你可能感兴趣的文章
MikroTik RouterOS旧版本下载地址收集
查看>>
嵌入式软件开发工程师谈软件架构的设计
查看>>
./configure、make、make install 命令详解
查看>>
Laravel Response
查看>>
【Java入门提高篇】Day24 Java容器类详解(七)HashMap源码分析(下)
查看>>
[20180417]使用10046事件需要什么权限.txt
查看>>
如果centos7添加新网卡,系统不识别的解决办法
查看>>
JMX监控zookeeper
查看>>
Anaconda 2019.03 发布,Python 跨平台科学计算软件
查看>>
JS中遍历语法的比较
查看>>
读书笔记 effective c++ Item 15 在资源管理类中提供对原生(raw)资源的访问
查看>>
《C++ Primer》学习笔记:3.3.3其他vector操作
查看>>
NetBeans的(默认)快捷键
查看>>
年薪1美金还打N份工,我的收入终于超过马云了
查看>>
中国实体新气象:失之电商,收之“+互联网”
查看>>
W3C 宣布:WebAuthn 成为正式 Web 标准
查看>>
智能机器人登陆eSmart!或制造玩具市场新“痛点”
查看>>
调查显示,大多数 Java 开发人员不希望学习新语言
查看>>
想练球却没人怎么办?找Trainerbot乒乓球机器人!
查看>>
融入CMMI管理思想的计算机化系统验证
查看>>