当前位置:   article > 正文

JDBC编程实例(带注释,详细)_jdbc 案例

jdbc 案例

 

 

JDBC编程过程中,主要经历了如下几个阶段:

1、加载数据库驱动(Driver);

2、创建数据库连接(Connection);

3、创建Statement对象(Statement,PreparedStatement);

4、执行SQL语句(execute,executeUpdate,executeQuery);

5、释放资源。

在之前的文章中,详细的介绍了JDBC编程的每个步骤,今天特地编写了一个实例,附带了详细的注意,可以供初学者参考。

案例:

1、在mysql中创建一个数据表employee,表中保存id,name,age,sex四个字段,随意存入几组数据,如下如所示:

2、创建employee数据表对应的employee类,类中包含id,name,age和sex四个变量,如下所示:

  1. package com.emp.jdbc;
  2. /**
  3. * @author chengjunyu
  4. * @deprecated 与数据表employee对应的类
  5. */
  6. public class Employee {
  7. //数据私有化,提供对外访问的接口
  8. private Integer id;
  9. private String name;
  10. private Integer age;
  11. private String sex;
  12. //无参构造器
  13. public Employee() {
  14. }
  15. //带参构造器
  16. public Employee(Integer id,String name,Integer age,String sex) {
  17. super();
  18. this.id = id;
  19. this.name = name;
  20. this.age = age;
  21. this.sex = sex;
  22. }
  23. //查询时需要输出,所以在该类中重写toString()方法
  24. public String toString() {
  25. return "Employee [id="+id+",name="+name+",age="+age+"sex"+sex+"]";
  26. }
  27. //对外提供数据访问的get和set接口
  28. public Integer getId() {
  29. return id;
  30. }
  31. public void setId(Integer id) {
  32. this.id = id;
  33. }
  34. public String getName() {
  35. return name;
  36. }
  37. public void setName(String name) {
  38. this.name = name;
  39. }
  40. public Integer getAge() {
  41. return age;
  42. }
  43. public void setAge(Integer age) {
  44. this.age = age;
  45. }
  46. public String getSex() {
  47. return sex;
  48. }
  49. public void setSex(String sex) {
  50. this.sex = sex;
  51. }
  52. }

