甲骨文教育局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。

+0

编辑我的问题,包括Java代码。 –

+0

什么数据类型是'date_col'?什么是来自第一个查询的'table_name'的'create table'语句? –

+0

在问题中增加了更多细节。谢谢。 –

一个可能的解决方案,我发现这个名字,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