package com.derek.bbs.clob;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.derek.bbs.db.DB;
public class ClobTest{
public static String readBBSContent(Connection conn, int id) {
String ret = "";
String sql = "select cont from bbs where id = " + id;
Statement stmt = DB.createStatement(conn);
ResultSet rs = DB.executeQuery(stmt, sql);
try {
while(rs.next()) {
oracle.sql.CLOB contClob = (oracle.sql.CLOB)rs.getClob("cont");
BufferedReader r = new BufferedReader(contClob.getCharacterStream());
int len = (int) contClob.length();
char[] b = new char[len];
int i = 1;
try {
while((i=r.read(b, 0, b.length)) != -1) {
r.read(b, 0, i);
}
} catch (IOException e) {
e.printStackTrace();
}
ret = new String(b);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(rs);
DB.close(stmt);
DB.close(conn);
}
return ret;
}
@SuppressWarnings("deprecation")
public static void writeBBSContent(Connection conn, int id, String cont) {
String sql = "update bbs set cont = empty_clob() where id = " + id;
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
Statement stmt = DB.createStatement(conn);
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(stmt);
sql = "select cont from bbs where id = " + id + " for update";
stmt = DB.createStatement(conn);
ResultSet rs = DB.executeQuery(stmt, sql);
try{
while(rs.next()) {
oracle.sql.CLOB orclClob = (oracle.sql.CLOB)rs.getClob("cont");
final BufferedWriter writer = new BufferedWriter(orclClob.getCharacterOutputStream());
char[] c = cont.toCharArray();
writer.write(c);
writer.flush();
writer.close();
}
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
DB.close(rs);
DB.close(stmt);
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(conn);
}
public static void main(String[] args) {
System.out.println(readBBSContent(DB.getConnection(), 1));
writeBBSContent(DB.getConnection(), 11, "Clob写入测试");
}
}
Oracle 10g jdbc为oracle自带驱动。测试通过。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.derek.bbs.db.DB;
public class ClobTest{
public static String readBBSContent(Connection conn, int id) {
String ret = "";
String sql = "select cont from bbs where id = " + id;
Statement stmt = DB.createStatement(conn);
ResultSet rs = DB.executeQuery(stmt, sql);
try {
while(rs.next()) {
oracle.sql.CLOB contClob = (oracle.sql.CLOB)rs.getClob("cont");
BufferedReader r = new BufferedReader(contClob.getCharacterStream());
int len = (int) contClob.length();
char[] b = new char[len];
int i = 1;
try {
while((i=r.read(b, 0, b.length)) != -1) {
r.read(b, 0, i);
}
} catch (IOException e) {
e.printStackTrace();
}
ret = new String(b);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DB.close(rs);
DB.close(stmt);
DB.close(conn);
}
return ret;
}
@SuppressWarnings("deprecation")
public static void writeBBSContent(Connection conn, int id, String cont) {
String sql = "update bbs set cont = empty_clob() where id = " + id;
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
Statement stmt = DB.createStatement(conn);
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(stmt);
sql = "select cont from bbs where id = " + id + " for update";
stmt = DB.createStatement(conn);
ResultSet rs = DB.executeQuery(stmt, sql);
try{
while(rs.next()) {
oracle.sql.CLOB orclClob = (oracle.sql.CLOB)rs.getClob("cont");
final BufferedWriter writer = new BufferedWriter(orclClob.getCharacterOutputStream());
char[] c = cont.toCharArray();
writer.write(c);
writer.flush();
writer.close();
}
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
DB.close(rs);
DB.close(stmt);
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(conn);
}
public static void main(String[] args) {
System.out.println(readBBSContent(DB.getConnection(), 1));
writeBBSContent(DB.getConnection(), 11, "Clob写入测试");
}
}
Oracle 10g jdbc为oracle自带驱动。测试通过。