Java学习系列(十九)Java面向对象之数据库编程

JDBC(Java Data Base Connectivity:java数据库连接):它定义了一组标准的操作数据库的接口,既然是接口,那它就是一种规范,是Java操作数据库的技术规范。

Java数据库编程有两步常用操作

1.加载(或注册)JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”); 推荐这种方式,不会对具体的驱动类产生依赖。
DriverManager.registerDriver(com.mysql.jdbc.Driver); 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

2.建立数据库Connection
Connection conn = DriverManager.getConnection(url, user, password);DriverManager是一个驱动管理器,内部有一个驱动注册表(Map结构),可以向其注册多个JDBC驱动。

举例说明1:

Java代码 收藏代码
  1. /**
  2. *@authorlhy
  3. *@description数据库工具类
  4. */
  5. publicclassDBUtil{
  6. //创建连接
  7. publicstaticConnectioncreateConn(){
  8. Connectionconn=null;
  9. try{
  10. //加载驱动程序
  11. Class.forName("com.mysql.jdbc.Driver");
  12. //获取连接(这里用户名为root,密码为空)
  13. conn=DriverManager.getConnection(
  14. "jdbc:mysql://localhost:3306/test","root","");
  15. }catch(ClassNotFoundExceptione){
  16. e.printStackTrace();
  17. }catch(SQLExceptione){
  18. e.printStackTrace();
  19. }
  20. returnconn;
  21. }
  22. //创建回话,获取预处理语句(可以防止sql语句注入)
  23. publicstaticPreparedStatementprepare(Connectionconn,Stringsql){
  24. PreparedStatementps=null;
  25. try{
  26. ps=conn.prepareStatement(sql);
  27. }catch(SQLExceptione){
  28. e.printStackTrace();
  29. }
  30. returnps;
  31. }
  32. //关闭连接
  33. publicstaticvoidclose(Connectionconn){
  34. if(conn!=null){
  35. try{
  36. conn.close();
  37. conn=null;
  38. }catch(SQLExceptione){
  39. e.printStackTrace();
  40. }
  41. }
  42. }
  43. //关闭回话
  44. publicstaticvoidclose(Statementst){
  45. if(st!=null){
  46. try{
  47. st.close();
  48. st=null;
  49. }catch(SQLExceptione){
  50. e.printStackTrace();
  51. }
  52. }
  53. }
  54. //关闭查询结果集
  55. publicstaticvoidclose(ResultSetrs){
  56. if(rs!=null){
  57. try{
  58. rs.close();
  59. rs=null;
  60. }catch(SQLExceptione){
  61. e.printStackTrace();
  62. }
  63. }
  64. }
  65. }

下面用户表为例,调用Statement对象的executeQuery()方法或executeUpdate()方法,让DBMS 执行具体的SQL语句,以便对数据执行查询、增、删、改等操作;
我们先建好一张用户表(user,数据库为test)

Java学习系列(十九)Java面向对象之数据库编程

创建实体类(User):

Java代码 收藏代码
  1. publicclassUser{
  2. privateintid;
  3. privateStringusername;
  4. privateStringpassword;
  5. publicUser(){
  6. }
  7. publicUser(intid,Stringusername,Stringpassword){
  8. this.id=id;
  9. this.username=username;
  10. this.password=password;
  11. }
  12. publicintgetId(){
  13. returnid;
  14. }
  15. publicvoidsetId(intid){
  16. this.id=id;
  17. }
  18. publicStringgetUsername(){
  19. returnusername;
  20. }
  21. publicvoidsetUsername(Stringusername){
  22. this.username=username;
  23. }
  24. publicStringgetPassword(){
  25. returnpassword;
  26. }
  27. publicvoidsetPassword(Stringpassword){
  28. this.password=password;
  29. }
  30. @Override
  31. publicStringtoString(){
  32. return"User[id="+id+",password="+password+",username="
  33. +username+"]";
  34. }
  35. }
