JDBC 操作資料庫
阿新 • • 發佈:2018-12-02
jdbc:
package org.java.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 裡面編寫了所有的關於資料庫操作的方法
* 具有通用性的增刪改查方法
*/
public class BaseDao {
//驅動字串
private String className = "com.mysql.jdbc.Driver" ;
//連線字串
private String url = "jdbc:mysql://localhost:3306/syspet";
//使用者名稱
private String user = "root";
//密碼
private String password = "root";
/*jdbc介面*/
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
/**
* 建立連線
* @return 連線物件
*/
public Connection getConnection(){
try {
//載入mysql驅動
Class.forName(className);
//通過DriverManager來管理mysql驅動,建立與資料庫的連線
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/**
* 增刪改的方法
* @param sql 預編譯的sql(有問號的佔位符)
* @param params 因為引數的型別不確定所以用Object,個數不確定所以用的陣列
*/
public void update(String sql,Object[] params){
//1.建立連線
conn = this.getConnection();
try {
//2.建立預編譯宣告物件
ps = conn.prepareStatement(sql);
//將引數陣列放入到預編譯的sql語句中
if(params != null){
//3.表示有引數,遍歷陣列
for(int i = 0; i < params.length; i++){
//4.將引數陣列放入到預編譯sql語句中
ps.setObject(i + 1, params[i]);
}
}
//5.執行sql語句
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//操作完成後關閉資源
this.close(conn, ps, rs);
}
}
/**
* 查詢
* @param sql 預編譯的sql語句
* @param params 引數陣列
* @return 結果集
*/
public ResultSet getResultSet(String sql,Object[] params){
//1.建立連線
conn = this.getConnection();
try {
//2.建立預編譯宣告物件,準備做查詢
ps = conn.prepareStatement(sql);
//判斷是否有引數
if(params != null){
//3.遍歷引數陣列
for(int i = 0; i < params.length; i++){
ps.setObject(i + 1, params[i]);
}
}
//4.執行查詢得到結果集
rs = ps.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//查詢的時候現在還不能關閉(這個時候一定不能關閉資源)
return rs;
}
/**
*關閉資源
*/
public void close(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if(rs != null){
rs.close();
rs = null;
}
if(ps != null){
ps.close();
ps = null;
}
if(conn != null){
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
實體類:
package org.java.entity;
/**
* 實體層(對資料庫中實體物件的封裝)
*/
public class Bank {
private Integer id; //編號
private String name; //姓名
private Integer blance; //餘額
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getBlance() {
return blance;
}
public void setBlance(Integer blance) {
this.blance = blance;
}
}
dao層:
package org.java.dao;
import java.util.List;
import org.java.entity.Bank;
/**
* 介面中的所有方法都預設是用public abstract修飾
*/
public interface BankDao {
/**
* 往資料庫中新增一個物件
* @param bank bank物件
*/
void add(Bank bank);
/**
* 修改一個bank物件
* @param bank
*/
public abstract void update(Bank bank);
/**
* 刪除
* @param id
*/
public void delete(Integer id);
/**
* 查詢所有的
* @return
*/
abstract List<Bank> getAllBank();
}
dao實現層:
package org.java.dao.impl;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.java.dao.BankDao;
import org.java.dao.BaseDao;
import org.java.entity.Bank;
public class BankDaoImpl extends BaseDao implements BankDao {
@Override
public void add(Bank bank) {
String sql = "INSERT INTO bank(NAME,blance) VALUES(?,?)";
Object[] params = {bank.getName(),bank.getBlance()};
super.executeUpdate(sql, params);
}
@Override
public void update(Bank bank) {
String sql = "UPDATE bank SET blance=? WHERE NAME=?";
Object[] params = {bank.getBlance(),bank.getName()};
super.executeUpdate(sql, params);
}
@Override
public void delete(Integer id) {
String sql = "DELETE FROM bank WHERE id=?";
Object[] params = {id};
super.executeUpdate(sql, params);
}
@Override
public List<Bank> getAllBank() {
List<Bank> list = new ArrayList<Bank>();
String sql = "SELECT * FROM bank";
Object[] params = null;
super.rs = super.getResultSet(sql, params);
//遍歷結果集
try {
while(rs.next()){
//將結果集封裝到bank物件中
Bank bank = new Bank();
bank.setId(rs.getInt(1));
bank.setName(rs.getString(2));
bank.setBlance(rs.getInt(3));
//將物件放入到集合中
list.add(bank);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//關閉資料庫資源
super.close(conn, ps, rs);
}
return list;
}
}
。。。service層暫時忽略
測試:
package org.java.test;
import java.util.List;
import java.util.Scanner;
import org.java.dao.BankDao;
import org.java.dao.impl.BankDaoImpl;
import org.java.entity.Bank;
import org.junit.Test;
public class BankTest {
BankDao bankDao = new BankDaoImpl();
@Test
public void testAdd(){
Scanner input = new Scanner(System.in);
//建立要新增的bank物件
Bank bank = new Bank();
System.out.println("請輸入賬戶姓名:");
bank.setName(input.next());
System.out.println("請輸入賬戶餘額:");
bank.setBlance(input.nextInt());
//新增到資料庫中
bankDao.add(bank);
}
@Test
public void testupdate(){
Scanner input = new Scanner(System.in);
//建立要新增的bank物件
Bank bank = new Bank();
System.out.println("請輸入賬戶姓名:");
bank.setName(input.next());
System.out.println("請輸入賬戶餘額:");
bank.setBlance(input.nextInt());
//新增到資料庫中
bankDao.update(bank);
}
@Test
public void testselect(){
List<Bank> list = bankDao.getAllBank();
for (Bank bank : list) {
System.out.println(bank.getId() + "\t" + bank.getName() + "\t" + bank.getBlance());
}
}
}