问题描述
在java项目中连接PSQL数据库,对courseinformation表进行操作时,运行报错:
org.postgresql.util.PSQLException: 错误: 关系 “courseinformation” 不存在
已知解决方法
- 修改search_path属性,设置为当前表所在的模式
java中语法:
PreparedStatement ps = connection.prepareStatement("ALTER database \"EnglishSQL\" SET search_path TO EnglishSQL");
ps.executeUpdate();
数据库中语法:
SET search_path TO 'EnglishSQL';
//或者
ALTER USER postgres SET search_path to EnglishSQL;
//或者
ALTER database "EnglishSQL" SET search_path TO EnglishSQL;
- 删表重建
建表语句中使用了大写字母,而PSQL数据库中只使用小写字母,因此重建。
其实这是没有必要的!因为即使表名中使用了大写字母,PSQL数据库在建表,操作表时都会自动设置为小写字母。
我的方案
笔者在尝试前两种方法后,均无法解决这个问题。
后来发现,原来是在指定数据库表的时候不够详细。
原来的写法:
private static final String tableName = "courseinformation";// 表名
修改后的写法:模式名.表名,同时注意使用转义字符!!!
private static final String tableName = "\"EnglishSQL\".Courseinformation";// 表名
总结&体会
相比于其他数据库,PSQL数据库下多了Schema属性(user->datebase->schema->table),使用时要注意细节。
希望能对大家解决问题有所帮助!