url oracle default schema,oracle @Table中使用schema时insert报错

第一部分

测试情况如下:

maven修改

com.alibaba

druid

1.1.10

实体类

@Table(name = "dpcenter.xeuser")

public class OUser {

private String userid;

private String username;

...

}

测试代码

public static void main(String[] args) {

OracleStyle style=new OracleStyle();

ConnectionSource cs = ConnectionSourceHelper.getSingle(druidSource());

SQLLoader loader = new ClasspathLoader("/org/beetl/sql/test");

DebugInterceptor debug = new DebugInterceptor(OracleQuickTest.class.getName());

Interceptor[] inters = new Interceptor[]{ debug};

final SQLManager sql = new SQLManager(style,loader,cs,new UnderlinedNameConversion(), inters);

OUser ou=new OUser();

ou.setUserid("hp-test");

ou.setUsername("test");

OUserDao oUserDao=sql.getMapper(OUserDao.class);

oUserDao.insert(ou);

}

public static DataSource druidSource() {

com.alibaba.druid.pool.DruidDataSource ds = new com.alibaba.druid.pool.DruidDataSource();

ds.setUrl("jdbc:oracle:thin:@192.168.1.4:1521:orcl");

ds.setUsername("dpmanage");

ds.setPassword("dpmanage");

ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");

return ds;

}

报错信息

Exception in thread "main" java.lang.RuntimeException: java.sql.SQLFeatureNotSupportedException

at org.beetl.sql.core.db.MetadataManager.initDefaultSchema(MetadataManager.java:278)

at org.beetl.sql.core.db.MetadataManager.(MetadataManager.java:33)

at org.beetl.sql.core.SQLManager.initMetadataManager(SQLManager.java:254)

at org.beetl.sql.core.SQLManager.(SQLManager.java:180)

at org.beetl.sql.core.SQLManager.(SQLManager.java:156)

at org.beetl.sql.core.SQLManager.(SQLManager.java:151)

at org.beetl.sql.core.SQLManager.(SQLManager.java:138)

at org.beetl.sql.test.OracleQuickTest.main(OracleQuickTest.java:23)

Caused by: java.sql.SQLFeatureNotSupportedException

at com.alibaba.druid.pool.DruidPooledConnection.getSchema(DruidPooledConnection.java:1191)

at org.beetl.sql.core.db.MetadataManager.setDefaultSchema(MetadataManager.java:293)

at org.beetl.sql.core.db.MetadataManager.initDefaultSchema(MetadataManager.java:275)

... 7 more

第二部分

修改beetlsql代码MetadataManager

private void setDefaultSchema(Connection conn) throws SQLException{

try {

this.defalutCatalog = conn.getCatalog();

}catch(Throwable e) {

// jdbc低版本不支持

e.printStackTrace();

}

try{

this.defaultSchema = conn.getSchema();

}catch(Exception e){

// jdbc低版本不支持

String dbName = sm.getDbStyle().getName();

if(dbName.equals("postgres")){

defaultSchema = "public";

}else if(dbName.equals("sqlserver")){

defaultSchema="dbo";

}else if(dbName.equals("oracle")){

defaultSchema = conn.getMetaData().getUserName();

}else{

defaultSchema = null;

}

}

}

报错会产生

Exception in thread "main" org.beetl.sql.core.BeetlSQLException: java.sql.SQLSyntaxErrorException: ORA-00928: 缺失 SELECT 关键字

at org.beetl.sql.core.SQLScript.insert(SQLScript.java:206)

at org.beetl.sql.core.SQLManager.generalInsert(SQLManager.java:1152)

at org.beetl.sql.core.SQLManager.insert(SQLManager.java:1090)

at org.beetl.sql.core.SQLManager.insert(SQLManager.java:1046)

at org.beetl.sql.core.mapper.internal.InsertAmi.call(InsertAmi.java:19)

at org.beetl.sql.core.mapper.MapperJavaProxy.invoke(MapperJavaProxy.java:155)

at org.beetl.sql.core.mapper.MapperJava8Proxy.invoke(MapperJava8Proxy.java:92)

at com.sun.proxy.$Proxy2.insert(Unknown Source)

at org.beetl.sql.test.OracleQuickTest.main(OracleQuickTest.java:29)

Caused by: java.sql.SQLSyntaxErrorException: ORA-00928: 缺失 SELECT 关键字

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)

at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)

at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)

at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)

at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)

at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)

at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)

at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)

at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530)

at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)

at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:256)

at org.beetl.sql.core.SQLScript.insert(SQLScript.java:201)

... 8 more

Disconnected from the target VM, address: '127.0.0.1:65488', transport: 'socket'

┏━━━━━ Debug [oUser._gen_insert] ━━━

┣ SQL: insert into dpcenter.XEUSER () VALUES ()

┣ 参数: []

┣ 位置: org.beetl.sql.test.OracleQuickTest.main(OracleQuickTest.java:29)

┗━━━━━ Debug [ ERROR:ORA-00928: 缺失 SELECT 关键字] ━━━

使用版本 2.10.29

总结

1 如果使用beetlsql-2.10.29+druid-1.1.10 会产生SQLFeatureNotSupportedException,原因是catch了Error没有catch Exception

2 如果修改了1中的Error为Exception可启动程序

3 oracle中使用@Table(name="{schema}.{tableName}")时会产生错误,分析原因是获取tableName时会截取"."后面的字符串作为tableName。本来想修改一下然后提交给作者,但考虑整体架构扩展性还是提交给issue吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值