数据类型与日期问题_访问大段文本数据_二进制类型的数据
/**********************java.util.Date转成java.sql.Date存储****************************************/
/**********************用jdbc存储大段文本数据(mysql中字段类型为text)****************************************/
/**********************用jdbc存储二进制数据(mysql中字段类型为BLOB)****************************************/
/**********************java.sql.Date转成java.util.Date输出****************************************/
/**********************用jdbc输出大段文本数据(流方式)****************************************/
/**********************用jdbc输出二进制数据(流方式)****************************************/
-- Table "clob_test" DDL CREATE TABLE `clob_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `birthday` date DEFAULT NULL, `big_text` text, `big_bit` longblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=gbk;
ClobTest.java
package com.dwt1220; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; public class ClobTest { public static void main(String[] args) throws Exception { create(new Date()); read(); } static void create(Date date) throws SQLException, IOException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); // 3.创建语句 String sql="insert into clob_test(birthday,big_text,big_bit)values(?,?,?)"; ps =conn.prepareStatement(sql); /**********************java.util.Date转成java.sql.Date存储****************************************/ ps.setDate(1, new java.sql.Date(new Date().getTime())); /**********************用jdbc存储大段文本数据(mysql中字段类型为text)****************************************/ File file=new File("src/com/dwt1220/JdbcUtils.java"); Reader reader=new BufferedReader(new FileReader(file)); //不支持中文ps.setAsciiStream(2,reader,(int)file.length()) //输入大数据,支持中文 ps.setCharacterStream(2,reader,(int)file.length()); /**********************用jdbc存储二进制数据(mysql中字段类型为BLOB)****************************************/ File fileImg=new File("111.jpg"); FileInputStream fis = new FileInputStream(fileImg); //ps.setBinaryStream(3,fis,fis.available());报语法错误,使用下面3行代码来实现。 byte buf[] = new byte[fis.available()]; fis.read(buf); ps.setBytes(3,buf); // 4.执行语句 int i=ps.executeUpdate(); // in.close(); System.out.println("i="+i); } finally { JdbcUtils.free(rs, ps, conn); } } static void read() throws SQLException, IOException { Connection conn = null; PreparedStatement ps = null;//使用PreparedStatement防止SQL注入 ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); // 3.创建语句 String sql="select birthday,big_text,big_bit from clob_test"; ps = conn.prepareStatement(sql); // 4.执行语句 rs = ps.executeQuery(); // 5.处理结果 while (rs.next()) { /**********************java.sql.Date转成java.util.Date输出****************************************/ System.out.println(rs.getDate("birthday") + "\t"//java.sql.Date继承自java.util.Date。 + rs.getObject("big_text")); /**********************用jdbc输出大段文本数据(流方式)****************************************/ Reader reader=null; //Clob clob=rs.getClob("big_text"); //reader=clob.getCharacterStream(); //or reader=rs.getCharacterStream("big_text"); File file=new File("JdbUtils_bak.java"); Writer writer=new BufferedWriter(new FileWriter(file)); char[] buff=new char[1024]; for(int i=0;(i=reader.read(buff))>0;){ writer.write(buff,0,i); } writer.close(); reader.close(); /**********************用jdbc输出二进制数据(流方式)****************************************/ InputStream in=null; // Blob blob=rs.getBlob("big_bit"); // in=blob.getBinaryStream(); // or in=rs.getBinaryStream("big_bit"); File img=new File("111_bak.jpg"); OutputStream out=new BufferedOutputStream(new FileOutputStream(img)); byte[] buffImg=new byte[1024]; for(int i=0;(i=in.read(buffImg))>0;){ out.write(buffImg,0,i); } out.close(); in.close(); } } finally { JdbcUtils.free(rs, ps, conn); } } }
JdbcUtils.java
package com.dwt1220; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Connection; public final class JdbcUtils { private static String url = "jdbc:mysql://localhost:3306/jdbc"; private static String user = "root"; private static String password = "123456"; private JdbcUtils() { } static {// 静态代码快,只执行一次。 try { // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } public static void free(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }