java-通过JDBC进行Postgres连接:org.postgresql.util.PSQLException:错误:关系“处方”不存在
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-通过JDBC进行Postgres连接:org.postgresql.util.PSQLException:错误:关系“处方”不存在,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3703字,纯文字阅读大概需要6分钟。
内容图文
我在连接到dockerized postgres实例时遇到很多麻烦.我得到的错误如下所示:
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "prescriptions" does not exist
Position: 29
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2284)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2003)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:200)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424)
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:321)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:313)
这是重新创建问题的步骤.首先,我像这样设置数据库:
docker run -p 7654:5432 --name zoo_postgres -e POSTGRES_PASSWORD="stranger" -e POSTGRES_USER=stranger -d postgres
并运行一个安装脚本,如下所示:
create DATABASE stranger;
create SCHEMA stranger;
CREATE TABLE prescriptions (
prescription_id BIGINT NOT NULL,
PRIMARY KEY (prescription_id)
);
CREATE USER stranger_user WITH ENCRYPTED password 'stranger_user';
grant CONNECT on DATABASE stranger to stranger_user;
grant USAGE on SCHEMA stranger to stranger_user;
GRANT SELECT ON ALL TABLES IN SCHEMA stranger TO stranger_user;
GRANT INSERT ON ALL TABLES IN SCHEMA stranger TO stranger_user;
GRANT DELETE ON ALL TABLES IN SCHEMA stranger TO stranger_user;
GRANT UPDATE ON ALL TABLES IN SCHEMA stranger TO stranger_user;
-- I've tried several variations of the line below, without any effect
ALTER USER stranger_user SET SEARCH_PATH to stranger,stranger_user,public;
在Java方面,代码非常简单,如下所示:
public static void main(String[] args) throws Exception {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:7654/stranger","stranger_user", "stranger_user"); // this succeeds (suggesting the connection string is correct)
connection.setCatalog("stranger");
connection.setSchema("stranger");
Statement stmt = connection.createStatement();
stmt.execute("select prescription_id from prescriptions");
// code dies before getting to the close line.
connection.close();
System.out.println("Successfully connected using JDBC directly");
}
设置目录和架构无效,更改搜索路径也无效.一切都是小写,所以我认为这与转义表名无关.我尝试使用真实用户(并跳过用户帐户),省略了数据库名称和其他一些技巧.我怀疑我连接到数据库的方式有问题,但是我可以使用psql进行连接,如下所示:
% psql -h localhost -p 7654 -d postgres -U stranger_user
从这一点来看,我可以使用普通的sql访问表:
% psql -h localhost -p 7654 -d postgres -U stranger_user
Password for user stranger_user:
psql (9.4.6, server 9.5.2)
WARNING: psql major version 9.4, server major version 9.5.
Some psql features might not work.
Type "help" for help.
postgres=> \d
List of relations
Schema | Name | Type | Owner
----------+---------------+-------+----------
stranger | prescriptions | table | stranger
(1 row)
postgres=> select * from prescriptions;
prescription_id
-----------------
(0 rows)
postgres=> select * from stranger.prescriptions;
prescription_id
-----------------
(0 rows)
我正在使用最新版本的postgres驱动程序:“ org.postgresql:postgresql:9.4”,看不到其他任何会导致此问题的内容.在这一点上,我没有主意,无法弄清楚出了什么问题.
解决方法:
如果您使用pgAdmin或psql,并登录到服务器localhost:6543,且数据库陌生人的用户名为stranger_user,密码为stranger_user,您会看到什么?
我希望您看到一个空的公共架构.
运行create DATABASE陌生人不会使其成为活动数据库.
因此,运行create SCHEMA陌生人将在postgres数据库中创建该架构.它还不会使新架构处于活动状态.
因此,运行CREATE TABLE处方将在postgres数据库的公共模式中创建该表.
当然,在端口6543上提供的PostgreSQL数据库实例/群集中甚至都没有,因为您在端口7654上的其他实例/群集上完成了所有这些操作.
内容总结
以上是互联网集市为您收集整理的java-通过JDBC进行Postgres连接:org.postgresql.util.PSQLException:错误:关系“处方”不存在全部内容,希望文章能够帮你解决java-通过JDBC进行Postgres连接:org.postgresql.util.PSQLException:错误:关系“处方”不存在所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。