使用prepareStatement类实现增删改查
创建JDBC应用程序的步骤
- 载入JDBC驱动程序
- 定义连接URL
- 建立连接
- 创建Statement对象
- 执行查询或更新
- 结果处理
-
关闭连接
使用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("修改成功");
// }
}
}