如何使用java在informix中创建临时表?
问题描述:
SampleSQL.sql如何使用java在informix中创建临时表?
CREATE TEMP TABLE_TMP(column1, column2, column3)with NO LOG;
我下面的代码没有创建临时表,但是当我在Informix服务器执行上述SQL也没有问题创建表。
Class.forName("com.informix.jdbc.IfxDriver");
conn = DriverManager.getConnection(url);
//Informix temp table creation
BufferedReader tempScriptReader = new BufferedReader(new FileReader("SampleSQL.sql"));
String str;
StringBuffer tempTableQry = new StringBuffer();
while ((str = tempScriptReader.readLine()) != null) {
tempTableQry.append(str + "\n ");
}
tempScriptReader.close();
stmt = conn.createStatement();
//prepStatement = conn.prepareStatement(tempTableQry.toString());
System.out.println(tempTableQry.toString());
stmt.executeUpdate(tempTableQry.toString());
答
如果您不能将记录插入到此表中,那么您可能尝试使用不同的数据库连接插入它们。临时表仅在其创建连接的生命期间存在。
您的代码很好地执行CREATE TEMP TABLE ...
。你有一些错误,在SQL语句与语法错误从Informix结束:
- 而是在
TABLE_TMP
利用空间下划线的,或者以其他方式替换文本,你应该使用CREATE TEMP TABLE table_name ...
- 您必须提供列类型。取而代之的
column1, column2, column3
使用column1 int, column2 int, column3 int
(当然你也可以与其他SQL类型更换int
)
我测试你的代码:
CREATE TEMP TABLE TABLE_TMP(column1 int, column2 int, column3 int) with NO LOG;
和它的作品。我还测试了你可以插入到这个表:
...
stmt.executeUpdate(tempTableQry.toString());
for (int i = 0; i < 3; ++i) {
int r = stmt.executeUpdate("INSERT INTO TABLE_TMP (column1, column2, column3) VALUES(" + i + ", " + i + ", " + i + ")");
System.out.println("execute result: " + r);
}
Statement sq = conn.createStatement();
ResultSet rs = sq.executeQuery("SELECT COUNT(*) FROM TABLE_TMP");
rs.next();
int count = rs.getInt(1);
System.out.println("record count: " + count);
我的结果:
CREATE TEMP TABLE TABLE_TMP(column1 int, column2 int, column3 int) with NO LOG;
execute result: 1
execute result: 1
execute result: 1
record count: 3
+0
它工作正常。谢谢Michal – DBest
如何'stmt.executeUpdate()'报告错误?你有没有看过它报告的错误?为什么'executeUpdate()'?没有一个简单的'executeImmediate()'?您显示的文件中的SQL究竟是什么?如果是这样,你错过了列的类型信息。 –
嗨乔纳森,谢谢你的回应。 stmt.executeUpdate()不会给出任何错误。但是当我尝试将值插入临时表(此处为TABLE_TMP)时,系统会抛出一个错误,指出“指定的表不在数据库中”。看来executeUpdate不会创建临时表。任何对此的帮助表示赞赏。 – DBest
不知道 - 我写了足够少的Java,没有使用JDBC的代码。本教程是否在JDBC中使用['executeQuery()'vs'executeUpdate()'vs execute()'](http://javaconceptoftheday.com/difference-between-executequery-executeupdate-execute-in-jdbc /)的帮助呢? AFAICT,你应该没问题。你打印出你传递给'executeUpdate()'的字符串吗? –