3、创建JDBC的工具类,工具类中封装JDBC编程中通用的方法,包含数据库驱动加载、数据库连接和资源释放,如下所示:

  1. package com.emp.jdbc;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. /**
  8. * @author chengjunyu
  9. * @deprecated JDBC工具类
  10. */
  11. public class JUtil {
  12. /**
  13. * JDBC编程步骤:
  14. * 1、加载驱动;
  15. * 2、获取连接;
  16. * 3、创建Statement对象;
  17. * 4、执行SQL;
  18. * 5、释放资源。
  19. */
  20. private static final String DRIVERNAME = "com.mysql.jdbc.Driver";
  21. private static final String URL = "jdbc:mysql://localhost:3307/school";
  22. private static final String USERNAME = "root";
  23. private static final String PASSWORD = "chengjunyu";
  24. //1、加载驱动,在整个过程过只要加载一次,我这里在静态块中进行加载
  25. static {
  26. try {
  27. Class.forName(DRIVERNAME);
  28. }catch (Exception e) {
  29. e.printStackTrace();
  30. System.out.println("驱动加载失败!");
  31. }
  32. }
  33. //2、驱动加载完成后,获取Connection连接对象,在整个过程中需要进行多次获取
  34. public static Connection getConnection() {
  35. try {
  36. return DriverManager.getConnection(URL, USERNAME, PASSWORD);
  37. }catch(SQLException e) {
  38. e.printStackTrace();
  39. return null;
  40. }
  41. }
  42. //3、创建Statement对象,代码未写在该类中,写在了EmployeeDao类中,案例通过PreparedStatement进行预编译
  43. //4、执行SQL语句并获取结果集,代码未写在该类中,写在了EmployeeDao类中
  44. //5、释放资源,因为在数据库的增删该查中涉及到有结果集的和没有结果集的,所有对释放资源的方法进行了重载
  45. //增加、修改、删除操作时不带ResultSet,用该方法释放资源
  46. public static void release(Connection conn,Statement stmt) {
  47. //关闭Connection连接
  48. if(conn != null) {
  49. try {
  50. conn.close();
  51. System.out.println("Connection连接已关闭!");
  52. }catch (SQLException e) {
  53. e.printStackTrace();
  54. System.out.println("Connection连接关闭失败!");
  55. }
  56. }
  57. //关闭Statement对象
  58. if(stmt != null) {
  59. try {
  60. stmt.close();
  61. }catch (SQLException e) {
  62. e.printStackTrace();
  63. System.out.println("Statement对象关闭失败!");
  64. }
  65. }
  66. }
  67. //查询操作时带ResultSet,用该方法释放资源
  68. public static void release(Connection conn,Statement stmt,ResultSet rs) {
  69. //关闭Connection连接
  70. if(conn != null) {
  71. try {
  72. conn.close();
  73. System.out.println("Connection连接已关闭!");
  74. }catch(SQLException e) {
  75. e.printStackTrace();
  76. System.out.println("Connection连接关闭失败!");
  77. }
  78. }
  79. //关闭Statement对象
  80. if(stmt != null) {
  81. try {
  82. stmt.close();
  83. System.out.println("Statement对象已关闭!");
  84. }catch (SQLException e) {
  85. e.printStackTrace();
  86. System.out.println("Statement对象关闭失败!");
  87. }
  88. }
  89. //关闭ResultSet结果集
  90. if(rs != null) {
  91. try {
  92. rs.close();
  93. System.out.println("ResultSet结果集已关闭!");
  94. }catch (SQLException e) {
  95. e.printStackTrace();
  96. System.out.println("ResultSet结果集关闭失败!");
  97. }
  98. }
  99. }
  100. }

