java - createTableIfNotExists 错误 - 关系已存在

标签 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;
}

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

"Caused by: org.postgresql.util.PSQLException: ERROR: relation "buyer_users" already exist"

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

当我使用 SQLite 数据库时,方法 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);

最佳答案

我今天在 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,请参阅 DaoManager 类中的“createDao”方法。

(代码在 PgSQL 9.1 和 MySQL 5.5 上测试)

关于java - createTableIfNotExists 错误 - 关系已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025405/

相关文章:

Java Swing - 单击形状来更改其颜色

Java try catch for do while 循环不循环

c# - SQL查询的转换结果-System.InvalidCastException

sql - 如何使用用户名和密码打开数据库连接

Java:使用属性文件中的键名称而不使用硬编码字符串作为键

java - 如何在现有 Activity 中画线?

java - SQLite onUpgrade 删除和添加列

sql - 在swift中通过命令行重建SQL数据库

sql - 在 sql 中,计算日期部分与组查询中的日期查找表

php - pg_connect 使我的 php 脚本崩溃