日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jdbc获取clob图片_jdbc方式读取oracle的clob字段实例

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jdbc获取clob图片_jdbc方式读取oracle的clob字段实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可能大家也都習慣了spring和hibernate對CLOB字段的處理,在spring中配置clob的oracle處理句柄,在hibernate中配置映射類型,然后就可以很輕松的以String 的形式處理大字段。

今天我做了個需求,需要以jdbc的方式從mysql導一些備份數據到oracle正式庫,就查了一些資料,最后寫了個例子:

1:首先:寫個連接數據庫的類,里面有返回mysq, oracle連接的方法

public Connection getConn(String flag){

Connection con=null;

try

{

if(flag.equals("1"))

{

Class.forName(“oracle.jdbc.driver.OracleDriver”);

con = DriverManager.getConnection(“jdbc:oracle:thin:@IP:1521:數據庫名字”,"name","password");

}

if(flag.equals("2"))

{

Class.forName("org.gjt.mm.mysql.Driver");

con = DriverManager.getConnection("jdbc:mysql://localhost/數據庫名?user=用戶名&password=密碼&useUnicode=true&characterEncoding=GBK");

}

}

catch(Exception e)

{

e.printStackTrace();

}

return con;

}

2:執行插入操作

public void setData() {

conn = new Conn();

try {

String sqlfrom = "select? p.id,p.content from?table p? order by p.id?? ";

String sqlinsert = "insert into table?? values(?,?)";

con = conn.getConn("2");

stmt = con.createStatement();?//從mysql取出大字段

rs = stmt.executeQuery(sqlfrom);

con = conn.getConn("1");

PreparedStatement pstmt = con.prepareStatement(sqlinsert); //向oracle中插入大字段

int i = 0;

while (rs.next()) {

pstmt.setInt(1, rs.getInt(1));

pstmt.setClob(2, oracle.sql.CLOB.empty_lob());

pstmt.executeUpdate();? //插入時將大字段設為空

this.updateOne(con,rs.getInt(1),rs.getString(2));??//?這里調用然后更新這個大字段

}

rs.close();? //關閉相關連接

pstmt.close();

stmt.close();

con.close();

} catch (Exception e) {

e.printStackTrace();

try

{

con.rollback();

} catch (Exception e1) {

System.out.println("回滾出現異常!");

e1.printStackTrace();

}

}

}

3:該方法實現對應大字段記錄的更新

public void updateOne(Connection con,int id, String content) {

String str = "select t.content from table? t?where t.id=" + id+ "? for update";

try {

//?注意:存取操作開始前,必須用setAutoCommit(false)取消自動提交,否則Oracle將拋出“讀取違反順序”的錯誤。

con.setAutoCommit(false);

stmt = con.createStatement();

ResultSet?? rs_clob = stmt.executeQuery(str);

while (?rs_clob .next()) {

/*?取出clob數據*/

oracle.sql.CLOB clob = (oracle.sql.CLOB)??rs_clob .getClob(1);

/* 向clob中寫入數據*/

clob.putString(1, content);

}

stmt.close();

con.commit();

con.setAutoCommit(true);

con.close();

} catch (Exception e) {

e.printStackTrace();

try

{

con.rollback();

} catch (Exception e1) {

System.out.println("回滾出現異常!");

e1.printStackTrace();

}

}

}

現在就完成了一行記錄的更新。

4:讀clob字段以String 的形式返回(當然也可以將讀到的內容寫入文件,大家改一下就可以了)

/**

* 讀clob字段

* @param con

* @param id

* @return

*/

public String? readClob(Connection con,int id)

{

String content="";

try

{

con.setAutoCommit(false);

stmt=con.createStatement();

ResultSet rs_clob=stmt.executeQuery("select? t.content? from? table t where t.id="+id);

oracle.sql.CLOB contents=null;

while (rs_clob.next())

{????? // 取出CLOB對象

contents= (oracle.sql.CLOB) rs_clob.getClob(1);

}

BufferedReader a = new BufferedReader(contents.getCharacterStream());? //以字符流的方式讀入BufferedReader

String str = "";

while ((str = a.readLine()) != null) {

content = content.concat(str);? //最后以String的形式得到

}

con.commit();

/*

BufferedWriter out = new BufferedWriter(new FileWriter("e:/test.txt"));

out.write(content);//寫入文件

out.close();*/

con.setAutoCommit(true);

con.close();

}catch(Exception e)

{

System.out.println("出現異常");

e.printStackTrace();

try

{

con.rollback();

}

catch (Exception e1)

{

System.out.println("回滾出現異常!");

e1.printStackTrace();

}

}

return content;

}

總結

以上是生活随笔為你收集整理的jdbc获取clob图片_jdbc方式读取oracle的clob字段实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。