0725 JDBC 技術(增刪查改) Emp類/DBUtils/EmpDao /TestDemo

jdbc技術

   java database connectivity--java 數據庫 連接
   sun設計的技術規範
       接口
      
   各個數據廠商做具體的實現
     sqlserver -- 微軟
     Oracle、mysql -- Oracle
     DB2 -- IBM
     ...

JDBC四個重要參數
  四個重要參數
    a.驅動字符串
        com.microsoft.sqlserver.jdbc.SQLServerDriver
        com.microsoft.sqlserver.jdbc.SQLServerDriver.class
    b.url連接字符串
       jdbc:sqlserver://localhost:1433;dataBaseName=數據庫名
    c.user(數據庫用戶名)
    d.pwd(數據庫密碼)


  三個核心接口(java.sql)
    a.Connection接口(連接對象)
    b.Statement接口(語句操作對象)
    c.ResultSet接口(結果集對象)
  

 預編譯語句對象PrepareStatement
    預編譯:在java程序這一段就將sql語句編譯好,生成編譯文件
               向數據庫發送的是預編譯文件,而非sql
               相同sql(參數可以不同),不會重複發送預編譯文件
   大大提升了程序的性能

 

 建表
  部門表
    刪除表
    drop table Dept
	drop table Emp

     create table Dept(
	    deptno int primary key, --部門編號
		dname varchar(200) not null,--部門名稱
		location varchar(400) not null -- 部門地址
	 )

  員工表
    create table Emp(
	     empno int primary key identity,--員工編號
		 ename varchar(50) not null,--姓名
		 sex char(3)  check(sex in('男','女')) default '男',--性別
		 age int check(age between 18 and 60),--年齡
		 sal float check(sal>=3000) default 3000,--薪資
		 deptno int  references Dept(deptno)
	)

	select * from dept
	select * from emp

	添加
	insert into dept values(10,'java開發部','北京'),(20,'市場','上海'),
	(30,'企劃部','長沙')

	select * from dept

	insert into emp values('熊大','男',25,12000,10),('熊二','男',23,11000,10),
('張三','女',21,9000,10),('李四','女',26,15000,20),('王五','男',27,16000,20),
('趙六','女',20,6000,20),('孫七','男',21,10000,30),('吳八','女',23,13000,30),
('鄧九','男',20,9000,30),('常十','女',21,8000,30);

	select * from emp

	刪除表中所有的記錄,如果再添加記錄標識列,會重新開始
truncate table emp
package demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import org.junit.Test;

public class TestDemo {
      /**
       * 使用jdbc往數據庫dept表中插入一條記錄
       *  增刪改
       */
	@Test
	 public void test1(){
		     try {
			      //加載數據的驅動類
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
				//連接字符串
				String url = "jdbc:sqlserver://localhost:1433;dataBaseName=db01";
				//用戶名
				String user = "sa";
				//密碼
				String pwd = "123";
				//獲得連接對象(java和數據庫之間搭建橋樑)
				Connection conn = DriverManager.getConnection(url, user, pwd);
				//增
				//String sql = "insert into dept values(50,'人力資源部','武漢') ";
				//刪
				//String sql = "delete from dept where deptno=50";
				//改
				String sql = "update emp set sal += 1000";
				//獲得語句對象,語句對象通過連接對象獲得
				Statement stmt = conn.createStatement();
				//發送sql,操作數據庫 ,增刪改都使用executeUpdate()
				int num = stmt.executeUpdate(sql);
				System.out.println(num);//1 表示成功
				//關閉資源(三個接口)
				//順序 先打開的後關閉
				stmt.close();
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			} 
		
	 }
	
