📄 testlob.java
字号:
checkReader(new CharArrayReader("B\u00f6hlen".toCharArray()), rs.getCharacterStream("C"), -1);
rs.next();
checkReader(getRandomReader(501, 1), rs.getCharacterStream("C"), -1);
Clob clob = rs.getClob("C");
checkReader(getRandomReader(501, 1), clob.getCharacterStream(), -1);
check(clob.length(), 501);
rs.next();
checkReader(getRandomReader(401, 2), rs.getCharacterStream("C"), -1);
checkReader(getRandomReader(1500, 2), rs.getCharacterStream("C"), 401);
clob = rs.getClob("C");
checkReader(getRandomReader(1501, 2), clob.getCharacterStream(), 401);
checkReader(getRandomReader(401, 2), clob.getCharacterStream(), 401);
check(clob.length(), 401);
checkFalse(rs.next());
conn.close();
}
private Connection reconnect(Connection conn) throws Exception {
long time = System.currentTimeMillis();
if (conn != null) {
conn.close();
}
conn = getConnection("lob");
trace("re-connect=" + (System.currentTimeMillis() - time));
return conn;
}
void testUpdateLob() throws Exception {
deleteDb("lob");
Connection conn;
conn = reconnect(null);
PreparedStatement prep = conn
.prepareStatement("CREATE TABLE IF NOT EXISTS p( id int primary key, rawbyte BLOB ); ");
prep.execute();
prep.close();
prep = conn.prepareStatement("INSERT INTO p(id) VALUES(?);");
for (int i = 0; i < 10; i++) {
prep.setInt(1, i);
prep.execute();
}
prep.close();
prep = conn.prepareStatement("UPDATE p set rawbyte=? WHERE id=?");
for (int i = 0; i < 8; i++) {
prep.setBinaryStream(1, getRandomStream(10000, i), 0);
prep.setInt(2, i);
prep.execute();
}
prep.close();
conn.commit();
conn = reconnect(conn);
conn.setAutoCommit(true);
prep = conn.prepareStatement("UPDATE p set rawbyte=? WHERE id=?");
for (int i = 8; i < 10; i++) {
prep.setBinaryStream(1, getRandomStream(10000, i), 0);
prep.setInt(2, i);
prep.execute();
}
prep.close();
prep = conn.prepareStatement("SELECT * from p");
ResultSet rs = prep.executeQuery();
while (rs.next()) {
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
rs.getMetaData().getColumnName(i);
rs.getString(i);
}
}
conn.close();
}
void testLobReconnect() throws Exception {
deleteDb("lob");
Connection conn = reconnect(null);
Statement stat = conn.createStatement();
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, TEXT CLOB)");
PreparedStatement prep;
prep = conn.prepareStatement("INSERT INTO TEST VALUES(1, ?)");
String s = new String(getRandomChars(10000, 1));
byte[] data = s.getBytes("UTF-8");
prep.setBinaryStream(1, new ByteArrayInputStream(data), 0);
prep.execute();
conn = reconnect(conn);
stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT * FROM TEST WHERE ID=1");
rs.next();
checkStream(new ByteArrayInputStream(data), rs.getBinaryStream("TEXT"), -1);
prep = conn.prepareStatement("UPDATE TEST SET TEXT = ?");
s = new String(getRandomChars(10201, 1));
prep.setBinaryStream(1, new ByteArrayInputStream(data), 0);
prep.execute();
conn = reconnect(conn);
stat = conn.createStatement();
rs = stat.executeQuery("SELECT * FROM TEST WHERE ID=1");
rs.next();
checkStream(new ByteArrayInputStream(data), rs.getBinaryStream("TEXT"), -1);
stat.execute("DROP TABLE IF EXISTS TEST");
conn.close();
}
void testLob(boolean clob) throws Exception {
deleteDb("lob");
Connection conn = reconnect(null);
conn = reconnect(conn);
Statement stat = conn.createStatement();
stat.execute("DROP TABLE IF EXISTS TEST");
PreparedStatement prep;
ResultSet rs;
long time;
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, VALUE " + (clob ? "CLOB" : "BLOB") + ")");
int len = getSize(1, 1000);
if (config.networked && config.big) {
len = 100;
}
time = System.currentTimeMillis();
prep = conn.prepareStatement("INSERT INTO TEST VALUES(?, ?)");
for (int i = 0; i < len; i += (i + i + 1)) {
prep.setInt(1, i);
int size = i * i;
if (clob) {
prep.setCharacterStream(2, getRandomReader(size, i), 0);
} else {
prep.setBinaryStream(2, getRandomStream(size, i), 0);
}
prep.execute();
}
trace("insert=" + (System.currentTimeMillis() - time));
traceMemory();
conn = reconnect(conn);
time = System.currentTimeMillis();
prep = conn.prepareStatement("SELECT ID, VALUE FROM TEST");
rs = prep.executeQuery();
while (rs.next()) {
int id = rs.getInt("ID");
int size = id * id;
if (clob) {
Reader rt = rs.getCharacterStream(2);
checkReader(rt, getRandomReader(size, id), -1);
checkReader((Reader) rs.getObject(2), getRandomReader(size, id), -1);
} else {
InputStream in = rs.getBinaryStream(2);
checkStream(in, getRandomStream(size, id), -1);
checkStream((InputStream) rs.getObject(2), getRandomStream(size, id), -1);
}
}
trace("select=" + (System.currentTimeMillis() - time));
traceMemory();
conn = reconnect(conn);
time = System.currentTimeMillis();
prep = conn.prepareStatement("DELETE FROM TEST WHERE ID=?");
for (int i = 0; i < len; i++) {
prep.setInt(1, i);
prep.executeUpdate();
}
trace("delete=" + (System.currentTimeMillis() - time));
traceMemory();
conn = reconnect(conn);
conn.setAutoCommit(false);
prep = conn.prepareStatement("INSERT INTO TEST VALUES(1, ?)");
if (clob) {
prep.setCharacterStream(1, getRandomReader(0, 0), 0);
} else {
prep.setBinaryStream(1, getRandomStream(0, 0), 0);
}
prep.execute();
conn.rollback();
prep.execute();
conn.commit();
conn.createStatement().execute("DELETE FROM TEST WHERE ID=1");
conn.rollback();
conn.createStatement().execute("DELETE FROM TEST WHERE ID=1");
conn.commit();
conn.createStatement().execute("DROP TABLE TEST");
conn.close();
}
void testJavaObject() throws Exception {
deleteDb("lob");
Connection conn = getConnection("lob");
conn.createStatement().execute("CREATE TABLE TEST(ID INT PRIMARY KEY, DATA OTHER)");
PreparedStatement prep = conn.prepareStatement("INSERT INTO TEST VALUES(1, ?)");
prep.setObject(1, new TestLobObject("abc"));
prep.execute();
ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM TEST");
rs.next();
Object oa = rs.getObject(2);
TestLobObject a = (TestLobObject) oa;
Object ob = rs.getObject("DATA");
TestLobObject b = (TestLobObject) ob;
check(a.data, "abc");
check(b.data, "abc");
checkFalse(rs.next());
conn.close();
}
private void checkStream(InputStream a, InputStream b, int len) throws Exception {
// this doesn't actually read anything - just tests reading 0 bytes
a.read(new byte[0]);
b.read(new byte[0]);
a.read(new byte[10], 3, 0);
b.read(new byte[10], 0, 0);
for (int i = 0; len < 0 || i < len; i++) {
int ca = a.read();
a.read(new byte[0]);
int cb = b.read();
check(ca, cb);
if (ca == -1) {
break;
}
}
a.read(new byte[10], 3, 0);
b.read(new byte[10], 0, 0);
a.read(new byte[0]);
b.read(new byte[0]);
a.close();
b.close();
}
private void checkReader(Reader a, Reader b, int len) throws Exception {
for (int i = 0; len < 0 || i < len; i++) {
int ca = a.read();
int cb = b.read();
check(ca, cb);
if (ca == -1) {
break;
}
}
a.close();
b.close();
}
private Reader getRandomReader(int len, int seed) {
return new CharArrayReader(getRandomChars(len, seed));
}
private char[] getRandomChars(int len, int seed) {
Random random = new Random(seed);
char[] buff = new char[len];
for (int i = 0; i < len; i++) {
char ch;
do {
ch = (char) random.nextInt(Character.MAX_VALUE);
// UTF8: String.getBytes("UTF-8") only returns 1 byte for
// 0xd800-0xdfff
} while (ch >= 0xd800 && ch <= 0xdfff);
buff[i] = ch;
}
return buff;
}
private InputStream getRandomStream(int len, int seed) {
Random random = new Random(seed);
byte[] buff = new byte[len];
random.nextBytes(buff);
return new ByteArrayInputStream(buff);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -