如何使用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()); 
+0

如何'stmt.executeUpdate()'报告错误?你有没有看过它报告的错误?为什么'executeUpdate()'?没有一个简单的'executeImmediate()'?您显示的文件中的SQL究竟是什么?如果是这样,你错过了列的类型信息。 –

+0

嗨乔纳森,谢谢你的回应。 stmt.executeUpdate()不会给出任何错误。但是当我尝试将值插入临时表(此处为TABLE_TMP)时,系统会抛出一个错误,指出“指定的表不在数据库中”。看来executeUpdate不会创建临时表。任何对此的帮助表示赞赏。 – DBest

+0

不知道 - 我写了足够少的Java,没有使用JDBC的代码。本教程是否在JDBC中使用['executeQuery()'vs'executeUpdate()'vs execute()'](http://javaconceptoftheday.com/difference-between-executequery-executeupdate-execute-in-jdbc /)的帮助呢? AFAICT,你应该没问题。你打印出你传递给'executeUpdate()'的字符串吗? –

如果您不能将记录插入到此表中,那么您可能尝试使用不同的数据库连接插入它们。临时表仅在其创建连接的生命期间存在。

您的代码很好地执行CREATE TEMP TABLE ...。你有一些错误,在SQL语句与语法错误从Informix结束:

  1. 而是在TABLE_TMP利用空间下划线的,或者以其他方式替换文本,你应该使用CREATE TEMP TABLE table_name ...
  2. 您必须提供列类型。取而代之的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