在mysql数据库中长文本Text类型的数据不能直接赋值给Java.lang.String
1、向数据库写入二进制数据
package org.bdqn.Ch01;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @描述: JDBC 处理二进制数据类型
* @作者:刘运发
* @创建时间:2018年3月30日 上午11:41:45
* @版本:V1.0
*/
public class TestBlob {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Reader r = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/OA", "root", "root");
ps = conn
.prepareStatement("insert into UserInfo (username,myInfo,headImg) values (?,?,?) ");
ps.setObject(1, "王欣");
// 将程序中的符串输入到数据库的CLOB字段中
ps.setClob(2, new BufferedReader(new InputStreamReader(
new ByteArrayInputStream("王欣,毕业于南京邮电大学, 深圳市点石软件有限公司及深圳市快播科技有限公司创始人[1] ,曾任深圳市龙脉信息股份有限公司下属电信合资公司副总经理、深圳市点石软件有限公司CEO、上海盛大网络发展有限公司SDO部门助理总监、 深圳市快播科技有限公司 CEO等职".getBytes()))));
/* 将文本文件内容直接输入到数据库中
ps.setClob(2, new FileReader(new File("h:/a.txt")));
*/
// 将二进制大文件写入数据库
ps.setBlob(3, new FileInputStream("h:/wangxin.png"));
int i = ps.executeUpdate();
if (i > 0) {
System.out.println("添加成功");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (r != null) {
r.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2、从数据库中读取二进制数据
package org.bdqn.Ch01;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Blob;
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 com.sun.corba.se.spi.orbutil.fsm.Input;
/**
*
* @描述: JDBC 处理二进制数据类型
* @作者:刘运发
* @创建时间:2018年3月30日 上午11:41:45
* @版本:V1.0
*/
public class TestBlob {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Reader r = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/OA", "root", "root");
// 从数据库读取二进制数据
ps = conn.prepareStatement("select * from UserInfo where userId=?");
ps.setObject(1, 5);
rs = ps.executeQuery();
while(rs.next()){
// 通过I/O流进行类型的转换
Blob b = rs.getBlob("headImg");
InputStream is = b.getBinaryStream();
FileOutputStream os = new FileOutputStream("h:/CopyMyHeadImg.jpg");
int temp = 0;
// 写入指定位置
while((temp=is.read())!=-1){
os.write(temp);
}
Clob c = rs.getClob("myInfo");
// 将clob转换成字节流
r = c.getCharacterStream();
int temp1 = 0;
// IO 读取
while ((temp1 = r.read()) != -1) {
System.out.print((char) temp);
}
/*
clob提供了直接转换成String的方法
String content= c.getSubString(1,(int)c.length);
*/
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (r != null) {
r.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
1、向数据库写入二进制数据
package org.bdqn.Ch01;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @描述: JDBC 处理二进制数据类型
* @作者:刘运发
* @创建时间:2018年3月30日 上午11:41:45
* @版本:V1.0
*/
public class TestBlob {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Reader r = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/OA", "root", "root");
ps = conn
.prepareStatement("insert into UserInfo (username,myInfo,headImg) values (?,?,?) ");
ps.setObject(1, "王欣");
// 将程序中的符串输入到数据库的CLOB字段中
ps.setClob(2, new BufferedReader(new InputStreamReader(
new ByteArrayInputStream("王欣,毕业于南京邮电大学, 深圳市点石软件有限公司及深圳市快播科技有限公司创始人[1] ,曾任深圳市龙脉信息股份有限公司下属电信合资公司副总经理、深圳市点石软件有限公司CEO、上海盛大网络发展有限公司SDO部门助理总监、 深圳市快播科技有限公司 CEO等职".getBytes()))));
/* 将文本文件内容直接输入到数据库中
ps.setClob(2, new FileReader(new File("h:/a.txt")));
*/
// 将二进制大文件写入数据库
ps.setBlob(3, new FileInputStream("h:/wangxin.png"));
int i = ps.executeUpdate();
if (i > 0) {
System.out.println("添加成功");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (r != null) {
r.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2、从数据库中读取二进制数据
package org.bdqn.Ch01;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Blob;
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 com.sun.corba.se.spi.orbutil.fsm.Input;
/**
*
* @描述: JDBC 处理二进制数据类型
* @作者:刘运发
* @创建时间:2018年3月30日 上午11:41:45
* @版本:V1.0
*/
public class TestBlob {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Reader r = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/OA", "root", "root");
// 从数据库读取二进制数据
ps = conn.prepareStatement("select * from UserInfo where userId=?");
ps.setObject(1, 5);
rs = ps.executeQuery();
while(rs.next()){
// 通过I/O流进行类型的转换
Blob b = rs.getBlob("headImg");
InputStream is = b.getBinaryStream();
FileOutputStream os = new FileOutputStream("h:/CopyMyHeadImg.jpg");
int temp = 0;
// 写入指定位置
while((temp=is.read())!=-1){
os.write(temp);
}
Clob c = rs.getClob("myInfo");
// 将clob转换成字节流
r = c.getCharacterStream();
int temp1 = 0;
// IO 读取
while ((temp1 = r.read()) != -1) {
System.out.print((char) temp);
}
/*
clob提供了直接转换成String的方法
String content= c.getSubString(1,(int)c.length);
*/
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (r != null) {
r.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}