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 に答える