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

简介: 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
11月前
|
SQL Web App开发 安全
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
796 2
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
|
10月前
|
SQL Web App开发 安全
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
628 0
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
|
11月前
|
SQL 容灾 安全
云时代SQL Server的终极答案:阿里云 RDS SQL Server如何用异地容灾重构系统可靠性
在数字化转型的浪潮中,数据库的高可用性已成为系统稳定性的生命线。作为经历过多次生产事故的资深开发者,肯定深知传统自建SQL Server架构的脆弱性——直到遇见阿里云 RDS SQL Server,其革命性的异地容灾架构彻底改写了游戏规则。
|
12月前
|
SQL Web App开发 安全
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
1053 0
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
|
12月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
791 0
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
641 10
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
2120 1
|
SQL 存储 数据库

推荐镜像

更多