Advertisement

web中数据库交互操作注意事项

阅读量:

最近在servlet遇到些小问题–数据的交互操作,分享给大家【有详细注解】;


  1. package org.rookie.util;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. //数据库的交互操作,如增,删,查,改;
  8. public class BaseDao {
  9. private Connection conn;
  10. // PreparedStatement表示预编译得SQL语句的对象,也就是说SQL语句被预编译并存储在PreparedStatement对象中,
  11. // 然后可以使用此对象多次高效地执行改语句
  12. private PreparedStatement ps;
  13. private ResultSet rs;
  14. //获得连接
  15. private void getConnection(){
  16. try {
  17. //1.注册驱动
  18. Class.forName(“com.mysql.jdbc.Driver”);
  19. //2.获取连接
  20. String url=”jdbc:mysql://localhost:3306/booksys”;
  21. //3.通过数据库名+用户名+密码连接该9(booksys)数据库
  22. conn=DriverManager.getConnection(url,”root”,”root”);
  23. } catch (ClassNotFoundException e) {
  24. e.printStackTrace();
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. //关闭数据库,注意顺序
  30. /**
  31. (1)由于垃圾回收的线程级别是最低的,为了充分利用数据库资源,有必要显式关闭它们,尤其是使用Connection
  32. Pool的时候;
  33. (2)最优经验是按照ResultSet,Statement(PreparedStatement),Connection的顺序执行close;
  34. (3)为了避免由于java代码有问题导致内存泄露,需要在rs.close和stmt.close()后面一定要加上rs = null和stmt = null;
  35. (4)如果一定要传递ResultSet,应该使用RowSet,RowSet可以不依赖于Connection和Statement。Java传递的是引用,
  36. 所以如果传递ResultSet,你会不知道Statement和Connection何时关闭,不知道ResultSet何时有效。
    • */
  37. public void close(){
  38. if(rs!=null)
  39. try {
  40. rs.close();
  41. } catch (SQLException e) {
  42. e.printStackTrace();
  43. }
  44. if(ps!=null)
  45. try {
  46. ps.close();
  47. } catch (SQLException e) {
  48. e.printStackTrace();
  49. }
  50. if(conn!=null)
  51. try {
  52. conn.close();
  53. } catch (SQLException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. //做更新操作–增,删,改;
  58. /*理解(Object…objects)
  59. 当形参为Object[]数组时,调用该方法必须为一个数组
  60. 当形参为Object…objects时,调用就相当灵活了,可以不带参数,可以带一个参数或者多个参数,也可以带数组作为参数*/
  61. public int executeUpdate(String sql,Object…objects){
  62. this.getConnection();
  63. try {
  64. ps=conn.prepareStatement(sql);
  65. if(objects!=null)
  66. for(int i=0;i<objects.length;i++){
  67. ps.setObject(i+1, objects[i]);
  68. }
  69. return ps.executeUpdate();
  70. } catch (SQLException e) {
  71. e.printStackTrace();
  72. }finally{
  73. this.close();
  74. }
  75. return -1;
  76. }
  77. //查询
  78. // 结果集(ResultSet)是数据中查询结果返回的一种对象
  79. public ResultSet executeQuery(String sql,Object…objects){ //ResultSet接口
  80. this.getConnection();
  81. try {
  82. ps=conn.prepareStatement(sql); //预编译执行SQl语句
  83. if(objects!=null)
  84. for(int i=0;i<objects.length;i++){
  85. ps.setObject(i+1, objects[i]);
  86. }
  87. return rs=ps.executeQuery(); //返回结果集
  88. } catch (SQLException e) {
  89. e.printStackTrace();
  90. }
  91. return null;
  92. }
  93. }

全部评论 (0)

还没有任何评论哟~