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));
        }
    }

}

原文地址:https://www.cnblogs.com/lijins/p/10122141.html

时间: 2024-10-13 10:22:39

jdbc--------JdbcUtilDao 类的相关文章

JDBC工具类

在java中经常会用到JDBC工具类去连接数据库,今天说一下JDBC工具类 package com.test.util; //该工具类所在包的包名 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement

开源JDBC工具类DbUtils

本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUtils,而在这过程中很多都是借鉴和参考了DbUtils的代码,因此通过上一篇的学习,会让我们在对DbUtils进行更快速简单的认识. 俗话说学习一个开源的工具最好的方法就是看其官方文档,是的,在Apache官网中对DbUtils进行了详细的介绍:http://commons.apache.org/pr

DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据访问者)模式和 Active Domain Object(领域对象)模式.Data Accessor 模式实现了数据访问和业务逻辑的分离:Active Domain Object 模式实现了业务数据的对象化封装. 需要注意的是,DAO设计模式是Java EE中的设计模式,而非Ja

利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口: 1.public Connection getConnection()   获得数据库的连接 2.public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException  更新数据库

MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(九)----JDBC的PreparedStatement接口重构增删改查 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit.Rollback命令进行事务的提交与回滚.实际上在JDBC中也存在事务处理,如果要想进行事务处理的话,则必须按照以下的步骤完成. JDBC中事务处理的步骤: 1.要取消掉JDBC的自动提交:void setAutoCommit(boolea

jdbc操作工具类

1 package com.iflytek.jdbcdemo; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Properties; 6 7 /** 8 * 数据库配置文件读取方法 9 * @author WANGYAN 10 * 11 */ 12 public class DbConfig { 13 14 private String driver; 15 private Str

(转)JDBC模板类。

Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式. JdbcTemplate类通过模板设计模式帮助我们消除了冗长的代码,只做需要做的事情(即可变部分),并且帮我们做哪些固定部分,如连接的创建及关闭. JdbcTemplate类对可变部分采用回调接口方式实现,如ConnectionCallback通过回调接口返回给用户一个连接,从而可以使用该连 接做任何事情.State

浅谈JavaEE中的JDBC模板类的封装实现以及合理的建立项目包结构(一)

从今天开始我们一起来聊下有关,javaEE开发中的一些知识,JavaEE的开发用于企业级的开发,但是现在企业中一般也不会使用JDBC开发,大部分都是使用自己公司开发的一套的框架,但是这些框架的架构一般也是会模仿着有名JavaEE开源三大开发框架SSH(Struts2+Spring+Hibernate)或者现在也很流行的SSM开发框架(Spring+SpringMVC+MyBatis) 来进行深度定制以便于适合自己企业的实际开发需求.有的人曾说既然去公司又是重新学习一套框架,还有必要学习开源的三大

JDBC 工具类

package util; import java.sql.*; /** * JDBC的工具类 */ final public class JdbcUtil { private static String user = "root"; // 数据库用户名 private static String password = ""; // 数据库登录密码 private static String url = "jdbc:mysql://127.0.0.1:33

Spring(二):AOP(面向切面编程),Spring的JDBC模板类

1 AOP概述 1.2 什么是AOP 在软件业,AOP为Aspect Oriented Programmig的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP解决了OOP遇到一些问题,采取横向抽取机制,取代了传统