利用JDBC对数据库的增删查改

   在本节中,我们将通过一个示例说明如何利用JDBC对数据库进行增删查改等各种操作,以及怎样对结果集中的数据进行处理。

    我们假设现在数据库中有一张表tbl_user用来存放用户信息。为了简便起见,我们只设了3个字段:用户名vcUsername、密码vcPassword和注册日期dtRegDate。

    新用户注册时要将客户的相关信息存入数据库;用户登录时要进行密码验证;用户注销时要将其信息删除;用户修改自己的信息时要对数据库中的数据进行修改。

    在这个示例中我们将调用示例13-1获取数据库连接。另外,我们还编写了一个User类用来操作用户信息,如示例13-2所示。

    【程序源代码】

1 // ==================== Program Description ========================== 2 // 程序名称:示例13-2: User.java 3 // 程序目的:创建一个用来操作用户信息的类 4 // ============================================================== 5 public class User 6 { 7 private String username; 8 private String password; 9 private String regDate; 10 11 // 获取用户名 12 public String getUsername() { 13 return username; 14 } 15 16 // 设置用户名 17 public void setUsername(String username) { 18 this.username = username; 19 } 20 21 // 获取用户密码 22 public String getPassword() { 23 return password; 24 } 25 26 // 设置用户密码 27 public void setPassword(String password) { 28 this.password = password; 29 } 30 31 // 获取用户注册时间 32 public String getRegDate() { 33 return regDate; 34 } 35 36 // 设置用户注册时间 37 public void setRegDate(String regDate) { 38 this.regDate = regDate; 39 } 40 }

    示例13-3的UserMgr类中封装了对数据库中的用户信息进行增删查改等操作的方法。

    【程序源代码】

1 // ==================== Program Description ========================== 2 // 程序名称:示例13-3: UserMgr.java 3 // 程序目的:利用JDBC对数据库进行增删查改操作 4 // ============================================================== 5 import java.sql.*; 6 import test.DBConnection; 7 8 public class UserMgr 9 { 10 // 向数据库中添加用户信息 11 public boolean addUser(User user) 12 { 13 // 构造SQL语句 14 String sql = "insert into tbl_user (vcUsername, vcPassword,dtRegDate) values('" + 15 user.getUsername() + "','" + user.getPassword() +"',getDate())"; 16 Statement stmt; 17 Connection conn; 18 try { 19 // 获取数据库连接 20 conn = DBConnection.getConnection(); 21 22 // 创建Statement对象 23 stmt = conn.createStatement(); 24 25 // 执行SQL语句 26 stmt.executeUpdate(sql); 27 stmt.close(); 28 conn.close(); 29 30 return true; 31 } 32 catch (SQLException e) { 33 System.out.println(e.getMessage()); 34 } 35 36 return false; 37 } 38 39 // 删除数据库中某个用户的信息 40 public boolean deleteUser(User user) 41 { 42 String sql="delete from tbl_user where vcUsername="+"'"+user.getUsername()+"'"; 43 Connection conn; 44 Statement stmt; 45 46 try { 47 conn=DBConnection.getConnection(); 48 stmt=conn.createStatement(); 49 stmt.executeUpdate(sql); 50 stmt.close(); 51 conn.close(); 52 53 return true; 54 } 55 catch (SQLException e) 56 { 57 System.out.println(e.getMessage()); 58 } 59 60 return false; 61 } 62 63 // 根据用户名查询数据库获取一个用户对象 64 public User getUser( String username ) 65 { 66 User user; 67 String sql="select * from tbl_user where vcUsername='"+username+"'"; 68 Statement stmt; 69 Connection conn; 70 71 try { 72 conn= DBConnection.getConnection(); 73 stmt=conn.createStatement(); 74 75 // 执行SQL语句并将查询结果放入结果集中 76 ResultSet rs=stmt.executeQuery(sql); 77 78 // 将结果集中的数据取出放入User类的对象中 79 if (rs.next()) 80 { 81 user=new User(); 82 user.setUsername(rs.getString("vcUsername")); 83 user.setPassword(rs.getString("vcPassword")); 84 user.setRegDate(rs.getDate("dtRegDate").toString()); 85 stmt.close(); 86 conn.close(); 87 return user; 88 } 89 } 90 catch (SQLException e) 91 { 92 System.out.println(e.getMessage()); 93 } 94 95 return null; 96 } 97 98 // 通过验证密码鉴定用户的身份 99 public int checkUser(User user) 100 { 101 User dbUser= getUser(user.getUsername()); 102 if (dbUser==null) 103 return 0; 104 else if (dbUser.getPassword().equals(user.getPassword()) ) 105 return 1; 106 else return -1; 107 } 108 109 // 修改数据库中某个用户的信息 110 public boolean modifyUser(User user) 111 { 112 Connection conn; 113 Statement stmt; 114 String sql="update tbl_user set vcPassword= '"+user.getPassword()+"' where 115 vcUsername='"+user.getUsername()+"'"; 116 117 try { 118 conn=DBConnection.getConnection(); 119 stmt=conn.createStatement(); 120 stmt.executeUpdate(sql); 121 stmt.close(); 122 conn.close(); 123 124 return true; 125 } 126 catch (SQLException e) 127 { 128 System.out.println(e.getMessage()); 129 } 130 131 return false; 132 } 133 }

    【程序注解】

    要对数据库进行操作,首先必须建立一个数据库连接。关于这个问题,我们已经在13.3节中进行了详细讨论。因此,本例中直接调用示例13-1中的getConnection()方法(第20行)。当然,在此之前,必须将DBConnection类import进来(第6行)。然后我们就可以利用已经获取的数据库连接创建一个Statement对象stmt,并调用Statement类提供的方法执行SQL语句,如executeUpdate(String sql)、executeQuery(String sql)等。

    如果是添加、删除或修改用户信息,那么执行了executeUpdate(String sql)方法之后即完成了相应操作。但如果是查询用户信息,则还需对结果集进行处理。例如,在getUser(String username)方法(第64行)中,我们根据用户名查询到了相应用户的信息并存入了一个结果集中。然后从第78行到第87行对结果集中的数据进行处理,并关闭Statement和Connection对象。

    首先判断rs.next()是否为真,即是否从数据库中取到了数据。如果为真,则创建一个User类的实例,并调用其set方法将结果集中的数据置入user对象中。值得注意的是,我们在添加用户的时候,注册时间是用getDate()方法自动获取的,这个时间会精确到毫秒级,而我们在获取用户注册时间时往往只要知道用户是在哪一天注册的就可以了,因此我们使用了结果集的getDate()方法获取注册时间(第84行)。这个方法将返回一个Date型值,但User类的setRegDate()方法要求传递一个字符串参数,所以我们要调用Date类的toString()方法将此时间转化为一个字符串。如果你的确想要获得用户的精确注册时间,也可以直接调用结果集的getString()方法。总之,在完成了对user对象的属性设置之后,我们便可以将这个对象作为getUser()方法的返回值,以供该方法的调用者使用。

    还有一点需要说明的是,我们这里假设数据库里的用户名是惟一的。如果数据库中存在重名的用户,我们可以定义一个Vector对象,在从结果集中获取了每一个用户的信息之后即将该user对象加入vector中,然后将vector作为getUser()方法的返回值。(T111)

