我们正在破解JDBC,因此您不必
我们喜欢使用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,因此您不必相关推荐
- 【网络与系统安全实验】口令破解及防御
[网络与系统安全实验]口令破解及防御 口令的历史与现状 20世纪80年代,当计算机开始在公司里广泛应用时,人们很快就意识到需要保护计算机中的信息.仅用userID标识自己,很容易被其他人得到,出于这个 ...
- 一点密码破解的心得(更新字典)
[转载]一点密码破解的心得(更新字典) 2013.01.18 1 Comment 其实主要是来科普下hashcat系列的,如果用过的就撸过吧. Hashcat-plus是目前我见过的支持算法最多的GP ...
- 德国精品软件推荐 压缩软件 WINRAR 个人版终于免费了。
以下为WinRAR 致用户的一封信 (宣布个人免费版) 我们很荣幸地宣布,经过15年多的时间,现在终于向中国的个人用户提供一款完全免费的 WinRAR 简体中文版了.这是因为 WinRAR 的全球独家 ...
- 大学生程序员被勒索比特币后,绝地反击! | 原力计划
作者 | TrueDei 责编 | 伍杏玲 出品 | CSDN博客 黑客竟然找到我头上了? 这件事情已经过去很久了,是博主在大二时候的事,因为我经常参加一些比赛,主要是部署参加比赛的作品.突然有一天, ...
- Java课程设计报告--绩效考核信息管理系统
Java课程设计报告 题目 绩效考核信息管理系统 学生姓名 学 号 院 系 年级专业计算机科学与技术 班 ...
- 基于java的企业合同管理系统设计(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 目 录 摘要 3 Abstract 4 1.引言 4 1.1 开发背景 ...
- 网络订餐系统设计与实现
摘要 二十一世纪是一个集数字化,网络化,信息化的,以网络为核心的社会.中国的网民充分领略到"畅游天地间,网络无极限" 所带来的畅快.随着Internet的飞速发展,使得网络的应用日 ...
- 基于JSP的健身俱乐部会员管理系统的设计与实现(论文+PPT+源码)
= 分类号_______________ 密级________________ UDC _______________ 学号_ ___ 毕业设计(论文) 论文题目 基于JSP的健身俱乐部会员管理系统的 ...
- MVC 银行柜员业务绩效考核系统的设计与实现 毕业设计-附源码02133
摘要:当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料.能源.信息)之一.信息是管理的基础,是进行决策的的基本依据.在一个组织里,信息己作为人力.物力. ...
最新文章
- Gradle系列教程之依赖管理
- 爬虫基础(二)之http协议复习
- 37. 两个链表的第一个公共结点
- 二叉搜索树的第 k 大节点(递归,反中序遍历 + 提前返回)
- python基础教程是什么语言-终于懂得python中文入门教程
- mysql binlog日志优化及思路
- 头文件的用法及注意事项
- Cracking the coding interview--Q1.4
- matlab 图像的色彩强度,图像色彩增强的问题,,,小白给跪,
- 面试又栽在JVM上了!
- dhclient常用命令
- 如何设置电脑自动锁屏_办公族如何设置自动关闭显示器,让显示屏锁屏,防止偷看你电脑。...
- Linux XZ压缩格式学习
- try{return} finally
- Eclipse配置反编译问题
- 关联规则挖掘之FPGrowth算法实现
- DAH首度披露“超级账本”区块链平台…
- 渝粤题库 陕西师范大学 《中国古代文学(四)》作业
- 锦标赛算法Python实现
- 小米电视怎么样?五大标准最有发言权
热门文章
- idea报错 电脑死机蓝屏
- 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误
- linux写入二进制文件内容,linux – 从管道读取数据并写入标准输出,中间延迟.必须处理二进制文件...
- python中seaborn画swarm图_Python可视化 | Seaborn5分钟入门(四)——stripplot和swarmplot
- Integer和Int的比较,谈谈拆卸和装箱
- hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力
- mockito java_Java:使用Mockito模拟ResultSet
- jpa 手动预编译_编译时检查JPA查询
- java8 默认方法_默认方法:Java 8的无名英雄
- 通过Java Hipster升级Spring Security OAuth和JUnit测试