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+三層架構開發模式。這裏面所有的異常直接拋出了,在開發中一般誰發送的請求就讓誰來處理異常,其它的向上拋出即可。

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