日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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吧

總結

以上是生活随笔為你收集整理的url oracle default schema,oracle @Table中使用schema时insert报错的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。