甲骨文教育局Postgres的Java的嵌入式SQL问题
问题描述:
我正在迁移项目从Oracle到教育局的Postgres移动(包括更改Java代码,使通过JDBC调用数据库,使其问心无愧Oracle和Postgres的工作)。 EDB Postgres的附带有确实的Oracle函数一些转化为在Postgres的各自的当量的内置PL /爪哇层。但是,这并不适用于所有情况。甲骨文教育局Postgres的Java的嵌入式SQL问题
我们正在使用Oracle 11g和教育局的Postgres 9.5
一些我们在Postgres迄今为止所面临的问题是:
org.postgresql.util.PSQLException: ERROR: date format not recognized (for format 'DD/MM/YYYY HH24:MI:SSxFF3)
org.postgresql.util.PSQLException: Bad value for type long (getClob and setClob don't work with postgres text columns)
org.postgresql.util.PSQLException: ERROR: syntax error at or near "NAME" (Any column alias named NAME fails during JDBC PreparedStatement execution)
org.postgresql.util.PSQLException: ERROR: syntax error at or near "TEMPLATE" (Any column alias named TEMPLATE fails during JDBC PreparedStatement execution)
编辑: Java代码是直线前进。下面的代码片段包括Java调用和表格的细节:
问题#1
create table table_name (TEMPLATE varchar2(10))
列的数据类型:
Oracle
TEMPLATE varchar2(10)
的Postgres
TEMPLATE character varying (10) (Postgres table was created by the EDB postgres migration toolkit)
在下面的SQL
问题是与列别名模板作品,如果我更改别名说模板1,模板似乎是在Postgres的关键字。
sqlQuery = "SELECT A.TEMPLATE TEMPLATE FROM TABLE_NAME A";
preparedStatement = conn.prepareStatement(sqlQuery);
resultSet = preparedStatement.executeQuery();
//Works in Oracle, ERROR in postgres: syntax error at or near "TEMPLATE"
问题#2
create table table_name1 (date_col TIMESTAMP(6))
列的数据类型:
Oracle
Date_Col TIMESTAMP(6)
的Postgres
Date_Col timestamp without time zone (Postgres table was created by the EDB postgres migration toolkit)
sqlQuery = "Select TO_CHAR(DATE_COL,'DD/MM/YYYY HH24:MI:SSxFF3') from TABLE_NAME1";
preparedStatement = conn.prepareStatement(sqlQuery);
resultSet = preparedStatement.executeQuery();
//Works in Oracle, ERROR in postgres: date format not recognized
虽然我们对上面列出的每个问题都有具体的解决方案,但基于从Oracle迁移到Postgres的经验来处理Java差异的建议/建议将会很有帮助。我们希望转向适用于Postgres和Oracle(理想情况下!)的Java代码,并且希望避免if-else代码调用Oracle与Postgres特定的SQL。
答
一个可能的解决方案,我发现这个名字,template关键字的错误是引用列别名,Postgres的那样不把NAME,模板作为关键字。
SELECT A.TEMPLATE TEMPLATE FROM TABLE_NAME A
org.postgresql.util.PSQLException: ERROR: syntax error at or near "TEMPLATE" (Any column alias named TEMPLATE fails during JDBC PreparedStatement execution)
将其更改为:
SELECT A.TEMPLATE "TEMPLATE" FROM TABLE_NAME A
编辑我的问题,包括Java代码。 –
什么数据类型是'date_col'?什么是来自第一个查询的'table_name'的'create table'语句? –
在问题中增加了更多细节。谢谢。 –