表存在时的SQLexception

时间:2012-05-18 12:06:01

标签: java sql database postgresql jdbc

我想用JDBC键入一个命令来创建一个表,但是在第一次编译之后,当已经生成了table时,每个下一个都抛出异常。我不明白这是怎么可能的,因为我在那里放了[IF NOT EXISTS]术语,所以不应该有SQL错误。

public class Test 
{
    public static void main(String[] args) 
    {
        try
        {
            Connection conn = BazaDanych.Polacz();
            Statement stat = conn.createStatement();

           String command = "CREATE TABLE [IF NOT EXISTS] testowatabela2 (id INTEGER, wartosc DOUBLE PRECISION);";

            stat.execute(command);
        }
        catch(SQLException e)
        {
            System.out.println("SQL Exception in Test");
        }
    }
}

2 个答案:

答案 0 :(得分:4)

包含IF NOT EXISTS子句的括号可能从文档中逐字逐句: http://www.postgresql.org/docs/9.1/static/sql-createtable.html

但它们不得出现在实际的CREATE TABLE语句中,因为括号表示该子句是可选

另一件需要考虑的事情是IF NOT EXISTS是PostgreSQL 9.1的一个新功能,所以它会因旧版本而失败。如果您不确定所使用的版本,请在SQL中运行:select version()

答案 1 :(得分:0)

IF NOT EXISTS (SELECT 1 
           FROM sysobjects 
           WHERE xtype='u' AND name='testowatabela2')
    CREATE TABLE testowatabela2 (id INTEGER, wartosc DOUBLE PRECISION)

修改

离开[IF NOT EXISTS]部分。根据{{​​3}},表格是否存在并不重要。