天天看点

JDBC与数据库编程--使用prepareStatement类实现增删改查

使用prepareStatement类实现增删改查

创建JDBC应用程序的步骤

  1. 载入JDBC驱动程序
  2. 定义连接URL
  3. 建立连接
  4. 创建Statement对象
  5. 执行查询或更新
  6. 结果处理
  7. 关闭连接

    使用prepareStatement类实现增删改查Demo

package com.neuedu.chapter05._JDBC;

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.ArrayList;
import java.util.Arrays;

import com.neuedu.chapter05._JDBCBean.Emp;

public class JDBCPreparedStatement {
//	-------------查询一条数据的方法-------------------
	public Emp selectEmpOne(int empno) {  //返回值为Emp> 类型的 ArrayList集合 
		Connection con = null;  //连接
		PreparedStatement stat = null;  //实现准备的声明
		ResultSet rs = null;  //定义空的结果集
		System.out.println("开始连接程序···");
		try {
			//1.载入JDBC驱动程序 
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// 2.定义连接URL
			String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";// jdbc:oracle:thin:@<主机名或IP>:1521:<数据库名>
			//3.建立连接
			con = DriverManager.getConnection(url, "scott", "123456");
			System.out.println(con);  //用于测试是否成功建立连接,成功控制台会打印con对象的地址值
			//4.创建Statement对象
			stat = con.prepareStatement("select * from emp where empno = ?");  //?表示占位符
			stat.setInt(1, empno);  //第一行第一个问号用empno代替
			//5.执行查询或更新
			rs = stat.executeQuery(); //rs是一张表的数据的集合
			
			//6.结果处理
			Emp emp = null;
			while(rs.next()) {  //一行一行地遍历
				emp = new Emp();
				emp.setEmpno(rs.getInt("empno"));
				//emp.setEname(rs.getString("ename"));
				emp.setJob(rs.getString("job"));
				emp.setMgr(rs.getInt("mgr"));
				emp.setHiredate(rs.getDate("hiredate"));
				emp.setSal(rs.getDouble("sal"));
				emp.setComm(rs.getDouble("empno"));
				emp.setDeptno(rs.getInt("deptno"));
			}
			return emp;  //不出现异常时返回emp
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
//			7.关闭连接(先打开后关闭)
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(con != null) {
					con.close();
				}			
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(stat != null) {
					stat.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
		return null;  //出现异常时返回null
	}
//-------------------插入一条数据的方法-----------------
	public boolean insertEmpOne(Emp emp) {
		Connection con = null;
		PreparedStatement stat = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
			
			String url="jdbc:oracle:thin:@localhost:1521:orcl"; //定义url
			con = DriverManager.getConnection(url,"scott","123456"); //建立连接
					
			stat = con.prepareStatement("insert into emp(empno,job) values (?,?)"); //创建Statement对象
			stat.setInt(1, emp.getEmpno());  //第一个问号用emp.getEmpno()代替
			stat.setString(2, emp.getJob()); //第二问号用emp.getJob()代替
			
			boolean rs = false; 
			int i = stat.executeUpdate();  //stat.executeUpdate()此方法返回SQL语句影响的行数
			if(i>0) {
				rs = true;
				return rs;
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				if(stat != null) {
					stat.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(con != null) {
					con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return false;
	}
	//-------------------更新数据的方法-----------------
	public Boolean updateEmpOne(Emp emp) {
		Connection con = null;
		PreparedStatement stat = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
			
			String url = "jdbc:oracle:thin:@localhost:1521:orcl";  //定义url
			con = DriverManager.getConnection(url,"scott","123456");//建立连接
			stat = con.prepareStatement("update emp set deptno=20 where empno=?"); //创建Statement对象
			stat.setInt(1,emp.getEmpno());//上面SQL语句第一个问号用emp.getEmpno9()替代
			boolean rs = false; 
			int i = stat.executeUpdate(); //stat.executeUpdate()方法返回sql语句影响的行数
			if(i>0) {
				rs = true;
				return rs;
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//关闭资源
			try {
				if(stat != null) {
					stat.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(con != null){
					con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
	}
//	-------------------删除多行的方法-----------------
	
	public Boolean deleteEmps(int[] empnos) {
		Connection con = null;
		PreparedStatement stat = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动包
			String url = "jdbc:oracle:thin:@localhost:1521:orcl";//定义url
			
			con = DriverManager.getConnection(url,"scott","123456");//建立连接
			stat = con.prepareStatement("delete from emp where empno=?");//创建Statement对象
			//处理结果
			for(int i:empnos) {
				stat.setInt(1,i);//循环将传入的empno对应的列删除
				stat.addBatch();
			}
			
			int[] rs = stat.executeBatch();
			System.out.println("批量删除的结果: "+Arrays.toString(rs));
			
			for(int i:rs) {
				if(i<0) {
					System.out.println("00000000 "+i);
					return false;
				}
			}
			return true;		
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//关闭资源
			try {
				if(stat != null) {
					stat.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(con != null) {
					con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
	}
}
           

写一个测试类,一次测试调用上面写方法,查看结果:

需要用哪个方法就将哪个方法的注释去掉,需要把其他的方法添加注释

package com.neuedu.chapter05._JDBC;

import java.util.ArrayList;

import com.neuedu.chapter05._JDBCBean.Emp;

public class TestEmp {
	public static void main(String[] args) {		
//		------------------查询一条信息---------------------
//		JDBCPreparedStatement jdbc = new JDBCPreparedStatement(); 
//		System.out.println(jdbc.selectEmpOne(8888).toString()); //员工编号的8888的员工信息
		//-------------------插入一条信息--------------------
//		JDBCPreparedStatement jdbc = new JDBCPreparedStatement();
//		Emp emp = new Emp();
//		emp.setEmpno(1188);
//		emp.setJob("搬砖");
//		boolean rs = jdbc.insertEmpOne(emp);
//		if(rs) {
//			System.out.println("插入信息成功");
//		}
		//------------------修改一条数据,将编号1199员工部门号改为20------------
		JDBCPreparedStatement jdbc = new JDBCPreparedStatement(); 
		Emp emp = new Emp();
		emp.setDeptno(20);//传入更改的部门号
		emp.setEmpno(1188);  //将员工编号传入
		boolean rs = jdbc.updateEmpOne(emp);  
		if(rs) {
			System.out.println("修改成功!");
		}
		//----------------删除多条数据-------------
//		JDBCPreparedStatement jdbc = new JDBCPreparedStatement(); 
//		int[] empnos = {1199,1188};
//		boolean rs = jdbc.deleteEmps(empnos);
//		if(rs) {
//			System.out.println("批量删除成功!");
//		}else {
//			System.out.println("批量删除bu成功!");
//			}
		
		//测试使用DBUtil工具包方法,改变1188编号员工的工作岗位
//		JDBCPreparedStatement jdbc = new JDBCPreparedStatement(); 
//		Emp emp =new Emp();
//		emp.setEmpno(1188);
//		emp.setJob("搅水泥");
//		boolean rs=jdbc.UpdateEmpOne_DBUtil(emp);
//		if(rs) {
//			System.out.println("修改成功");
//		}
	}
}

           

继续阅读