package org.oklab;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.*;
/**
* This class check Oracle's SQL length.
* @author satoshiokita
* @version 1.0
public class TestPrepareStatement {
private static final int PARAM_SIZE = 70;
public static void main(String [] args) {
TestPrepareStatement test =
new TestPrepareStatement();
test.run();
}
private void run() {
Connection conn = null;
try {
//
initialize
Class.forName("oracle.jdbc.OracleDriver");
conn
= DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:sid",
"user","password");
printMetaData(conn);
//
create query
StringBuffer sb = new StringBuffer();
sb.append("select ");
sb.append("?,?,?,?,?,?,?,?,?,?,"); // 10
sb.append("?,?,?,?,?,?,?,?,?,?,");
sb.append("?,?,?,?,?,?,?,?,?,?,");
sb.append("?,?,?,?,?,?,?,?,?,?,");
sb.append("?,?,?,?,?,?,?,?,?,?,");
sb.append("?,?,?,?,?,?,?,?,?,?,");
sb.append("?,?,?,?,?,?,?,?,?,?"); // 70
sb.append(" from dual");
PreparedStatement stmt =
conn.prepareStatement(sb.toString());
String testData = createTestData(conn);
//
set param
for
(int j = 0; j < PARAM_SIZE; j++) {
stmt.setString(j+1, testData);
}
//
execute
ResultSet rs = stmt.executeQuery();
String resultStr = null;
while (rs.next()) {
for (int k = 0; k < PARAM_SIZE; k++) {
resultStr += rs.getString(k+1);
}
}
//
output
System.out.println("RESULT DATA:");
System.out.println(resultStr);
System.out.println(resultStr.getBytes().length);
rs.close();
stmt.close();
conn.close();
} catch
(ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
private void printMetaData(Connection conn) throws
SQLException {
DatabaseMetaData meta =
conn.getMetaData();
System.out.println("max
statement length:"
+
meta.getMaxStatementLength());
}
private String createTestData(Connection conn) {
// create one line data
StringBuffer sb = new
StringBuffer();
for (int i = 0; i < 130;
i++) {
sb.append("abcde12345");
}
// print data size
int oneLineBytes =
sb.toString().getBytes().length;
System.out.println("one line
data size:"
+
(oneLineBytes * PARAM_SIZE));
return sb.toString();
}
}