JDBC 学习复习10 编写自己的JDBC框架
首先万分感谢狼哥 孤傲苍狼 博客,整个jdbc学习的博客资料 链接为http://www.cnblogs.com/xdp-gacl/p/4006830.html
详细代码见狼哥博客,列出我学习过程中遇到的问题吧。
public static Object query(String sql, Object[] params, ResultSetHandler rsh)
throws SQLException {
Connection conn = null;
PreparedStatement ppst = null;
ResultSet rs = null;
try {
conn = getConnection();
ppst = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ppst.setObject(i + 1, params[i]);
}
rs = ppst.executeQuery();
return rsh.handler(rs);//关于这个策略模式的学习,详见设计模式吧,熟悉这种写法,在公司的工作过程中,类似写法遇到过,有用!
} finally {
release(conn, ppst, rs);
}
}
后面这么调用的
public User queryByID(int id) throws SQLException{
String sql = "select * from user where uid=?";
return (User) JDBCUtil.query(sql,new Object[]{id}, new BeanHandler(User.class));
}
然后BeanHandler实际上就是ResultSetHandler 借口的实现类,主要目的就是把查询结果,放到通过发射获取到的JavaBean里面,也就从数据库里面加载到JVM内存里了
package dbex.domain;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class BeanHandler implements ResultSetHandler {
private Class<?> clazz;
public BeanHandler(Class<?> clazz) {
this.clazz = clazz;
}
public Object handler(ResultSet rs) {
Object bean=null;
try {
if (!rs.next()) {//判空 直接返回null
return bean;
}
// 把resultset对象中的列数据放入到Bean对应的属性中去
bean = clazz.newInstance();
ResultSetMetaData rsm = rs.getMetaData();
int len = rsm.getColumnCount();
for (int i = 0; i < len; i++) {
String name = rsm.getColumnName(i + 1);
Object data = rs.getObject(i+1);
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
String type = rsm.getColumnTypeName(i+1);
// if("INTEGER".equals(type)){
// System.out.println(type);
field.set(bean,data.toString());
// }else if("String".equalsIgnoreCase(type)){
// field.set(bean,(String)data);
// System.out.println(type);
// }else{
// field.set(bean, data);
// }
}
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}
}
总结下:策略模式 ,java反射
JDBC 学习复习10 编写自己的JDBC框架的更多相关文章
- JDBC 学习复习8 C3P0数据源使用
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. c3p0与dbcp区别 dbcp ...
- JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表
本文目录: 1.自定义JDBC框架 ——数据库元数据:DataBaseMetaData 2.自定义JDBC框架 ——数据库元数据:DataBaseMetaData ...
- JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架
1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...
- JDBC 学习复习6 学习与编写数据库连接池
之前的工具类DBUtil暴露的问题 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的 ...
- JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法
JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 * 可以由Connection得到 */ 具体的应用代码: @Te ...
- 【转】JDBC学习笔记(10)——调用函数&存储过程
转自:http://www.cnblogs.com/ysw-go/ 如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个C ...
- 【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法
转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 ...
- JDBC 学习复习7 学习 Apache 开源DBCP 数据源
DBCP(DataBase connection pool),数据库连接池.是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件.单独使用dbcp需要2个包:comm ...
- JDBC学习笔记(10)——调用函数&存储过程
如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement * 对象的实例,在使用Con ...
随机推荐
- i18n 语言码和对应的语言库
语言码 语言名称 af Afrikaans am Amharic ar Arabic az Azerbaijani be Belarusian bg Bulgarian bh Bihari bn Be ...
- Unix/Linux系统下获得时间戳函数
在Unix/Linux系统下,使用gettimeofday函数来获得当前系统的时间戳,精度可达到微秒(microsecond,即μs)级别. 通过结构体timeval来存放当前时间戳的信息: #ifn ...
- 【分类算法】K近邻(KNN) ——kd树(转载)
K近邻(KNN)的核心算法是kd树,转载如下几个链接: [量化课堂]一只兔子帮你理解 kNN [量化课堂]kd 树算法之思路篇 [量化课堂]kd 树算法之详细篇
- Rabbitmq Plugin configuration unchanged. 问题完全解决方案
当执行:rabbitmq-plugins.bat enable rabbitmq_management 命令时候出现 错误如下: Plugin configuration unchanged. App ...
- 重置密码解决MySQL for Linux
重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...
- bat 脚本之 使用函数
bat 脚本之 使用函数 摘自:https://blog.csdn.net/peng_cao/article/details/73999076 2017年06月30日 15:06:37 pengcao ...
- html5调整音频音高
var audioSrc = 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1715/the_xx_-_intro.mp3'; function buff ...
- UIFontDownLoad ----动态下载系统提供的字体
程序运行结果如下 : 当点击对应单元格实现下载对应的字体. 控制台打印结果如下 : 2015-10-05 11:14:04.132 UIFontDownLoad[12721:86827] state ...
- Spring Cloud(7.1):安装Kafka和Redis
Kafka安装 (1)从官方(http://kafka.apache.org/downloads)下载安装包.kafka安装包和一般安装包的命名方式不一样,我们看一个kafka包命名:kafka_2. ...
- Linux下通过shell进MySQL执行SQL或导入脚本
这条命令表示通过用户名和密码执行shell然后在shell里面执行一个建表语句: USER="root" PASS="root" mysql -u $USER ...