我们喜欢使用JDBC

没人说。 曾经

更严重的是,如果考虑一下,JDBC实际上是一个非常出色的API。 这也可能是Java成为当今流行平台的原因之一 。 在JDK 1.1 之前 , 以及在ODBC之前 (这已经很久了),很难想象有任何平台可以完全标准化数据库访问。 哎呀, SQL本身在当时甚至还没有标准化,并且Java随JDBC一起出现了,JDBC是一个简单的API,在日常工作中您只需要了解几项内容:

  • Connection :建模所有数据库交互的对象
  • PreparedStatement :使您可以执行语句的对象
  • ResultSet :使您可以从数据库中获取数据的对象

而已!

回到现实

那是理论。 实际上,在JDBC之上运行的企业软件Swift发展为:

入侵JDBC。 图片版权信息 这一页

JDBC是Java开发人员的不得已的手段之一,在Java开发人员中,JDBC可以感觉像是真正的黑客,可以通过许多方式来入侵这种非常有状态,非常冗长,非常神秘的API。 几乎每个使用JDBC进行操作的人都将围绕API实现包装器,以至少防止:

  • 常见语法错误
  • 绑定变量索引不匹配
  • 动态SQL构造
  • 使用LOB周围的边缘情况
  • 资源处理和关闭
  • 阵列和UDT管理
  • 存储过程抽象

……等等。

因此,当每个人都在执行上述基础结构工作时,他们并未在处理其业务逻辑。 在使用JDBC时,几乎每个人都会做这些事情。 Hibernate和JPA几乎没有这些问题,但是它们也不再是SQL API。

这是我们已经在jOOQ内部解决的几个示例,因此您不必:

如何在

case DERBY:
case H2:
case MARIADB:
case MYSQL: {try {listener.executeStart(ctx);result = ctx.statement().executeUpdate();ctx.rows(result);listener.executeEnd(ctx);}// Yes. Not all warnings may have been consumed yetfinally {consumeWarnings(ctx, listener);}// Yep. Should be as simple as this. But it isn't.rs = ctx.statement().getGeneratedKeys();try {List<Object> list = new ArrayList<Object>();// Some JDBC drivers seem to illegally return null// from getGeneratedKeys() sometimesif (rs != null) {while (rs.next()) {list.add(rs.getObject(1));}}// Because most JDBC drivers cannot fetch all// columns, only identity columnsselectReturning(ctx.configuration(), list.toArray());return result;}finally {JDBCUtils.safeClose(rs);}
}

如何处理BigInteger和BigDecimal

else if (type == BigInteger.class) {// The SQLite JDBC driver doesn't support BigDecimalsif (ctx.configuration().dialect() == SQLDialect.SQLITE) {return Convert.convert(rs.getString(index),(Class) BigInteger.class);}else {BigDecimal result = rs.getBigDecimal(index);return (T) (result == null ? null :result.toBigInteger());}
}
else if (type == BigDecimal.class) {// The SQLite JDBC driver doesn't support BigDecimalsif (ctx.configuration().dialect() == SQLDialect.SQLITE) {return Convert.convert(rs.getString(index),(Class) BigDecimal.class);}else {return (T) rs.getBigDecimal(index);}
}

如何从SQL Server提取

switch (configuration.dialect().family()) {case SQLSERVER:consumeLoop: for (;;)try {if (!stmt.getMoreResults() &&stmt.getUpdateCount() == -1)break consumeLoop;}catch (SQLException e) {previous.setNextException(e);previous = e;}
}

说服了吗

这是令人讨厌的代码。 我们在这里或在源代码中有更多讨厌的代码示例 。

所有这些例子表明,使用JDBC时,你会写代码,你不希望/不应该在你的应用程序写入。 这就是为什么…

我们一直在入侵JDBC,因此您不必

翻译自: https://www.javacodegeeks.com/2014/04/were-hacking-jdbc-so-you-dont-have-to.html

