插入和讀取blob和clob型別資料
阿新 • • 發佈:2019-01-24
/******************blob*********************/
public class Blob_Test {
//建立表
@Test
public void create(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs = null;
JDBCUtils utils = JDBCUtils.getInstance();
String sql ="create table Blob_Test(id int not null auto_increment,image BLOB,PRIMARY KEY(ID))" ;
try {
conn=utils.getConnection();
ps = conn.prepareStatement(sql);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
}
//插入Blob資料
@Test
public void insert() throws IOException{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs = null;
JDBCUtils utils = JDBCUtils.getInstance();
//得到一個檔案
File file = new File("src/2.jpg");
//建立位元組輸入流
InputStream in = new FileInputStream(file);
//建立sql語句
String sql ="insert into Blob_Test(image) values (?)";
try {
conn=utils.getConnection();
ps = conn.prepareStatement(sql);
//為?賦值 使用setBinaryStream方法
ps.setBinaryStream(1, in, file.length());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
}
//讀取資料庫blob資料
@Test
public void read() throws IOException{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs = null;
JDBCUtils utils = JDBCUtils.getInstance();
//建立一個檔案
File file = new File("BeautifulGirl.jpg");
//建立一個位元組輸出流
OutputStream out = new FileOutputStream(file);
//建立sql語句,從資料庫查出blob資料
String sql ="select image from Blob_Test";
try {
conn=utils.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//建立一個數組
byte b[] = new byte[1024];
while(rs.next()){
//得到結果集中的blob資料
Blob blob = rs.getBlob("image");
//得到一個輸入流
InputStream in = blob.getBinaryStream();
int len;
while((len=in.read(b))!=-1){
//將資料流的資料寫到輸出流
out.write(b, 0, len);
}
//關閉流
out.close();
in.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
}
}
/******************clob*********************/
public class Clob_Test {
//建立表
@Test
public void create(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs =null;
JDBCUtils utils = JDBCUtils.getInstance();
try {
String sql = "create table Clob_Test(id int not null auto_increment,text longtext,primary key(id))";
conn = utils.getConnection();
ps= conn.prepareStatement(sql);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
}
//向資料庫插入clob資料
@Test
public void insert() throws IOException{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs =null;
JDBCUtils utils = JDBCUtils.getInstance();
//將一個檔案插入到資料庫
File file = new File("src/com/hdbc/day01/JDBCUtils.java");
//建立一個字元輸入緩衝流
Reader reader = new BufferedReader(new FileReader(file));
try {
String sql = "insert into Clob_Test(text) values (?)";
conn = utils.getConnection();
ps= conn.prepareStatement(sql);
//以字元流的形式將檔案存到資料庫
ps.setCharacterStream(1, reader,file.length());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
}
//從資料庫讀取clob資料
@Test
public void read() throws IOException{
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs =null;
JDBCUtils utils = JDBCUtils.getInstance();
//將clob資料讀到檔案中
File file = new File("JDBCUtils_bak.java");
//建立一個字元輸出緩衝流
Writer writer = new BufferedWriter(new FileWriter(file));
char ch[] = new char[1024];
try {
String sql = "select text from Clob_Test";
conn = utils.getConnection();
ps= conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
//兩種方式:
//一種是先得到資料clob資料,
// Clob clob = rs.getClob("text");
//再得帶字元輸入流
// Reader reader = clob.getCharacterStream();
//第二種是可以直接得到clob資料的輸入流
Reader reader = rs.getCharacterStream("text");
for(int i=0;(i=reader.read(ch))>0;){
//將資料寫到目標檔案中
writer.write(ch, 0, i);
}
writer.close();
reader.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
utils.free(conn, ps, rs);
}
}
}