回覆列表
  • 1 # 使用者4869851082580

    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;

    }

  • 中秋節和大豐收的關聯?
  • 原神主要玩什麼的?