JDBC 增删改的操作(1)
JDBC 增删改的操作(1)
一、项目使用技术
封装数据库连接、关闭方法和封装数据库增、删、改、查方法,实现Java项目连接数据库,实现基础的JDBC操作。
二、使用示例
1、项目准备
1)创建数据库
创建jdbc_test
数据库,在此数据库中创建student
表,设置id
属性、name
属性、age
属性,分别存放学生id
信息、名称和年龄,id属性设置为int
类型,为自增长,name
属性设置为varhcar(25)
,age
属性设置为int
类型。
2)导入jar包
将druid-1.1.10.jar
和mysql-connector-java-5.1.48-bin.jar
导入项目中
2、设置配置文件jdbc.properties
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbc_test
username = root
password = root
maxActive = 20
maxWait = 10000
3、写JDBC连接的工具类
JDBCUtils.class
主要应用于数据库的连接、关闭,方便相关增删改操作的调用,提高代码的复用性。
public class JDBCUtils {
//2.创建DateSource实现类对象(推荐懒汉式)
private static DataSource ds;
//1.私有化构造器,不让外界通过新建构造器进行访问
private JDBCUtils() {}
//3.给DataSource进行初始化
static {
try {
Properties pro= new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
throw new RuntimeException("DataSource初始化错误");
}
}
//4.提供获取链接对象公共的访问方式
public static Connection getConnection () throws SQLException {
if (ds != null) {
return ds.getConnection();
}
throw new RuntimeException("DataSource初始化错误");
}
//5.封装对象关闭方法
public static void close (Connection con) {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
throw new RuntimeException("Connection连接对象关闭异常");
}
}
}
//6.封装增删改连接对象的方法
public static void close (Statement st ,Connection con) {
if (st != null) {
try {
st.close();
} catch (SQLException e) {
throw new RuntimeException("StatementSQL发送对象关闭异常");
}
}
close(con);
}
public static void close (ResultSet rs ,Statement st ,Connection con) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
throw new RuntimeException("ResultSet结果集对象关闭异常");
}
}
close(st,con);
}
}
4、将数据库中数据生成JavaBean文件
public class Student {
private int id;
private String name;
private int age;
public Student() { }
//生成一个除id外的其他两个的构造器,id在数据库中为自增
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写toString()方法,方便打印输出查看
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
5、增删改查等接口文件
public interface StudentBasicDAO {
//提供添加学生对象的方法
void addStudent (Student s);
//提供删除学生对象的方法
void deleteStudent (int sid);
//提供修改学生对象的方法
void updateStudent(Student s);
//提供查询所有学生的方法
List<Student> getAllStudent();
//提供通过指定ID查询学生的方法
Student getStudent(int sid);
}
6、StudentBasicDAOImpl实现类
public class StudentBasicDAOImpl implements StudentBasicDAO {
//重写父类接口中的增加学生的方法
@Override
public void addStudent(Student s) {
Connection con = null;
PreparedStatement ps = null;
try {
//获取数据库连接对象
con = JDBCUtils.getConnection();
//添加新增的SQL语句,数据库中的id为自增故而不进行插入
String sql = "insert into student values(null, ?, ?)";
//获取SQL语句的发送对象
ps = con.prepareStatement(sql);
//确定?问号处的数据
ps.setString(1, s.getName());
ps.setInt(2, s.getAge());
//发送SQL语句
ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException();
}finally {
JDBCUtils.close(ps , con);
}
}
//重写接口中删除学生的方法
@Override
public void deleteStudent(int sid) {
Connection con = null;
PreparedStatement ps = null;
try {
con = JDBCUtils.getConnection();
String sql = "delete from student where id = ?";
ps = con.prepareStatement(sql);
ps.setInt(1, sid);
ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException();
}finally {
JDBCUtils.close(ps , con);
}
}
//重写接口中修改学生信息方法
@Override
public void updateStudent(Student s) {
Connection con = null;
PreparedStatement ps = null;
try {
con = JDBCUtils.getConnection();
String sql = "update student set name = ? ,age = ? where id = ?";
ps = con.prepareStatement(sql);
ps.setString(1, s.getName());
ps.setInt(2, s.getAge());
ps.setInt(3, s.getId());
ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException();
}finally {
JDBCUtils.close(ps , con);
}
}
@Override
public List<Student> getAllStudent() {
Connection con = null;
PreparedStatement ps = null;
ArrayList<Student> list = null;
ResultSet rs = null;
try {
con = JDBCUtils.getConnection();
String sql = "select * from student";
list = new ArrayList<>();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
Student stu = new Student(id, name, age);
list.add(stu);
}
} catch (SQLException e) {
throw new RuntimeException();
}finally {
JDBCUtils.close(rs, ps, con);
}
//如果没有异常将返回student对象的集合
return list;
}
//重写接口中获取指定id号学生记录信息
@Override
public Student getStudent(int sid) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
Student s = null;
try {
//获取数据库连接
con = JDBCUtils.getConnection();
//获取sql语句
String sql = "select * from student where id = ?";
//获取发送对象
ps = con.prepareStatement(sql);
//处理?处信息
ps.setInt(1, sid);
//发送sql语句信息
rs = ps.executeQuery();
//解析结果集
//游标需要移动才能获取经过的值
rs.next();
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
s = new Student(id, name, age);
} catch (SQLException e) {
throw new RuntimeException();
}finall{
//调用工具类方法,关闭与数据库的连接
JDBCUtils.close(rs, ps, con);
}
return s;
}
}
7、JDBCDemo测试类
public class JDBCDemo {
//为了使静态方法中可以调用dao,添加static关键字
static StudentBasicDAOImpl dao = new StudentBasicDAOImpl();
public static void main(String[] args) throws Exception {
//Connection con = JDBCUtils.getConnection();
//System.out.println(con);
//往数据库中添加sudent对象
addStudent();
//删除id为10的学生记录
deleteStudent();
//修改id号为12的学生信息,name修改为海绵宝宝,age为12
updateStudent();
//获取所有的学生对象
getAllStudent();
//获取指定学生对象
getStudent();
}
//增加学生记录
private static void addStudent() {
dao.addStudent(new Student("派大星",4));
dao.addStudent(new Student("海绵宝宝",4));
dao.addStudent(new Student("章鱼哥",4));
}
//删除学生记录
private static void deleteStudent(){
//删除id号为4的学生记录
dao.deleteStudent(4);
}
//修改指定学生记录的信息
private static void updateStudent(){
Student s = dao.getStudent(1);
s.setAge(22);
dao.updateStudent(s);
}
//获取指定学生对象的方法
private static void getStudent() {
Student student = dao.getStudent(3);
System.out.println("id号为3的学生信息如下:");
System.out.println(student);
}
//获取所有学生对象的方法
private static void getAllStudent() {
List<Student> allStudent = dao.getAllStudent();
System.out.println("所有学生信息如下:");
//直接输出
System.out.println(allStudent);
//遍历输出
ListIterator<Student> sli = allStudent.listIterator();
while (sli.hasNext()){
System.out.println(sli.next());
}
}
}