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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
5月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
425 3
|
6月前
|
安全 Java 编译器
Java类型提升与类型转换详解
本文详解Java中的类型提升与类型转换机制,涵盖类型提升规则、自动类型转换(隐式转换)和强制类型转换(显式转换)的使用场景与注意事项。内容包括类型提升在表达式运算中的作用、自动转换的类型兼容性规则,以及强制转换可能引发的数据丢失和运行时错误。同时提供多个代码示例,帮助理解byte、short、char等类型在运算时的自动提升行为,以及浮点数和整型之间的转换技巧。最后总结了类型转换的最佳实践,如避免不必要的转换、使用显式转换提高可读性、金融计算中使用BigDecimal等,帮助开发者写出更安全、高效的Java代码。
334 0
|
6月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
501 143
|
6月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
2464 102
|
7月前
|
存储 关系型数据库 分布式数据库
喜报|阿里云PolarDB数据库(分布式版)荣获国内首台(套)产品奖项
阿里云PolarDB数据库管理软件(分布式版)荣获「2024年度国内首版次软件」称号,并跻身《2024年度浙江省首台(套)推广应用典型案例》。
|
5月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
4月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
143 7
|
5月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
5月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
6月前
|
安全 算法 Java
Java泛型编程:类型安全与擦除机制
Java泛型详解:从基础语法到类型擦除机制,深入解析通配符与PECS原则,探讨运行时类型获取技巧及最佳实践,助你掌握泛型精髓,写出更安全、灵活的代码。

推荐镜像

更多