Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb

   

Java 操作多类型数据库下的兼容性验证

第一章:数据库测试

①【 oracle 数据库不支持分号】ORA-00933: SQL 命令未正确结束

image.png

报错:OriginalSql = delete from org_reportcombinestru where code = '报表合并体系2';, Error Msg = ORA-00933: SQL 命令未正确结束

java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
  at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509)
  at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:461)
  at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104)
  at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:550)
  at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268)
  at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
  at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:229)
  at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:41)
  at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:928)
  at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1205)
  at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1747)
  at oracle.jdbc.driver.OracleStatement.executeLargeUpdate(OracleStatement.java:1712)
  at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1699)
  at oracle.jdbc.driver.OracleStatementWrapper.executeUpdate(OracleStatementWrapper.java:285)
  at com.dbmanage.db.DBUpdate.getRs(DBUpdate.java:21)
  at com.dbmanage.db.DBMain.update_sql(DBMain.java:57)
  at com.dbmanage.db.ReadFile.getFileContent(ReadFile.java:28)
  at com.dbmanage.db.ReadClipboard.lostOwnership(ReadClipboard.java:87)
  at sun.awt.datatransfer.SunClipboard.lostOwnershipNow(SunClipboard.java:313)
  at sun.awt.datatransfer.SunClipboard.lambda$lostOwnershipLater$0(SunClipboard.java:283)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
  at java.awt.EventQueue.access$500(EventQueue.java:97)
  at java.awt.EventQueue$3.run(EventQueue.java:709)
  at java.awt.EventQueue$3.run(EventQueue.java:703)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
  at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: Error : 933, Position : 68, Sql = delete from org_reportcombinestru where code = '报表合并体系1';, OriginalSql = delete from org_reportcombinestru where code = '报表合并体系1';, Error Msg = ORA-00933: SQL 命令未正确结束
  at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513)
  ... 33 more

② 【sqlserver 数据库不支持 commit】COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION

sqlservser 数据库测试

image.png

报错:com.microsoft.sqlserver.jdbc.SQLServerException: COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION

com.microsoft.sqlserver.jdbc.SQLServerException: COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
  at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:254)
  at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1608)
  at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:859)
  at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:759)
  at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7240)
  at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2869)
  at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:243)
  at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:218)
  at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:706)
  at com.dbmanage.db.DBUpdate.getRs(DBUpdate.java:21)
  at com.dbmanage.db.DBMain.update_sql(DBMain.java:87)
  at com.dbmanage.db.ReadFile.getFileContent(ReadFile.java:28)
  at com.dbmanage.db.ReadClipboard.lostOwnership(ReadClipboard.java:87)
  at sun.awt.datatransfer.SunClipboard.lostOwnershipNow(SunClipboard.java:313)
  at sun.awt.datatransfer.SunClipboard.lambda$lostOwnershipLater$0(SunClipboard.java:283)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
  at java.awt.EventQueue.access$500(EventQueue.java:97)
  at java.awt.EventQueue$3.run(EventQueue.java:709)
  at java.awt.EventQueue$3.run(EventQueue.java:703)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
  at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

③ 【DB2 数据库不支持分号】SQLSTATE=42601, SQLERRMC=;;de = ‘报表合并体系1’;END-OF-STATEMENT

db2 数据库测试

image.png

报错:com.ibm.db2.jcc.am.SqlSyntaxErrorException:  DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;de =  '报表合并体系1';END-OF-STATEMENT, DRIVER=4.19.49

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;de = '报表合并体系1';END-OF-STATEMENT, DRIVER=4.19.49
  at com.ibm.db2.jcc.am.kd.a(Unknown Source)
  at com.ibm.db2.jcc.am.kd.a(Unknown Source)
  at com.ibm.db2.jcc.am.kd.a(Unknown Source)
  at com.ibm.db2.jcc.am.fp.c(Unknown Source)
  at com.ibm.db2.jcc.am.fp.d(Unknown Source)
  at com.ibm.db2.jcc.am.fp.b(Unknown Source)
  at com.ibm.db2.jcc.t4.bb.i(Unknown Source)
  at com.ibm.db2.jcc.t4.bb.c(Unknown Source)
  at com.ibm.db2.jcc.t4.p.b(Unknown Source)
  at com.ibm.db2.jcc.t4.vb.h(Unknown Source)
  at com.ibm.db2.jcc.am.fp.jb(Unknown Source)
  at com.ibm.db2.jcc.am.fp.a(Unknown Source)
  at com.ibm.db2.jcc.am.fp.c(Unknown Source)
  at com.ibm.db2.jcc.am.fp.executeUpdate(Unknown Source)
  at com.dbmanage.db.DBUpdate.getRs(DBUpdate.java:21)
  at com.dbmanage.db.DBMain.update_sql(DBMain.java:88)
  at com.dbmanage.db.ReadFile.getFileContent(ReadFile.java:28)
  at com.dbmanage.db.ReadClipboard.lostOwnership(ReadClipboard.java:87)
  at sun.awt.datatransfer.SunClipboard.lostOwnershipNow(SunClipboard.java:313)
  at sun.awt.datatransfer.SunClipboard.lambda$lostOwnershipLater$0(SunClipboard.java:283)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
  at java.awt.EventQueue.access$500(EventQueue.java:97)
  at java.awt.EventQueue$3.run(EventQueue.java:709)
  at java.awt.EventQueue$3.run(EventQueue.java:703)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
  at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

④ 【kingbase 人大金仓数据库没问题】

image.png

⑤ 【DM 达梦数据库没问题】

⑥ 【PG、瀚高数据库没问题】

image.png

⑦ 【polardb 数据库没问题】

image.png

第二章:测试环境

① 测试 sql 语句

形式如下面的语句以及在此基础上的嵌套 sql 语句:

insert into org_xxx (a, b, c, ...) values (a1, b1, c1, ...);
commit;
delete from org_xxx where code = 'xxx';
commit;
update org_xxx set name = "xxx" where code = 'xxx';
commit;

② 测试代码块

外部调用下面的代码来执行。

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUpdate {
    public static int getRs(Connection conn, String sql) {
        /*
        作用:插入、更新、删除数据库
        返回:影响的行数:0代表无影响
        */
        Statement st = null;
        int rs = 0;
        try {
            // statement对象用于执行sql语句
            st = conn.createStatement();
            // 执行sql语句,成功返回修改行数,不成功返回0
            rs = st.executeUpdate(sql);
        }catch(SQLException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
        return rs;
    }
}

③ 测试驱动和 JDK 版本

由于有些驱动没有现成的数据库,未进行测试,如:mysql、高斯。

image.png

喜欢的点个赞❤吧!

   

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
192 64
|
11天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
47 11
|
24天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
1月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
17天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
1月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
49 7
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
31 6
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
29 5
|
1月前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
19 2
|
2月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。

推荐镜像

更多
下一篇
DataWorks