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