我们正在破解JDBC,因此您不必相关推荐

  1. 【网络与系统安全实验】口令破解及防御

    [网络与系统安全实验]口令破解及防御 口令的历史与现状 20世纪80年代,当计算机开始在公司里广泛应用时,人们很快就意识到需要保护计算机中的信息.仅用userID标识自己,很容易被其他人得到,出于这个 ...

  2. 一点密码破解的心得(更新字典)

    [转载]一点密码破解的心得(更新字典) 2013.01.18 1 Comment 其实主要是来科普下hashcat系列的,如果用过的就撸过吧. Hashcat-plus是目前我见过的支持算法最多的GP ...

  3. 德国精品软件推荐   压缩软件 WINRAR 个人版终于免费了。

    以下为WinRAR 致用户的一封信 (宣布个人免费版) 我们很荣幸地宣布,经过15年多的时间,现在终于向中国的个人用户提供一款完全免费的 WinRAR 简体中文版了.这是因为 WinRAR 的全球独家 ...

  4. 大学生程序员被勒索比特币后,绝地反击! | 原力计划

    作者 | TrueDei 责编 | 伍杏玲 出品 | CSDN博客 黑客竟然找到我头上了? 这件事情已经过去很久了,是博主在大二时候的事,因为我经常参加一些比赛,主要是部署参加比赛的作品.突然有一天, ...

  5. Java课程设计报告--绩效考核信息管理系统

     Java课程设计报告 题目      绩效考核信息管理系统    学生姓名         学    号                   院    系        年级专业计算机科学与技术 班 ...

  6. 基于java的企业合同管理系统设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 目    录 摘要    3 Abstract    4 1.引言    4 1.1 开发背景  ...

  7. 网络订餐系统设计与实现

    摘要 二十一世纪是一个集数字化,网络化,信息化的,以网络为核心的社会.中国的网民充分领略到"畅游天地间,网络无极限" 所带来的畅快.随着Internet的飞速发展,使得网络的应用日 ...

  8. 基于JSP的健身俱乐部会员管理系统的设计与实现(论文+PPT+源码)

    = 分类号_______________ 密级________________ UDC _______________ 学号_ ___ 毕业设计(论文) 论文题目 基于JSP的健身俱乐部会员管理系统的 ...

  9. MVC 银行柜员业务绩效考核系统的设计与实现 毕业设计-附源码02133

    摘要:当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料.能源.信息)之一.信息是管理的基础,是进行决策的的基本依据.在一个组织里,信息己作为人力.物力. ...

最新文章

  1. Gradle系列教程之依赖管理
  2. 爬虫基础(二)之http协议复习
  3. 37. 两个链表的第一个公共结点
  4. 二叉搜索树的第 k 大节点(递归,反中序遍历 + 提前返回)
  5. python基础教程是什么语言-终于懂得python中文入门教程
  6. mysql binlog日志优化及思路
  7. 头文件的用法及注意事项
  8. Cracking the coding interview--Q1.4
  9. matlab 图像的色彩强度,图像色彩增强的问题,,,小白给跪,
  10. 面试又栽在JVM上了!
  11. dhclient常用命令
  12. 如何设置电脑自动锁屏_办公族如何设置自动关闭显示器,让显示屏锁屏,防止偷看你电脑。...
  13. Linux XZ压缩格式学习
  14. try{return} finally
  15. Eclipse配置反编译问题
  16. 关联规则挖掘之FPGrowth算法实现
  17. DAH首度披露“超级账本”区块链平台…
  18. 渝粤题库 陕西师范大学 《中国古代文学(四)》作业
  19. 锦标赛算法Python实现
  20. 小米电视怎么样?五大标准最有发言权

热门文章

  1. idea报错 电脑死机蓝屏
  2. 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误
  3. linux写入二进制文件内容,linux – 从管道读取数据并写入标准输出,中间延迟.必须处理二进制文件...
  4. python中seaborn画swarm图_Python可视化 | Seaborn5分钟入门(四)——stripplot和swarmplot
  5. Integer和Int的比较,谈谈拆卸和装箱
  6. hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力
  7. mockito java_Java:使用Mockito模拟ResultSet
  8. jpa 手动预编译_编译时检查JPA查询
  9. java8 默认方法_默认方法:Java 8的无名英雄
  10. 通过Java Hipster升级Spring Security OAuth和JUnit测试