Postgres with Java I can't insert data

2019-07-07 02:54发布

I tried to make an insert to my postgres database with Java. I have default configuration for my local database.

I want to put some data in a table and I have some issues.

Here is the code :

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);
        }
    }
}

And here the exceptions

SEVERE: ERROR: relation "test2" does not exist
  Position: 13
org.postgresql.util.PSQLException: ERROR: relation "test2" does not exist
  Position: 13
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:332)
    at test.Test.main(Test.java:30)

3条回答
对你真心纯属浪费
2楼-- · 2019-07-07 03:04

Table test2 doesn't exist. Try to login to PostgreSQL and check this table.

You can list all existing tables in the database with command line utility

psql -d postgres
\dt
查看更多
走好不送
3楼-- · 2019-07-07 03:20

Check for the schema in which you create the table test2. If it is one of the schemas not in the search path, then you have two options:-

  • Add the schema to your search_path(comma separated list in the file postgres.conf)
  • Refer to the table by prepending schema name and dot to the table name. For example if the concerned table test2 is in my_schema, then your query should be
    insert into my_schema.test2(ID) values(?).
查看更多
看我几分像从前
4楼-- · 2019-07-07 03:23

Your table is called TEST2 not test2. Apparently you created it using double quotes, which makes Postgres (and other standard-compliant DBMS) case-sensitive.

Because of that you now have to enclose the table in name in double quotes each time you refer to it.

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

Most probably this is not what you intended, so just re-recreate the table without using double quotes around the identifiers:

CREATE TABLE test2
(
  ...
)

create a different table than:

CREATE TABLE "test2"
(
  ...
)

If you do not want to re-create the tables, you can rename them:

alter table "TEST2" rename to test2;
查看更多
登录 后发表回答