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("修改成功");
		  }
	 }
}

 

 

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