数据类型与日期问题_访问大段文本数据_二进制类型的数据
/**********************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();
}
}
}
}
}