本文选自飞思图书《精通Java核心技术》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏公众号_薛勤的博客

史上超详细的Spring-Boot-Cache使用与整合

Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheMa...

75620
来自专栏xingoo, 一个梦想做发明家的程序员

日志那点事儿——slf4j源码剖析

前言: 说到日志,大多人都没空去研究,顶多知道用logger.info或者warn打打消息。那么commons-logging,slf4j,logback...

27350
来自专栏好好学java的技术栈

jdbc就是这么简单

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问...

8820
来自专栏分布式系统进阶

ReplicaManager源码解析1-消息同步线程管理

基本上就是作三件事: 构造FetchRequest, 同步发送FetchRequest并接收FetchResponse, 处理FetchResponse, 这三...

17320
来自专栏比原链

剥开比原看代码02:比原启动后去哪里连接别的节点

Gitee地址:https://gitee.com/BytomBlockchain/bytom

12720
来自专栏Java3y

JDBC面试题都在这里

以下我是归纳的JDBC知识点图: ? 图上的知识点都可以在我其他的文章内找到相应内容。 JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步...

60840
来自专栏Java帮帮-微信公众号-技术文章全总结

Apache、struts1、struts2文件上传下载的3种方式

/*jsp的上传(导入第三方upload.jar)*/ //用Apache的SmartUpload方式上传,共5部 //1.引入SmartUpload Smar...

51270
来自专栏有趣的django

37.Django1.11.6文档

第一步 入门 检查版本 python -m django --version 创建第一个项目 django-admin startproject mysite ...

50680
来自专栏专注 Java 基础分享

Java--JDBC连接数据库

     我们知道Java中的jdbc是用来连接应用程序和数据系统的,本篇文章主要就来看看关于JDBC的实现和使用细节。主要包含以下几点内容: JDBC的基本知...

41050
来自专栏mathor

JDBC

 要想通过java连接数据库,首先通过Navicat工具连接MySQL,然后创建数据库jsp,再创建一个表单user,表单里的字段以及相应的属性见下图

19630

扫码关注云+社区

领取腾讯云代金券