带有Java的Postgres我无法插入数据
Posted
技术标签:
【中文标题】带有Java的Postgres我无法插入数据【英文标题】:Postgres with Java I can't insert data 【发布时间】:2012-10-03 16:44:30 【问题描述】:我尝试使用 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)【问题讨论】:
插入数据前必须先创建表test2
。
【参考方案1】:
表 test2 不存在。尝试登录 PostgreSQL 并检查此表。
您可以使用命令行实用程序列出数据库中的所有现有表
psql -d postgres
\dt
【讨论】:
【参考方案2】:您的表名为 TEST2
而不是 test2
。显然,您使用双引号创建了它,这使得 Postgres(和其他符合标准的 DBMS)区分大小写。
因此,您现在必须在每次引用表时用双引号将名称括起来。
String stm = "INSERT INTO \"TEST2\"(ID) VALUES(?)";
这很可能不是您想要的,所以只需在标识符周围使用双引号不重新创建表:
CREATE TABLE test2
(
...
)
创建一个不同的表:
CREATE TABLE "test2"
(
...
)
如果您不想重新创建表,可以重命名它们:
alter table "TEST2" rename to test2;
【讨论】:
非常感谢!您知道如何在不重新制作所有表格的情况下解决此问题吗? 我也用 pgadmin 做了所有的表。我没有加引号 @thanassis:您肯定在某处使用了引号,否则不会以这种方式创建表。请参阅我对如何重命名它们的编辑。【参考方案3】:检查您在其中创建表 test2 的架构。 如果它是不在搜索路径中的架构之一,那么您有两个选择:-
将架构添加到您的 search_path(文件 postgres.conf 中的逗号分隔列表) 通过在表名前附加模式名称和点来引用表。 例如,如果相关表 test2 在 my_schema 中,那么您的查询应该是insert into my_schema.test2(ID) values(?)
。
【讨论】:
以上是关于带有Java的Postgres我无法插入数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Talend Open Studio 处理数百万条 MongoDB 记录并将其插入 Postgres
Spring Data JPA + Postgres - 无法使用一对一映射插入数据