1. 程式人生 > >JDBC 操作資料庫

JDBC 操作資料庫

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