4、创建操作employee表中数据的EmployeeDao类,在该类中定义了数据库中的增删查改操作方法,如下所示:

  1. package com.emp.jdbc;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. /*
  9. * @author chengjunyu
  10. * @deprecated SQL语句执行方法
  11. */
  12. public class EmployeeDao {
  13. /**
  14. * 保存员工信息到数据库中
  15. * @param emp
  16. */
  17. public void save(Employee emp) {
  18. Connection conn = null;
  19. PreparedStatement ps = null;
  20. //定义保存的SQL语句
  21. String sql = "insert into employee values(?,?,?,?)";
  22. try {
  23. //建立数据库连接
  24. conn = JUtil.getConnection();
  25. //创建Statement对象,对SQL语句进行预编译
  26. ps = conn.prepareStatement(sql);
  27. ps.setInt(1, emp.getId());
  28. ps.setString(2, emp.getName());
  29. ps.setInt(3, emp.getAge());
  30. ps.setString(4, emp.getSex());
  31. //执行SQL语句
  32. ps.executeUpdate();
  33. System.out.println("员工信息保存成功!");
  34. }catch(SQLException e) {
  35. e.printStackTrace();
  36. System.out.println("员工信息保存失败!");
  37. }
  38. //执行完成后关闭连接,释放资源,此方法为保存,无结果集,调用release(Connection conn,Statement stmt)
  39. JUtil.release(conn, ps);
  40. }
  41. /**
  42. * 通过ID查询数据库中的员工信息
  43. * @param id
  44. */
  45. public Employee queryById(Integer id) {
  46. //创建员工对象
  47. Employee emp = null;
  48. Connection conn = null;
  49. PreparedStatement ps = null;
  50. ResultSet rs = null;
  51. //定义根据ID查询的SQL语句
  52. String sql = "select * from employee where id =?";
  53. try {
  54. //建立数据库连接
  55. conn = JUtil.getConnection();
  56. //创建Statement对象并对SQL语句进行预编译
  57. ps = conn.prepareStatement(sql);
  58. ps.setInt(1, id);
  59. //获取结果集
  60. rs = ps.executeQuery();
  61. rs.next();
  62. Integer empId = rs.getInt(1);
  63. String name = rs.getString(2);
  64. Integer age = rs.getInt(3);
  65. String sex = rs.getString(4);
  66. emp = new Employee();
  67. emp.setId(empId);
  68. emp.setName(name);
  69. emp.setAge(age);
  70. emp.setSex(sex);
  71. }catch (SQLException e) {
  72. e.printStackTrace();
  73. System.out.println("查询失败!");
  74. }
  75. //查询完成后断开连接,释放资源
  76. JUtil.release(conn, ps, rs);
  77. //返回对象,后面的测试类中获取对象并打印
  78. return emp;
  79. }
  80. /**
  81. * 查询所有员工信息
  82. */
  83. public List<Employee> queryAll() {
  84. //创建Employee对象
  85. Employee emp = null;
  86. //创建一个list,后面读取的员工信息保存在list中
  87. ArrayList<Employee> list = new ArrayList<>();
  88. Connection conn = null;
  89. PreparedStatement ps = null;
  90. ResultSet rs = null;
  91. //定义一个查询所有信息的SQL语句
  92. String sql = "select * from employee";
  93. try {
  94. //建立Connection连接
  95. conn = JUtil.getConnection();
  96. //创建Statement对象并对SQL语句进行预编译
  97. ps = conn.prepareStatement(sql);
  98. //执行SQL语句获取结果集
  99. rs = ps.executeQuery();
  100. if(rs.next()) {
  101. Integer id = rs.getInt(1);
  102. String name = rs.getString(2);
  103. Integer age = rs.getInt(3);
  104. String sex = rs.getString(4);
  105. emp = new Employee();
  106. emp.setId(id);
  107. emp.setName(name);
  108. emp.setAge(age);
  109. emp.setSex(sex);
  110. list.add(emp);
  111. }
  112. }catch (SQLException e) {
  113. e.printStackTrace();
  114. System.out.println("数据查询失败!");
  115. }
  116. //查询结束后断开Connection等连接,释放资源
  117. JUtil.release(conn, ps, rs);
  118. //返回list集合
  119. return list;
  120. }
  121. /**
  122. * 修改员工信息并更新数据表
  123. */
  124. public void updateById(Employee emp) {
  125. Connection conn = null;
  126. PreparedStatement ps = null;
  127. //定义一个update的SQL语句
  128. String sql = "update employee set name=?,age=?,sex=? where id=?";
  129. try {
  130. //创建数据库连接
  131. conn = JUtil.getConnection();
  132. //创建Statement对象并对SQL语句进行预编译
  133. ps = conn.prepareStatement(sql);
  134. ps.setString(1, emp.getName());
  135. ps.setInt(2, emp.getAge());
  136. ps.setString(3, emp.getSex());
  137. ps.setInt(4, emp.getId());
  138. //执行SQL语句
  139. ps.executeUpdate();
  140. System.out.println("员工信息更新成功!");
  141. }catch (SQLException e) {
  142. e.printStackTrace();
  143. System.out.println("员工信息更新失败!");
  144. }
  145. //更新完成后,断开连接,释放资源
  146. JUtil.release(conn, ps);
  147. }
  148. /**
  149. * 根据员工ID删除员工信息
  150. * @param id
  151. */
  152. public void deleteById(Integer id) {
  153. Connection conn = null;
  154. PreparedStatement ps = null;
  155. //定义一个delete的SQL语句
  156. String sql = "delete from employee where id = ?";
  157. try {
  158. //建立数据库连接
  159. conn = JUtil.getConnection();
  160. //创建Statement对象并对SQL语句进行预编译
  161. ps = conn.prepareStatement(sql);
  162. ps.setInt(1, id);
  163. //执行SQL语句
  164. ps.executeUpdate();
  165. System.out.println("员工信息删除成功!");
  166. }catch (SQLException e) {
  167. e.printStackTrace();
  168. System.out.println("员工信息删除失败!");
  169. }
  170. //删除完成后,断开连接,释放资源
  171. JUtil.release(conn, ps);
  172. }
  173. }

