3

我试图用 Java 插入我的 postgres 数据库。我的本地数据库有默认配置。

我想将一些数据放在一个表中,但我遇到了一些问题。

这是代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public static void main(String[] args) {

    Connection con = null;
    PreparedStatement pst = null;

    String url = "jdbc:postgresql://localhost/postgres";
    String user = "postgres";
    String password = "thanassis";

    try {


        con = DriverManager.getConnection(url, user, password);

        String stm = "INSERT INTO TEST2(ID) VALUES(?)";
        pst = con.prepareStatement(stm);
        pst.setInt(1, 1);

        pst.executeUpdate(); 

    } catch (SQLException ex) {
        Logger lgr = Logger.getLogger(PreparedStatement.class.getName());
        lgr.log(Level.SEVERE, ex.getMessage(), ex);

    } finally {

        try {
            if (pst != null) {
                pst.close();
            }
            if (con != null) {
                con.close();
            }

        } catch (SQLException ex) {
            Logger lgr = Logger.getLogger(PreparedStatement.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        }
    }
}

这里有例外

严重:错误:关系“test2”不存在
  职位:13
org.postgresql.util.PSQLException:错误:关系“test2”不存在
  职位:13
    在 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
    在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
    在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
    在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
    在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:332)
    在 test.Test.main(Test.java:30)
4

3 回答 3

4

你的桌子叫做TEST2not test2。显然,您使用双引号创建了它,这使得 Postgres(和其他符合标准的 DBMS)区分大小写。

因此,您现在必须在每次引用表时用双引号将名称括起来。

String stm = "INSERT INTO \"TEST2\"(ID) VALUES(?)";

很可能这不是您想要的,因此只需重新创建表而不在标识符周围使用双引号:

CREATE TABLE test2
(
  ...
)

创建一个不同的表:

CREATE TABLE "test2"
(
  ...
)

如果您不想重新创建表,可以重命名它们:

alter table "TEST2" rename to test2;
于 2012-10-12T20:20:40.873 回答
1

表 test2 不存在。尝试登录 PostgreSQL 并检查此表。

您可以使用命令行实用程序列出数据库中的所有现有表

psql -d postgres
\dt
于 2012-10-12T20:10:21.477 回答
0

检查您在其中创建表 test2 的架构。如果它是不在搜索路径中的模式之一,那么您有两个选择:-

  • 将架构添加到您的 search_path(文件 postgres.conf 中的逗号分隔列表)
  • 通过在表名前面加上模式名称和点来引用表。例如,如果相关表 test2 在 my_schema 中,那么您的查询应该是
    insert into my_schema.test2(ID) values(?).
于 2017-08-29T18:49:21.500 回答