jdbc工具类,实现了通用的dml和dql操作
2016-03-14 22:36
239 查看
一个jdbc的操作工具类,通用的dml,dql操作
项目src目录下创建jdbc.properties文件,内容如下:driverPath=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/pro2 userName=root passWord=root
代码如下:
/**
* jdbc操作数据库的工具类
*
* @author JefferyLeng
*
*/
@SuppressWarnings(“all”)
public class JDBCUtil {
private JDBCUtil() {} /* 数据库的驱动路径 */ private static String driverPath; /* 数据库连接url*/ private static String url; /* 用户名 */ private static String userName; /* 密码 */ private static String passWord; private static Connection conn = null; private static Statement stmt = null; private static ResultSet rs = null; static { //加载数据驱动信息 ResourceBundle bundle = ResourceBundle.getBundle("jdbc"); driverPath = bundle.getString("driverPath"); url = bundle.getString("url"); userName = bundle.getString("userName"); passWord = bundle.getString("passWord"); } /** * 得到mysql的驱动 * @return * @throws Exception */ public static Connection getConnection() throws Exception { Class.forName(driverPath); return DriverManager.getConnection(url,userName,passWord); } /** * 执行DML操作 insert update delete * @return */ public static int dmlOperate(String sql,Object[] objs) { try { conn = getConnection(); PreparedStatement pstm = conn.prepareStatement(sql); for (int i = 0; i < objs.length; i++) { pstm.setObject(i + 1,objs[i]); } return pstm.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally { releaseResource(conn, stmt, null); } return -1; } /** * 通用的查询操作 * 返回的都是List集合 * @return */ public static <T> List dqlOperate(String sql, List params, Class cls) throws Exception { List list = new ArrayList(); int index = 1; conn = getConnection(); PreparedStatement pstm = conn.prepareStatement(sql); //preparedStatement参数赋值 if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { pstm.setObject(index++, params.get(i)); } } rs = pstm.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int cols_len = metaData.getColumnCount(); //获取列的数量 while (rs.next()) { T resultObject = (T) cls.newInstance(); for (int i = 0; i < cols_len; i++) { String cols_name = metaData.getColumnName(i + 1); //获取列名 Object cols_value = rs.getObject(cols_name); //获取列名对应的数据信息 if (cols_value == null) { cols_value = ""; } //暴力反射 为javaBean属性赋值 Field field = cls.getDeclaredField(cols_name); field.setAccessible(true); field.set(resultObject, cols_value); } //将遍历出来的对象 存储到集合中 list.add(resultObject); } return list; } /** * 释放资源 * @param conn * @param stmt * @param rs */ public static void releaseResource(Connection conn,Statement stmt,ResultSet rs) { if(rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; //gc快速回收该引用 } if(stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; //gc快速回收该引用 } if(conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; //gc快速回收该引用 } }
}
相关文章推荐
- MQ使用
- 笔记:QT的模态对话框、非模态对话框及QLineEdit的验证器和补全器
- 第一次实习面试总结(阿里电面&外汇管理局现场面)
- LTE attach_IE introduction
- shell关于sort的积累
- zabbix的安装
- 关于getchar函数缓冲区的问题
- 关于getchar函数缓冲区的问题
- 圆拟合算法(距离之和最小)
- 《spring源码深度解析》读书笔记_初读①
- 关于getchar函数缓冲区的问题
- Java 代理
- java之redis篇(spring-data-redis整合)
- 圆拟合算法(距离之和最小)
- QT解析命令行(QCommandLineOption和QCommandLineParser类)
- Python学习路程day8
- Android LineView介绍
- Android笔记--int、String、图片转化为byte[]再转化为int、String、图片和将图片保存SQLite数据库
- Morgan Stanley IT笔试面试经验
- ViewPager,RadioGroup,FragmentManager 详解 <四> Fragment,ViewPager 和TabLayout