createTableIfNotExists错误 - 关系已存在

时间:2014-09-24 19:57:35

标签: java sqlite postgresql ormlite

在我的后端:

//create ConnectioSource
private static final String DB_NAME = "development";
private ConnectionSource connectionSource;
private String databaseUrl = "jdbc:postgresql://localhost:5432/" + DB_NAME;

public ConnectionSource getConnectionSource() {
    try {
        Class.forName("org.postgresql.Driver");
        connectionSource = new JdbcConnectionSource(databaseUrl, "user", "333444");
        return connectionSource;
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

但是当我尝试重新启动后端时,我收到错误

  

"由以下原因引起:org.postgresql.util.PSQLException:错误:关系" buyer_users"已经存在"

ConnectionSource connectionSource = dbHelper.getConnectionSource();
TableUtils.createTableIfNotExists(connectionSource, BuyerUser.class);

当我使用SQLite db时,方法createTableIfNotExists正常工作,但是当我使用postgres时会发生什么?

更新

我的解决方案:

 List<String> tablesList = new ArrayList<String>();
 DatabaseMetaData md = connection.getMetaData();
 ResultSet rs = md.getTables(null, null, "%", null);

 while (rs.next()) {
     tablesList.add(rs.getString(3));
 }

 if(!tablesList.contains("buyer_users"))
     TableUtils.createTableIfNotExists(connectionSource, BuyerUser.class);

1 个答案:

答案 0 :(得分:0)

我今天遇到了与OrmLite 4.48和PostgreSQL 9.1相同的问题。

我最终做的是以下内容:

// create the table if it does not exist
if(!dao.isTableExists()) {
    // use dao.isTableExists() first, as createTableIfNotExists() fails with postgreSQL 9.1 (OrmLite 4.48)
    TableUtils.createTableIfNotExists(_pooledConnectionSrc, entityClass);
}

显然,此代码假定您对创建相应的DAO实例感兴趣。我的,在我的项目中。要创建与您的表对应的DAO,请参阅&#34; createDao&#34;来自DaoManager类的方法。

(在PgSQL 9.1和MySQL 5.5上都进行了代码测试)