首页 > 学院 > 开发设计 > 正文

四个月的蜕变之JDBC的四个步骤和代码实现

2019-11-09 13:28:23
字体:
来源:转载
供稿:网友
JDBC是从java中连接MySQL数据库的驱动,我们可以使用编程语言来实现它,其实它的实现是固定的,只用按照这个思路和步骤就可以了。实现分为下面四个步骤:1.注册驱动2.获得连接对象3.获取statement对象

4.释放资源

在我们编程时如果需要操作数据库只需要按照这四个步骤就可以了。

我事先在Navicat for MySQL中建了一个store数据库,并且创建了一个有四个字段的学生表,如下图:

因为操作数据库无外乎增删改查这些,如果单单每一种操作都重新写代码的话,会显得冗余复杂,太LOW了,所以可以适当的对代码进行优化,具体的实现如下:测试用得学生类如下:
package cn.edu360.entity;public class Student {	PRivate Integer id;	private String name;	private String gender;	private int age;	public Student() {	}	public Student(Integer id, String name, String gender, int age) {		super();		this.id = id;		this.name = name;		this.gender = gender;		this.age = age;	}	@Override	public String toString() {		return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";	}	public Integer getId() {		return id;	}	public void setId(Integer id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getGender() {		return gender;	}	public void setGender(String gender) {		this.gender = gender;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}}将四个步骤中的1、2、4封装成cn.edu360.utils如下:
package cn.edu360.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/* * JDBC四个步骤 */public class JDBCUtils {	private static String driverName = "com.mysql.jdbc.Driver";	private static String jdbc_url = "jdbc:mysql://localhost:3306/store";	private static String username = "root";	private static String passWord = "12580";	// 1.注册驱动,只需要注册一次即可(在静态代码中执行一次即可)	static {		try {			Class.forName(driverName);		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}	// 2.获得连接对象,以后需要多次获得	public static Connection getConnection() {		try {			return DriverManager.getConnection(jdbc_url, username, password);		} catch (SQLException e) {			e.printStackTrace();		}		return null;	}	// 3.获取statement对象,需要反复执行,不需要定义这个方法了	// 4.释放资源,需要反复执行的(使用方法的重载来定义两个不同参数列表的释放方法)	public static void release(Statement stmt, Connection connection) {		if (stmt != null) {			try {				stmt.close();			} catch (SQLException e) {				e.printStackTrace();			}			stmt = null;		}		if (connection != null) {			try {				connection.close();			} catch (SQLException e) {				e.printStackTrace();			}			connection = null;		}	}	public static void release(ResultSet rs, Statement stmt, Connection connection) {		if (rs != null) {			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}			rs = null;		}		if (stmt != null) {			try {				stmt.close();			} catch (SQLException e) {				e.printStackTrace();			}			stmt = null;		}		if (connection != null) {			try {				connection.close();			} catch (SQLException e) {				e.printStackTrace();			}			connection = null;		}	}}增删改查封装成cn.edu360.dao如下:
package cn.edu360.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import cn.edu360.entity.Student;import cn.edu360.utils.JDBCUtils;public class StudentDao {	/**	 * 添加数据到MySQL中	 * 	 * @param student	 */	public void save(Student student) {		// 获得connection		Connection connection = JDBCUtils.getConnection();		PreparedStatement prepareStatement = null;		// 创建Statement对象		// 定义一个sql		String sql = "INSERT INTO student VALUES (?, ?, ?, ?)";		try {			prepareStatement = connection.prepareStatement(sql);						prepareStatement.setInt(1, student.getId());			prepareStatement.setString(2, student.getName());			prepareStatement.setString(3, student.getGender());			prepareStatement.setInt(4, student.getAge());			// 执行sql语句			prepareStatement.executeUpdate();		} catch (SQLException e) {			e.printStackTrace();		}		// 释放资源		JDBCUtils.release(prepareStatement, connection);	}	/**	 * 根据ID号删除数据	 * 	 * @param id	 */	public void deleteById(Integer id) {		// 获得connection		Connection connection = JDBCUtils.getConnection();		PreparedStatement prepareStatement = null;		// 创建Statement对象		// 定义一个sql		String sql = "DELETE FROM student WHERE id = ?";		try {			prepareStatement = connection.prepareStatement(sql);			prepareStatement.setInt(1, id);			// 执行sql语句			prepareStatement.executeUpdate();		} catch (SQLException e) {			e.printStackTrace();		}		// 释放资源		JDBCUtils.release(prepareStatement, connection);	}	/**	 * 更新学生信息	 * 	 * @param student	 */	public void update(Student student) {		// 获得connection		Connection connection = JDBCUtils.getConnection();		PreparedStatement prepareStatement = null;		// 创建Statement对象		// 定义一个sql		String sql = "UPDATE student SET name = ? , gender = ? , age = ? WHERE id = ?";		try {			prepareStatement = connection.prepareStatement(sql);			prepareStatement.setString(1, student.getName());			prepareStatement.setString(2, student.getGender());			prepareStatement.setInt(3, student.getAge());			prepareStatement.setInt(4, student.getId());			// 执行sql语句			prepareStatement.executeUpdate();		} catch (SQLException e) {			e.printStackTrace();		}		// 释放资源		JDBCUtils.release(prepareStatement, connection);	}	/**	 * 根据ID号查找学生信息	 * 	 * @param id	 * @return	 */	public Student getById(Integer id) {		Student s = null;		// 获得connection		Connection connection = JDBCUtils.getConnection();		PreparedStatement prepareStatement = null;		ResultSet rs =null;		// 创建Statement对象		// 定义一个sql		String sql = "SELECT * FROM student WHERE id = ?";		try {			prepareStatement = connection.prepareStatement(sql);			prepareStatement.setInt(1,id);			// 执行sql语句			rs = prepareStatement.executeQuery();			// 从rs中得到数据			rs.next();			Integer sid = rs.getInt(1);			String name = rs.getString(2);			String gender = rs.getString(3);			int age = rs.getInt(4);			s = new Student();			s.setId(sid);			s.setName(name);			s.setGender(gender);			s.setAge(age);		} catch (SQLException e) {			e.printStackTrace();		}		// 释放资源		JDBCUtils.release(rs,prepareStatement, connection);		return s;	}	/**	 * 查找所有学生信息	 * 	 * @return	 */	public List<Student> findAll() {		ArrayList<Student> list = new ArrayList<Student>();		// 获得connection		Connection connection = JDBCUtils.getConnection();		PreparedStatement prepareStatement = null;		ResultSet rs = null;		// 创建Statement对象		// 定义一个sql		String sql = "SELECT * FROM student";		try {			prepareStatement = connection.prepareStatement(sql);			// 执行sql语句			rs = prepareStatement.executeQuery();			while (rs.next()) {				// 从rs中得到数据				Integer sid = rs.getInt(1);				String name = rs.getString(2);				String gender = rs.getString(3);				int age = rs.getInt(4);				Student s = new Student();				s.setId(sid);				s.setName(name);				s.setGender(gender);				s.setAge(age);				list.add(s);			}		} catch (SQLException e) {			e.printStackTrace();		}		// 释放资源		JDBCUtils.release(rs,prepareStatement, connection);		return list;	}}

测试代码如下:

package cn.edu360.test;import java.util.List;import org.junit.Test;import cn.edu360.dao.StudentDao;import cn.edu360.entity.Student;public class TestDao {	@Test	public void testSave() {		StudentDao dao = new StudentDao();		Student s = new Student(11, "tom", "f", 20);		dao.save(s);	}	@Test	public void testDelete() {		StudentDao dao = new StudentDao();		dao.deleteById(11);	}	@Test	public void testUpdate() {		StudentDao dao = new StudentDao();		Student s = new Student(1, "zhaozhoa", "m", 18);		dao.update(s);	}	@Test	public void testGetById() {		StudentDao dao = new StudentDao();		Student s = dao.getById(2);		System.out.println(s);	}	@Test	public void testFindAll() {		StudentDao dao = new StudentDao();		List<Student> list = dao.findAll();		for (Student s : list) {			System.out.println(s);		}	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表