5、在测试类中对EmployeeDao中方法进行测试,测试是需要在Buildpath中导入Junit这个jar包,如下所示:

  1. @Test
  2. //保存员工信息
  3. public void save() {
  4. EmployeeDao dao = new EmployeeDao();
  5. Employee emp = new Employee(8,"tim",27,"female");
  6. dao.save(emp);
  7. }
  8. /*员工信息保存成功!
  9. Connection连接已关闭!*/

  1. @Test
  2. //根据员工ID查询员工信息
  3. public void queryById() {
  4. EmployeeDao dao = new EmployeeDao();
  5. Employee emp = dao.queryById(6);
  6. System.out.println(emp);
  7. }
  8. /*
  9. * Connection连接已关闭!
  10. *Statement对象已关闭!
  11. *ResultSet结果集已关闭!
  12. *Employee [id=6,name=Marven,age=28,sex=male]
  13. */
  1. @Test
  2. //查找全部员工信息
  3. public void queryAll() {
  4. EmployeeDao dao = new EmployeeDao();
  5. List<Employee> list = dao.queryAll();
  6. for(Employee employee : list) {
  7. System.out.println(employee);
  8. }
  9. }
  10. /*Statement对象已关闭!
  11. ResultSet结果集已关闭!
  12. Employee [id=1,name=Tom,age=27,sex=male]
  13. Employee [id=2,name=Hellen,age=26,sex=female]
  14. Employee [id=3,name=Amy,age=27,sex=female]
  15. Employee [id=4,name=Tony,age=28,sex=male]
  16. Employee [id=6,name=Marven,age=28,sex=male]
  17. Employee [id=7,name=Mike,age=29,sex=male]
  18. Employee [id=8,name=tim,age=27,sex=female]*/
  1. @Test
  2. //更新员工信息
  3. public void update() {
  4. EmployeeDao dao = new EmployeeDao();
  5. Employee emp = new Employee(5,"ali",22,"female");
  6. dao.update(emp);
  7. }
  8. /*员工信息更新成功!
  9. Connection连接已关闭!*/

 

  1. @Test
  2. public void delete() {
  3. EmployeeDao dao = new EmployeeDao();
  4. dao.deleteById(8);
  5. }
  6. /*员工信息删除成功!
  7. Connection连接已关闭!*/

测试类的完整代码如下:

 

  1. package com.emp.jdbc;
  2. import java.util.List;
  3. import org.junit.Test;
  4. /**
  5. * @author chengjunyu
  6. * @deprecated Employee测试类
  7. */
  8. public class EmployeeTest {
  9. @Test
  10. //保存员工信息
  11. public void save() {
  12. EmployeeDao dao = new EmployeeDao();
  13. Employee emp = new Employee(8,"tim",27,"female");
  14. dao.save(emp);
  15. }
  16. @Test
  17. //根据员工ID查找员工信息
  18. public void queryById() {
  19. EmployeeDao dao = new EmployeeDao();
  20. Employee emp = dao.queryById(6);
  21. System.out.println(emp);
  22. }
  23. @Test
  24. //查找全部员工信息
  25. public void queryAll() {
  26. EmployeeDao dao = new EmployeeDao();
  27. List<Employee> list = dao.queryAll();
  28. for(Employee employee : list) {
  29. System.out.println(employee);
  30. }
  31. }
  32. @Test
  33. //更新员工信息
  34. public void update() {
  35. EmployeeDao dao = new EmployeeDao();
  36. Employee emp = new Employee(4,"ali",22,"female");
  37. dao.update(emp);
  38. }
  39. @Test
  40. //根据员工ID删除员工信息
  41. public void delete() {
  42. EmployeeDao dao = new EmployeeDao();
  43. dao.deleteById(8);
  44. }
  45. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/848019
推荐阅读
相关标签
  

闽ICP备14008679号