	 /**
	  * 查詢
	  *    查詢emp
	  *     select * from emp
	  */
	@Test
	public void test2(){
		    //聲明三個核心接口
		Connection conn = null;
		Statement stmt = null;
		 ResultSet rs = null;
		    //註冊驅動類
		    try {
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		       String url = "jdbc:sqlserver://localhost:1433;dataBaseName=db01";
		       String user = "sa";
		       String pwd = "123";
		       //獲得連接對象
		        conn = DriverManager.getConnection(url, user, pwd);
		       //sql
		       String sql = "select * from emp";
		       //獲得語句對象
		       stmt = conn.createStatement();
		       //發送sql語句,執行sql
		       rs = stmt.executeQuery(sql);
		       //將數據庫中查詢到的記錄打印到控制檯
		       while(rs.next()){
		    	    //取出這一行的記錄
		    	    int empno = rs.getInt("empno");
	                String ename = rs.getString("ename");
	                float sal = rs.getFloat("sal");
	                System.out.println(empno+","+ename+","+sal);
		       }
		  
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
			 	   try {
					//關閉資源
					   rs.close();
					   stmt.close();
					   conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
	@Test
	public void test3(){
		 Scanner sc = new Scanner(System.in);
		 System.out.print("請輸入員工的姓名:");
		 String name = sc.nextLine();
		
		    //聲明三個核心接口
		Connection conn = null;
		Statement stmt = null;
		 ResultSet rs = null;
		    //註冊驅動類
		    try {
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		       String url = "jdbc:sqlserver://localhost:1433;dataBaseName=db01";
		       String user = "sa";
		       String pwd = "123";
		       //獲得連接對象
		        conn = DriverManager.getConnection(url, user, pwd);
		       //sql
		       String sql = "select * from emp where ename='"+name+"'";
		       //獲得語句對象
		       stmt = conn.createStatement();
		       //發送sql語句,執行sql
		       rs = stmt.executeQuery(sql);
		       //將數據庫中查詢到的記錄打印到控制檯
		       while(rs.next()){
		    	    //取出這一行的記錄
		    	    int empno = rs.getInt("empno");
	                String ename = rs.getString("ename");
	                float sal = rs.getFloat("sal");
	                System.out.println(empno+","+ename+","+sal);
		       }
		  
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
			 	   try {
					//關閉資源
					   rs.close();
					   stmt.close();
					   conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
	/**
	 *  查詢
	 *    select * from emp where deptno=? and sex=?
	 */
	@Test
	public void test4(){	
		   Scanner scInt = new Scanner(System.in);
		   Scanner sc = new Scanner(System.in);
		   System.out.print("請輸入部門編號:");
		   int dno = scInt.nextInt();
		   System.out.print("輸入查詢員工的性別:");
		   String sex = sc.nextLine();
		   
		    //聲明三個核心接口
		Connection conn = null;
		 PreparedStatement prep = null;
		 ResultSet rs = null;
		    //註冊驅動類
		    try {
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		       String url = "jdbc:sqlserver://localhost:1433;dataBaseName=db01";
		       String user = "sa";
		       String pwd = "123";
		       //獲得連接對象
		        conn = DriverManager.getConnection(url, user, pwd);
		       //sql
		       String sql = "select * from emp where deptno=? and sex=?";
		       //獲得預編譯語句對象
	           prep = conn.prepareStatement(sql);
	           //設置參數
	           prep.setInt(1, dno);
	           prep.setString(2, sex);           
		       //發送預編譯文件,執行sql
	           //增刪改 prep.executeUpdate()
		       rs = prep.executeQuery();//查詢
		       //將數據庫中查詢到的記錄打印到控制檯
		       while(rs.next()){
		    	    //取出這一行的記錄
		    	    int empno = rs.getInt("empno");
	                String ename = rs.getString("ename");
	                float sal = rs.getFloat("sal");
	                System.out.println(empno+","+ename+","+sal);
		       }
		  
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
			 	   try {
					//關閉資源
					   rs.close();
					   prep.close();
					   conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
	
}

 

員工類Emp 

package demo02;

public class Emp {
	//與數據表結構一致
    private Integer empno;
    private String ename;
    private String sex;
    private Integer age;
    private Float sal;
    private Integer deptno;
	public Emp() {
		super();
		// TODO Auto-generated constructor stub
	}
   
	public Emp(Integer empno, String ename, String sex, Integer age, Float sal, Integer deptno) {
		super();
		this.empno = empno;
		this.ename = ename;
		this.sex = sex;
		this.age = age;
		this.sal = sal;
		this.deptno = deptno;
	}

	public Integer getEmpno() {
		return empno;
	}

	public void setEmpno(Integer empno) {
		this.empno = empno;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Integer getAge() {
		return age;
	}

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

	public Float getSal() {
		return sal;
	}

	public void setSal(Float sal) {
		this.sal = sal;
	}

	public Integer getDeptno() {
		return deptno;
	}

	public void setDeptno(Integer deptno) {
		this.deptno = deptno;
	}

	
   @Override
   public String toString() {
	return empno+"\t"+ename+"\t"+sex+"\t"+age+"\t"+sal+"\t"+deptno;
   }
    
}
package demo02;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtils {
    //jdbc的四個重要參數作爲工具類的常量
	//驅動字符串
	public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	//連接字符串
	public static final String URL = "jdbc:sqlserver://localhost:1433;dataBaseName=db01";
	//用戶名
	public static final String USER = "sa";
	//密碼
	public static final String PASSWORD = "123";
	
	//在靜態塊中加載驅動類
	//在類加載的時候,執行的代碼
	static{
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//獲得連接對象的方法
	public static Connection getConnection() throws SQLException {
		 return DriverManager.getConnection(URL, USER, PASSWORD);
	}
	
	//關閉資源的方法
	public static void closeAll(ResultSet rs, PreparedStatement prep,Connection conn) throws SQLException{
		    try {
				if(rs!=null){
					  rs.close();
				}
				if(prep!=null){
					 prep.close();
				}
				if(conn!=null){
					 conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
				throw e;//將異常信息繼續往上拋,通知調用者
			}
		    
		    
	}
	//測試
	 public static void main(String[] args) throws SQLException {
		     Connection conn = getConnection();
		     System.out.println(conn);
	}
}

 

package demo02;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class EmpDao {
   //封裝基礎業務邏輯
	//增
	public int save(Emp emp) throws SQLException{
		  //聲明2個核心接口
		   Connection conn = null;
		   PreparedStatement prep = null;
		   String sql = "insert into emp values(?,?,?,?,?)";
		   try {
			   //獲得連接對象
			conn = DBUtils.getConnection();
			  //獲得預編譯對象
		     prep = conn.prepareStatement(sql);
			 //設置參數
			 prep.setString(1,emp.getEname());
			 prep.setString(2, emp.getSex());
			 prep.setInt(3, emp.getAge());
			 prep.setFloat(4, emp.getSal());
			 prep.setInt(5, emp.getDeptno());
			 //發送預編譯文件,執行sql
			 return prep.executeUpdate();		 
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}finally{
			  //關閉資源
			  DBUtils.closeAll(null, prep, conn);
		}
	}
	//刪,依據主鍵刪除
	public int delete(int empno) throws SQLException{
		  //聲明2個核心接口
		   Connection conn = null;
		   PreparedStatement prep = null;
		   String sql = "delete from emp where empno=?";
		   try {
			   //獲得連接對象
			conn = DBUtils.getConnection();
			  //獲得預編譯對象
		     prep = conn.prepareStatement(sql);
			 //設置參數
			 prep.setInt(1,empno);
			 //發送預編譯文件,執行sql
			 return prep.executeUpdate();		 
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}finally{
			  //關閉資源
			  DBUtils.closeAll(null, prep, conn);
		}
	}
	//改
	//只能修改數據庫存在的記錄
	//修改的前提是查詢
	//修改應該能夠修改除主鍵以外所有的字段
	//應該依據主鍵去修改
	//參數emp對象是數據庫存在的記錄,所以它是查詢方法
	//查詢出來的
	public int modify(Emp emp) throws SQLException{
		  //聲明2個核心接口
		  Connection conn = null;
		  PreparedStatement prep = null;
		  //sql
		  String sql = "update emp set ename=?,sex=?,age=?,sal=?,deptno=? where empno=?";
		  try {
			//獲得連接對象
			  conn = DBUtils.getConnection();
			//獲得預編譯對象
			  prep = conn.prepareStatement(sql);
			  //設置參數
			  prep.setString(1, emp.getEname());
			  prep.setString(2, emp.getSex());
			  prep.setInt(3, emp.getAge());
			  prep.setFloat(4, emp.getSal());
			  prep.setInt(5, emp.getDeptno());
			  prep.setInt(6, emp.getEmpno());
			  //發送預編譯文件,執行sql
			  return prep.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}finally{
			 //關閉資源
			DBUtils.closeAll(null, prep, conn);
		}
	}
	
	//查(最複雜)
	//只查詢一條記錄,依據員工編號查詢
	public Emp queryForId(int empno) throws SQLException{
		  //聲明3個核心接口
		 Connection conn = null;
		 PreparedStatement prep = null;
		 ResultSet rs = null;
		 Emp emp = null;
		 //sql
		 String sql = "select * from emp where empno=?";
		 try {
			//獲得連接對象
			 conn = DBUtils.getConnection();
			//獲得預編譯對象
			 prep = conn.prepareStatement(sql);
			 //設置參數
			 prep.setInt(1,empno);
			 //發送預編譯文件,執行sql
			 //獲得結果集對象
			 rs = prep.executeQuery();
			 //遍歷結果集,用結果集中的數據
			 //封裝對象
			 while(rs.next()){
				  emp = new Emp();
				  emp.setEmpno(rs.getInt("empno"));
				  emp.setEname(rs.getString("ename"));
				  emp.setSex(rs.getString("sex"));
				  emp.setAge(rs.getInt("age"));
				  emp.setSal(rs.getFloat("sal"));
				  emp.setDeptno(rs.getInt("deptno"));
			 }
			 return emp;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}finally{
			   //關閉資源
			DBUtils.closeAll(rs, prep, conn);
		}
	}
	//查詢所有的記錄
	public List<Emp> queryAll() throws SQLException{
		  //聲明3個核心接口
		 Connection conn = null;
		 PreparedStatement prep = null;
		 ResultSet rs = null;
		 List<Emp> emps = null;
		 //sql
		 String sql = "select * from emp";
		 try {
			//獲得連接對象
			 conn = DBUtils.getConnection();
			//獲得預編譯對象
			 prep = conn.prepareStatement(sql);
			 //發送預編譯文件,執行sql
			 //獲得結果集對象
			 rs = prep.executeQuery();
			 //遍歷結果集,用結果集中的數據
			 //封裝對象
			 while(rs.next()){
				  if(emps==null){
					  //循環第一次,實例化集合對象
					  emps = new ArrayList<Emp>();
				  }
				  //實例化一個員工對象
				  Emp emp = new Emp();
				  emp.setEmpno(rs.getInt("empno"));
				  emp.setEname(rs.getString("ename"));
				  emp.setSex(rs.getString("sex"));
				  emp.setAge(rs.getInt("age"));
				  emp.setSal(rs.getFloat("sal"));
				  emp.setDeptno(rs.getInt("deptno"));
				  emps.add(emp);
			 }
			 return emps;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}finally{
			   //關閉資源
			DBUtils.closeAll(rs, prep, conn);
		}
	}
}
package demo02;

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

import org.junit.Test;

public class TestDemo {

	 //測試添加
	@Test
	public void testSave() throws SQLException{
		  //創建Dao對象
		  EmpDao dao = new EmpDao();
		  //創建一個員工對象
		  Emp e = new Emp();
		  e.setEname("康熙");
		  e.setSex("男");
		  e.setAge(25);
          e.setSal(20000F);
          e.setDeptno(10);
          int num = dao.save(e);
          if(num==1){
        	   System.out.println("添加成功");
          }
	}
	
	 @Test
	public void test(){
		 //空值調用方法就會拋 NullPointerException
		 String s = null;
		  s.length();
	}
	 
	 @Test
	 public void testDelete() throws SQLException{
		     //創建Dao對象
		 EmpDao dao = new EmpDao();
		 int num = dao.delete(11);
		 if(num==1){
			  System.out.println("刪除成功");
		 }      
	 }
	 
	 @Test
	 public void testQueryForId() throws SQLException{
		   EmpDao dao = new EmpDao();
		   Emp e = dao.queryForId(13);
		   System.out.println(e.getEname()+","+e.getSal());
	 }
	 
	 @Test
	 public void testQueryAll() throws SQLException{
		  EmpDao dao = new EmpDao();
		    List<Emp> es = dao.queryAll();
		    for(Emp e:es){
		    	 System.out.println(e);
		    }
	 }
	 
	 @Test
	 public void testModify() throws SQLException{
		  EmpDao dao = new EmpDao();
		  Emp e = dao.queryForId(13);
		  e.setAge(30);
		  e.setSal(30000F);
		  int num = dao.modify(e);
		  if(num==1){
			   System.out.println("修改成功");
		  }
	 }
}

 

 

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