Java代码 收藏代码
  1. /**
  2. *@authorlhy
  3. *@description对用户的CRUD相关操作
  4. */
  5. publicclassUserDao{
  6. //添加用户
  7. publicvoidadd(Useru){
  8. Connectionconn=DBUtil.createConn();
  9. Stringsql="insertintouservalues(null,?,?)";
  10. PreparedStatementps=DBUtil.prepare(conn,sql);
  11. try{
  12. ps.setString(1,u.getUsername());
  13. ps.setString(2,u.getPassword());
  14. ps.executeUpdate();
  15. }catch(SQLExceptione){
  16. e.printStackTrace();
  17. }
  18. DBUtil.close(ps);
  19. DBUtil.close(conn);
  20. }
  21. //根据Id删除用户
  22. publicvoiddeleteById(intid){
  23. Connectionconn=DBUtil.createConn();
  24. Stringsql="deletefromuserwhereid=?";
  25. PreparedStatementps=DBUtil.prepare(conn,sql);
  26. try{
  27. ps.setInt(1,id);
  28. ps.executeUpdate();
  29. }catch(SQLExceptione){
  30. e.printStackTrace();
  31. }
  32. DBUtil.close(ps);
  33. DBUtil.close(conn);
  34. }
  35. //删除用户
  36. publicvoiddelete(Useru){
  37. deleteById(u.getId());
  38. }
  39. //更新用户
  40. publicvoidupdate(Useru){
  41. Connectionconn=DBUtil.createConn();
  42. Stringsql="updateusersetusername=?,password=?whereid=?";
  43. PreparedStatementps=DBUtil.prepare(conn,sql);
  44. try{
  45. ps.setString(1,u.getUsername());
  46. ps.setString(2,u.getPassword());
  47. ps.setInt(3,u.getId());
  48. ps.executeUpdate();
  49. }catch(SQLExceptione){
  50. e.printStackTrace();
  51. }
  52. DBUtil.close(ps);
  53. DBUtil.close(conn);
  54. }
  55. //根据查询用户
  56. publicUserloadById(intid){
  57. Connectionconn=DBUtil.createConn();
  58. Stringsql="select*fromuserwhereid=?";
  59. PreparedStatementps=DBUtil.prepare(conn,sql);
  60. Useruser=null;
  61. ResultSetrs=null;
  62. try{
  63. ps.setInt(1,id);
  64. rs=ps.executeQuery();
  65. if(rs.next()){
  66. user=newUser();
  67. user.setId(rs.getInt("Id"));
  68. user.setUsername(rs.getString("username"));
  69. user.setPassword(rs.getString("password"));
  70. }
  71. }catch(SQLExceptione){
  72. e.printStackTrace();
  73. }
  74. DBUtil.close(rs);
  75. DBUtil.close(ps);
  76. DBUtil.close(conn);
  77. returnuser;
  78. }
  79. //查询所有用户信息
  80. publicList<User>listUser(){
  81. Connectionconn=DBUtil.createConn();
  82. Stringsql="select*fromuser";
  83. PreparedStatementps=DBUtil.prepare(conn,sql);
  84. List<User>list=newArrayList<User>();
  85. ResultSetrs=null;
  86. try{
  87. rs=ps.executeQuery();
  88. while(rs.next()){
  89. Useruser=newUser();
  90. user.setId(rs.getInt("Id"));
  91. user.setUsername(rs.getString("username"));
  92. user.setPassword(rs.getString("password"));
  93. list.add(user);
  94. }
  95. }catch(SQLExceptione){
  96. e.printStackTrace();
  97. }
  98. DBUtil.close(rs);
  99. DBUtil.close(ps);
  100. DBUtil.close(conn);
  101. returnlist;
  102. }
  103. }

客户端(测试类):

Java代码 收藏代码
  1. publicclassTestUser{
  2. publicstaticvoidmain(String[]args){
  3. Useruser=newUser();
  4. user.setUsername("张三");
  5. user.setPassword("123");
  6. UserDaouserDao=newUserDao();
  7. //userDao.add(user);//添加用户
  8. //userDao.deleteById(1);//删除Id为1的用户
  9. //userDao.update(newUser(2,"李四","1234546"));//更新Id为2的用户信息
  10. //System.out.println(userDao.loadById(2));//查询Id为2的用户信息
  11. //列出所有的用户
  12. List<User>list=userDao.listUser();
  13. for(Useru:list){
  14. System.out.println(u);
  15. }
  16. }
  17. }

Java的数据库编程比较简单,这里就不再赘述。
结束语
Javase基础部分就到这了,之后会更新 Java的反射、注解、代理、设计模式、jsp、Struts、Hibernate、Spring等内容。微笑相信学完了Javase基础之后,对后面的学习会更加轻松。

你可能感兴趣的:(Java学习)