jdbc--------JdbcUtilDao 类
Posted 大威少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc--------JdbcUtilDao 类相关的知识,希望对你有一定的参考价值。
2018-12-14
目标:做成一个比较通用的 sql 操作
import com.ljs.util.JDBCUtil;
类名:JdbcUtilDao
1: 更新操作, 针对任何表,增加,删除,更新操作都可以满足。
知识点: 可变数组, preparedstatement 对象。(?) 占位符。
public int update(String sql, Object ...objects){ // // 1 获取conn 连接 Connection connection =null; PreparedStatement pt = null; try { connection = JDBCUtil.getConn(); pt = connection.prepareStatement(sql); for( int i =0; i < objects.length; ++i ){ pt.setObject(i+1, objects[i]); } int len = pt.executeUpdate(); return len; } catch ( Exception e) { e.printStackTrace(); return -1; } finally { // 3 关闭 con JDBCUtil.close(null, pt, connection); } }
2: 通用的查询单条记录, 只返回一条的记录。 这条记录用 javabean 对象封装好。
知识点:泛型,ResultSetMetaData 对象保存结果集的属性结构。 和根据ResultSet 的值
反射, 生成对象,和获取对象的属性并且赋值。
ResultSet --> bean.
public<T> T queryOne(Class<T> clazz, String sql, Object ...Object){ try { Connection connection = JDBCUtil.getConn(); PreparedStatement pst = connection.prepareStatement(sql); for( int i=0; i<Object.length; ++i ){ pst.setObject(i+1, Object[i]); } ResultSet resultSet = pst.executeQuery(); // ResultSetMetaData 保存这个结果集的属性结构。 ResultSetMetaData metaData = resultSet.getMetaData(); int len = metaData.getColumnCount(); while( resultSet.next() ){ T bean = clazz.newInstance(); for( int i = 1; i<=len; ++i ){ String column_name = metaData.getColumnLabel(i); Object value = resultSet.getObject(column_name); /* * 根据结果集的属性结构 构造 属性结构。 * 反射 。 */ Field field = clazz.getDeclaredField(column_name); field.setAccessible(true); field.set(bean, value); } return bean; } } catch (Exception e) { e.printStackTrace(); } return null; }
3 查询多条记录,返回list容器列表中。
知识点: 和上一样。 ArrayList
public <T> List<T> queryMutil(Class<T> clazz, String sql, Object ...Object){ try { Connection connection = JDBCUtil.getConn(); PreparedStatement pst = connection.prepareStatement(sql); List<T> list = new ArrayList<T>(); for( int i=0; i<Object.length; ++i ){ pst.setObject(i+1, Object[i]); } ResultSet set = pst.executeQuery(); ResultSetMetaData metadata = set.getMetaData(); int len = metadata.getColumnCount(); while(set.next()){ T bean = clazz.newInstance(); for (int i = 1; i <= len; i++) { String name = metadata.getColumnLabel(i); Object object2 = set.getObject(name); Field field = clazz.getDeclaredField(name); field.setAccessible(true); field.set(bean, object2); } list.add(bean); } return list; } catch (Exception e) { e.printStackTrace(); } return null; }
上面的测试代码
package com.ljs.daoTest; import java.util.List; import org.junit.Test; import com.ljs.bean.UserBean; import com.ljs.dao.JdbcUtilDao; public class JdbcDaoTest { @Test public void update(){ JdbcUtilDao dao = new JdbcUtilDao(); //String sql = "insert into user(name,password) values(?,?)"; String sql = "update user set name = ? where id = 11"; int len = dao.update(sql, "lijinsheng"); System.out.println(len>0?"yes":"no"); } @Test public void queryOne(){ JdbcUtilDao dao = new JdbcUtilDao(); String sql = "select * from user where name= ?"; UserBean tBean = dao.queryOne(UserBean.class, sql,"lijinsheng"); System.out.println(tBean); } @Test public void queryMutil(){ JdbcUtilDao dao = new JdbcUtilDao(); List<UserBean> list; String sql = "select * from user where name= ?"; list = dao.queryMutil(UserBean.class, sql, "lijinsheng"); for( int i=0; i<list.size(); ++i ){ System.out.println(list.get(i)); } } }
以上是关于jdbc--------JdbcUtilDao 类的主要内容,如果未能解决你的问题,请参考以下文章
30根据官方教程详解嵌套类内部类静态嵌套类局部类匿名类 ...