dbutils的学习

上一篇文章我们讲到jdbc的简单操作,并且通过我们自己的理解封装了一个简单的操作数据库的utils(工具类),那接下来再来看看人家写的强大的工具类dbutils。首先要导入一些必须的jar包
在这里插入图片描述
这里jar包括数据库的,还有dbutils,这里有一个jar包说明一下就是druid是我们国内的阿里巴巴开发的德鲁伊数据连接池。高效。

package com.yxc.domain;

public class Student {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=123456
maxActive=8
package com.yxc.utils;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class JdbcUtil {

	public static DataSource ds = null;
	static {
		try {
			//1.加载配置文件
			Properties p = new Properties();
			//获取字节码目录
			String path = JdbcUtil.class.getClassLoader().getResource("db.properties").getPath();
			FileInputStream in = new FileInputStream(path);
			p.load(in);
			ds = DruidDataSourceFactory.createDataSource(p);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	//获取数据源
	public static DataSource  getDataSource() {
		return ds;
	}
	public static Connection getConn() {
		try {
			// 2.连接数据
			return ds.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 关闭资源 
	 */
	public static void close(Connection conn,Statement st,ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
}

package com.yxc.jdbc;
import com.yxc.domain.Student;
import com.yxc.utils.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

/**
 * 下面我们通过一个案例来实现数据库的基本操作增删查改
 * 使用数据库名:jdbc 表名 stu  表中三个字段 id,name,age;
 * 我们使用静态方法,在主方法中测试。
 */
public class CRUD_Demo {
    public static void main(String[] args) throws SQLException {
        //测试新增学生
        /*Student stu=new Student();
        stu.setId(10);
        stu.setName("jdbc");
        stu.setAge(100);
        System.out.println(addStu(stu));
        */

        //测试删除学生
        //System.out.println(deleteStu(10));

        //更新学生测试
        //System.out.println(updateStu(1));

        //测试获取一名学生信息
        Student stu = findStu(1);
        System.out.println(stu);

        //测试查询所有学生
        List<Student> allStudent = findAllStudent();
        System.out.println(allStudent);

    }
    /**添加一个学生
     *如果添加成功返回1,失败返回0
     * */
    public static int addStu(Student stu1) throws SQLException {
        //创建一个QueryRunner类,将数据源传进去
        QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
        String sql="insert into stu value(?,?,?)";
        int result = qr.update(sql, stu1.getId(), stu1.getName(), stu1.getAge());
        return result;
    }
    /**根据id一位学生
     * 删除成功返回1 失败返回0
     * */
    public static int deleteStu(int id) throws SQLException {
        QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
        String sql="delete from stu where id=?";
        int result = qr.update(sql, id);
        return result;
    }
    /**更新数据
     * 更新成功以后返回1,失败返回0
     * */
    public static int updateStu(int id) throws SQLException {
        QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
        String sql="update stu set name='yxc' where id=?";
        int result = qr.update(sql, id);
        return result;
    }
    /**查找学生 查到以后返回学生对象*/
    public static Student findStu(int id) throws SQLException {
        QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
        String sql="select * from stu where id=?";
        //对于查询一条学生信息,首先传入sql语句,然后给一个结果集处理对象,接着参数
        Student stu = qr.query(sql, new BeanHandler<Student>(Student.class),1);
        return stu;
    }
    /**测试查询所有学生的信息
     * 返回一个学生集合
     */
    public static List<Student> findAllStudent() throws SQLException {
        QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
        String sql="select * from stu";
        //对于查询所有来说,首先传入sql语句,然后给一个处理结果集的对象,方法执行以后会直接返回list集合
        List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class));
        return list;
    }
}

数据库jdbc的操作说明:
在这份资料里面包含了经常用到的一些jar包,还有一个工具类,可以直接使用
1、将jar包导入工程
2、将db.properties文件放在资源文件下通常src
3、将JdbcUtil.java文件放入工程
4、之后就可以直接操作数据库了
常用的几种方法:
1、查询所有数据
QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
String sql=“select * from stu”;
//对于查询所有来说,首先传入sql语句,然后给一个处理结果集的对象,方法执行以后会直接返回list集合
List list = qr.query(sql, new BeanListHandler(Student.class));
2、根据id查询一条数据(传入参数id)
QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
String sql=“select * from stu where id=?”;
//对于查询一条学生信息,首先传入sql语句,然后给一个结果集处理对象,接着参数
Student stu = qr.query(sql, new BeanHandler(Student.class),1);
3、根据id删除一条信息(传入参数id)
QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
String sql=“delete from stu where id=?”;
int result = qr.update(sql, id);
4、根据id更新一条信息
QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
String sql=“update stu set name=‘yxc’ where id=?”;
int result = qr.update(sql, id);
5、新增一条信息(传入参数Goods goods)
//创建一个QueryRunner类,将数据源传进去
QueryRunner qr=new QueryRunner(JdbcUtil.getDataSource());
String sql=“insert into stu value(?,?,?)”;
int result = qr.update(sql, stu1.getId(),stu1.getName(),stu1.getAge());
以上几种是常见的几种数据库操作,在dao持久层中可以直接使用。这样开发起来就更加高效,后面的service层要利用,直接调用Dao层的代码即可。MVC+三层架构开发模式。这里面所有的异常直接抛出了,在开发中一般谁发送的请求就让谁来处理异常,其它的向上抛出即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章