博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jdbc的封装
阅读量:3905 次
发布时间:2019-05-23

本文共 4110 字,大约阅读时间需要 13 分钟。

把驱动注册和释放连接资源封装了一个工具类

package com.yidongxueyuan.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/* * 对JDBC 进行封装:  */public class JdbcUtils2 {		//准备数据库的四大参数: 	private static final String driver ="com.mysql.jdbc.Driver"; 	private static final String url ="jdbc:mysql://localhost:3306/jdbc01"; 	private static final String username ="root"; 	private static final String password ="root";			/*	 * 驱动: 只需要注册一次就OK 	 * 	 */		static{		try {			Class.forName(driver);		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}	/*	 * 1:创建工具类: 直接获得一个连接对象: 	 */	public static Connection getConnection (){		try {			Connection connection = DriverManager.getConnection(url, username, password);			return  connection; 		} catch (SQLException e) {			throw new RuntimeException(e);		}	}		/*	 * 定义一个方法: 释放资源: 直接将rs stmt conn 全部释放: 	 */	public static void release(ResultSet rs ,Statement stmt , Connection conn){		if(rs!=null){			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}			rs=null;		}		if(stmt!=null){			try {				stmt.close();			} catch (SQLException e) {				e.printStackTrace();			}			stmt=null;		}		if(conn!=null){			try {				conn.close();			} catch (SQLException e) {				e.printStackTrace();			}			conn=null;		}			}	}

/结果集的封装: 将rs 封装到javaBean 当中:

package com.yidongxueyuan.dbassist;import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.ResultSetMetaData;//提供一种结果处理器: 将rs 封装到javaBean 当中:  class BeanHandler implements ResultSetHandler {	//准备一个目的: 	private Class clazz; //目标对象: 		public BeanHandler(Class clazz){		this.clazz = clazz; 	}			@Override	public Object handler(ResultSet rs) {				/*		 * rs 封装了结果集: 		 * rs当中的结果集设定到javaBean当中		 * 		 *  rs ----> 元数据对象:  列的名称:  列的个数: 		 *  id name money   ---->属性名称:  ---->反射:Field		 *  Field.set(); 		 */				try {						while(rs.next()){				//目标对象: 				Object bean = clazz.newInstance();//无参数构造器: 								//获得是: 结果集的元数据: 				ResultSetMetaData rsmd = rs.getMetaData();				//列的个数:  				int count = rsmd.getColumnCount();								for(int i = 0 ; i< count ; i++){					//字段的名称: 字段的名称和列的名称对应: 					String fieldname = rsmd.getColumnName(i+1);										//设置值: 					Object fieldValue = rs.getObject(fieldname);					//反射:					Field field = clazz.getDeclaredField(fieldname);					//私有的不能直接访问; 					field.setAccessible(true); 					field.set(bean, fieldValue); 														}				return bean; 			}		} catch (Exception e) {			throw new RuntimeException(e);		}		return null; 	 	}}

读和写的封装:

package com.yidongxueyuan.dbassist;import java.sql.Connection;import java.sql.ParameterMetaData;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import com.yidongxueyuan.utils.C3P0Util;import com.yidongxueyuan.utils.DBCPUtil;/* * 设定一个框架:  * 能够完成数据库的读和写的操作:  * select * from tableName where id=? and username=? * 定义读的方法; query(String sql, Object[] params );    *  * 写操作:  * delete from tableName where id=?  * update tableName set name=? , password=? where id=? * insert into tableName values(?,?,?);  * 定义写的方法: update(String sql , Object [] params );  *  * 总结: 删除, 修改, 插入, 都属于数据库的写操作: 只有sql 语句不同, * 通过动态的传递sql 语句,   sql 语句里面的占位符的个数不确定, 所以 * 可变参数的数据来传递。  *  */public class DBAssist {	//写的操作; 	public void update(String sql, Object ... params) throws Exception{		//获得链接对象; 		Connection connection = C3P0Util.getConnection();				//stmt容器: 		PreparedStatement pstmt = connection.prepareStatement(sql);				//设置sql 语句当中的占位符号: 				//参数的元数据对象: 		ParameterMetaData pmd = pstmt.getParameterMetaData();				//获得?的个数: 		int count = pmd.getParameterCount();				//循环遍历每一个?, 给每一个?赋值, 值来源于可变参数的数组: 		if(count > 0){						// 增强健壮性; 			if(params == null){				throw new RuntimeException("必须传递参数的值");			}			if(params.length != count){								throw new RuntimeException("传递的参数个数不正确");			}						for(int i =0 ;i
0){ // 增强健壮性; if(params == null){ throw new RuntimeException("必须传递参数的值"); } if(params.length != count){ throw new RuntimeException("传递的参数个数不正确"); } for(int i =0 ;i

转载地址:http://twqen.baihongyu.com/

你可能感兴趣的文章
CENTOS 6.5 配置YUM安装NGINX
查看>>
#ifdef DEBUG的理解
查看>>
Linux 任务控制的几个技巧( &amp;, [ctrl]-z, jobs, fg, bg, kill)
查看>>
慧眼云:基于云计算和大数据分析的主动防御实践
查看>>
58集团监控业务实践:将网站运行信息透明化
查看>>
给Django用户的SQLAlchemy介绍
查看>>
consul http api
查看>>
如何定位问题
查看>>
使用火焰图分析CPU性能回退问题
查看>>
openresty lua zlib整合安装 让lua支持解压服务端压缩过的数据
查看>>
Nginx与Gzip请求
查看>>
最佳日志实践(v2.0)
查看>>
logstash日志分析的配置和使用
查看>>
Nginx问题定位之监控进程异常退出
查看>>
https://imququ.com/post/content-encoding-header-in-http.html
查看>>
字符编码的前世今生
查看>>
视频笔记:Go 抓包、分析、注入 - John Leon
查看>>
linux下模拟丢包,延时命令总结
查看>>
java的字符流简单介绍
查看>>
初识java的xml
查看>>