使用JDBC處理大資料和大文本
使用JDBC處理大資料
基本概念:大資料也稱為LOB(Large Objects),LOB又分為:clob和blob
Colb用於儲存大文本
Blob 用於儲存位元據,例像、聲音、二進位文
在MySQL中只有blob,沒有clob,mysql儲存大文本用text
Text分為:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
Blob分為:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
使用JDBC處理大文本
對於MySQL中的Text類型,可調用如下方法設定:
PreparedStatement.setCharacterStream(index, reader, length);
//注意length長度須設定,並且設定為int型
//大文本資料的儲存
public void insert(){
Connection con=null;
PreparedStatement st=null;
ResultSet rs=null;
//擷取串連
try {
con=DBManager.getConnection();
String sql="insert into testclob (resume) value(?)";
st=con.prepareStatement(sql);
//從檔案中讀出資料,用流
//擷取指定的流對象--通過反射
//得到該資源檔對象---->擷取路徑
File f=new File("1.txt");
//自動讀取1.txt檔案中的內容,存入資料庫的表中
st.setCharacterStream(1,new FileReader(f), f.length());//給第一個對象設定輸入資料流對象
int result=st.executeUpdate();
if(result>0){
System.out.println("插入成功");
}else{
System.out.println("插入失敗");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//資源釋放
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
DBManager.release(con, st, rs);
}
}
public void find(){
//讀取記錄
Connection con=null;
PreparedStatement st=null;
ResultSet rs=null;
//擷取串連
try {
con=DBManager.getConnection();
String sql="select resume from testclob where id=1";
st=con.prepareStatement(sql);
rs=st.executeQuery();
if(rs.next()){
//如果有返回結果,讀取結果集
/* String str=rs.getString("resume");
System.out.println(str);*/
Reader reader=rs.getCharacterStream("resume");//按照列名讀取,得到的是字元流對象
//每次讀取1024個位元組
char buff[]=new char[1024];
int len=0;
//直接輸出從控制台視窗中顯示讀取出的內容
reader.read(buff);//傳回值是一個實際讀到的位元組數
while((len=reader.read(buff))>0){
System.out.println(new String(buff,0,len));
}
//建立一個檔案,把讀取到的寫入到新檔案中
FileWriter writer=new FileWriter("3.txt");
while((len=reader.read(buff))>0){
writer.write(buff,0,len);
}
writer.close();
reader.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//資源釋放
finally{
DBManager.release(con, st, rs);
}
附加:DBManager.java對資料庫的連結
public class DBManager {
private static String username;
private static String password;
private static String url;
private static String driver;
static{
try{
InputStream in = DBManager.class.getClassLoader().getResourceAsStream("config/dbcp.properties");
Properties prop = new Properties();
prop.load(in);
driver = prop.getProperty("driverClassName");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection()
throws SQLException{
return DriverManager.getConnection(url,
username, password);
}
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch (Exception e) {e.printStackTrace();}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e) {e.printStackTrace();}
st = null;
}
if(conn!=null){
try{
conn.close();
}catch (Exception e) {e.printStackTrace();}
conn = null;
}
}
}