所以我使用连接创建JDBC程序。这是我第一次熟悉这种编程,所以如果我的问题出现在" dumb",请原谅。但是我一直坚持这个问题。我创建了4个新表。它编译得很好但是当我运行它时,我得到一个"错误:关系"笑话"已存在"。当我删除createTableJoke准备语句时,我的礼物表会出现相同的错误("错误:关系"礼物"已存在")。我的所有陈述都在继续。我做错了什么,为什么PostgreSQL会这样做的原因是什么?我在下面提供了我的代码:
private static void createTables() throws SQLException {
PreparedStatement createTableJoke = null;
PreparedStatement createTableGift = null;
PreparedStatement createTableHat = null;
PreparedStatement createTableCracker = null;
Connection conn = null;
try {
conn = getDBConnection();
createTableJoke = conn.prepareStatement("CREATE TABLE Joke ( jid INTEGER PRIMARY KEY, joke CHAR(200) NOT NULL, royalty FLOAT NOT NULL);");
createTableJoke.executeUpdate();
createTableGift = conn.prepareStatement("CREATE TABLE Gift ( gid INTEGER PRIMARY KEY, description CHAR(100) NOT NULL, price FLOAT NOT NULL);");
createTableGift.executeUpdate();
createTableHat = conn.prepareStatement("CREATE TABLE Hat ( hid INTEGER PRIMARY KEY, description CHAR(100) NOT NULL, price FLOAT NOT NULL);");
createTableHat.executeUpdate();
createTableCracker = conn.prepareStatement("CREATE TABLE Cracker (cid INTEGER PRIMARY KEY, name CHAR(20) NOT NULL, jid INTEGER REFERENCES Joke(jid), gid INTEGER REFERENCES Gift(gid), hid INTEGER REFERENCES Hat(hid), saleprice NUMERIC CHECK (saleprice > 0), quantity INTEGER NOT NULL);");
createTableCracker.executeUpdate();
} catch (SQLException e){
System.out.println(e.getMessage());
}
finally {
if ((createTableJoke != null) && (createTableGift != null) && (createTableHat != null) && (createTableCracker != null)){
createTableJoke.close();
createTableGift.close();
createTableHat.close();
createTableCracker.close();
}
if (conn != null) {
conn.close();
}
}
}
答案 0 :(得分:0)
这种错误意味着已经创建了所有这些表。使用pgAdmin(在Microsoft Windows操作系统上,它通常与PostgreSQL安装一起使用)或psql客户端连接到数据库并检查表是否存在。
答案 1 :(得分:0)
有两种情况:
如果有现有表格,您不关心保留现有表格。在这种情况下,在创建之前发出“DROP TABLE IF EXISTS Joke”。这将确保删除表,当表不存在时,表不会失败。
您关心表格的现有内容。在这种情况下,发出“CREATE TABLE IF NOT NOT EXISTS Joke”...而不是普通的CREATE TABLE。这将确保表存在,如果它已经存在,则不会创建表。另请注意,如果更改create语句中的结构并且表存在,则结构中的更改不适用。