JDBC 访问数据库
创始人
2024-03-12 10:36:12
0

文章目录

  • 一、实验目的
  • 二、实验要求
  • 三、实验内容
    • 1、设计数据库表
    • 2、定义实体类
    • 3、定义数据库连接类
    • 4、实现数据库的增删改查
    • 5、测试用例

一、实验目的

理解 JDBC 的工作原理,掌握 JDBC 访问数据库; 掌握常见数据库 MYSQL ;

二、实验要求

  1. 理解 JDBC 的应用。
  2. 掌握 JDBC 的编程接口。
  3. 熟练使用 MYEclipse 开发简单应用

三、实验内容

现在使用 JDBC 写一个简单的小程序,主要是使用 JDBC 连接 MySQL 数据库,然后对数据库进行一些基本的增删改查操作。

1、设计数据库表

先设计一个数据库表,用于保存用户信息,建表语句如下:

CREATE TABLE `tbl_user_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_name` varchar(20) NOT NULL,`age` int(11) NOT NULL,`sex` int(1) NOT NULL,`create_dt` date NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8;

在用户表中定义了几个字段,分别是 id,user_name,age,sex,create_dt,其中 id 是主键, 是自增长的,user_name 表示用户名,age 表示用户年龄,sex 表示用户的性别,这里的性别用数字表示,0 表示女性,1 表示男性,create_dt 表示创建的时间。预先在数据库中插入几条数据,数据如下:
在这里插入图片描述

2、定义实体类

定义一个 Bean,与数据库表中的各个字段对应:
UserVO.java

package com.imooc.jdbc;import java.util.Date;public class UserVO {private int id;private String userName;private int age;private int sex;private Date createDt;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public Date getCreateDt() {return createDt;}public void setCreateDt(Date createDt) {this.createDt = createDt;}@Overridepublic String toString() {return "UserVO [id=" + id + ", userName=" + userName + ", age=" + age+ ", sex=" + sex + ", createDt=" + createDt + "]";}public UserVO() {}}

3、定义数据库连接类

定义一个数据库连接类,用于获取 MySQL 的连接。MySQL 的 JDBC URL 编写方式为:jdbc:mysql://主机名称:连接端口/数据库的名称?参数= 值,在这个例子中我连接的数据库主机是一台远程主机,所以主机名称为远程主机的 ip 地址,如果数据库主机为本机,则可以定义为 localhost,在参数中指定用户名为 root,密码也是 root,为了避免中文乱码要指定 useUnicode 和 characterEncoding。因为连接的是 MySQL 数据库,所以程序一开始需要加载 MySQL 的数据库驱动,然后通过 DriverManager.getConn ection(String URL)方法获取数据库的连接。
DBUtil .java

package com.imooc.jdbc;import java.sql.Connection;
import java.sql.DriverManager;public class DBUtil {private static final String URI = "jdbc:mysql://192.168.2.207:3306/equipmenitsystem?"+ "user=root&password=123456&useUnicode=true&characterEncoding=UTF-8";private static final String DRIVER = "com.mysql.jdbc.Driver";public static Connection connectDB() throws Exception {//1、加载数据库驱动Class.forName(DRIVER);//2、获取数据库连接Connection conn = DriverManager.getConnection(URI);return conn;}}

4、实现数据库的增删改查

在获取了数据库的连接之后,就可以操作数据库了,下面分别实现数据库的增删改查操作, 定义一个 UserDaoIab 类用于操作数据库。

package com.gec.dao;import com.gec.com.gec.util.DBUtil;
import com.gec.entity.UserVO;import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class UserDaoIab {//查询数据库所有信息public List queryAll() throws Exception {Connection conn = DBUtil.connectDB();String sql = "SELECT * FROM tbl_user_info";List userList = new ArrayList();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);System.out.println("数据库中全部用户信息如下:");while (rs.next()) {UserVO user = new UserVO();user.setId(rs.getInt("id"));user.setUserName(rs.getString("user_name"));user.setAge(rs.getInt("age"));user.setSex(rs.getInt("sex"));user.setCreateDt(rs.getDate("create_dt"));userList.add(user);}return userList;}//查询数据库用户特定条件信息public List queryByParams(List> params) throws Exception {Connection conn = DBUtil.connectDB();StringBuilder sql = new StringBuilder("SELECT * FROM tbl_user_info WHERE  1 =  1 ");for (Map param : params) {sql.append(" and ");sql.append(" " + param.get("col") + " ");sql.append(" " + param.get("rel") + " ");sql.append(" " + param.get("value") + " ");}System.out.println(sql.toString());List userList = new ArrayList();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql.toString());while (rs.next()) {UserVO user = new UserVO();user.setId(rs.getInt("id"));user.setUserName(rs.getString("user_name"));user.setAge(rs.getInt("age"));user.setSex(rs.getInt("sex"));user.setCreateDt(rs.getDate("create_dt"));userList.add(user);}System.out.println("搜索用户信息数据成功!!!");return userList;}//在数据库中新增一条用户信息public void addUser(UserVO user) throws Exception {Connection conn = DBUtil.connectDB();String sql = "INSERT INTO tbl_user_info(user_name, age, sex, create_dt) "+ " VALUES(?, ?, ?, ?)";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1, user.getUserName());pstmt.setInt(2, user.getAge());pstmt.setInt(3, user.getSex());pstmt.setDate(4, new Date(new java.util.Date().getTime()));pstmt.execute();System.out.println("添加用户信息数据成功!!!");}//在数据库中根据用户的id来删除用户数据public void deleteUser(int id) throws Exception {Connection conn = DBUtil.connectDB();String sql = "DELETE FROM tbl_user_info WHERE id = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);pstmt.execute();System.out.println("删除用户信息数据成功!!!");}//在数据库中根据用户的id来更新用户信息public void updateUser(UserVO user) throws Exception {Connection conn = DBUtil.connectDB();String sql = "UPDATE tbl_user_info SET user_name=?, age=?, sex=?"+ " WHERE id=?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1, user.getUserName());pstmt.setInt(2, user.getAge());pstmt.setInt(3, user.getSex());pstmt.setInt(4, user.getId());System.out.println("更新用户信息数据成功!!!");pstmt.executeUpdate();}
}

5、测试用例

Uservotest.class

package com.gec.test;import com.gec.dao.UserDao;
import com.gec.dao.UserDaoIab;
import com.gec.entity.UserVO;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class uservotest {//数据库所有信息查询
/*    public static void main(String[] args) {UserDaoIab dao = new UserDaoIab();try {List userList = dao.queryAll();for (UserVO user : userList) {System.out.println(user);}} catch (Exception e) {e.printStackTrace();}}*///查询数据库特定条件信息
/*    public static void main(String[] args) {UserDaoIab dao = new UserDaoIab();List> params = new ArrayList>();Map param1 = new HashMap();param1.put("col", "user_name");param1.put("rel", "like");param1.put("value", "'%John%'");params.add(param1);Map param2 = new HashMap();param2.put("col", "sex");param2.put("rel", "=");param2.put("value", 1);params.add(param2);try {List userList = dao.queryByParams(params);for (UserVO user : userList) {System.out.println(user);}} catch (Exception e) {e.printStackTrace();}}*///在数据库中新增一条信息
/*    public static void main(String[] args) {UserDaoIab dao = new UserDaoIab();UserVO user = new UserVO();user.setUserName("animal");user.setAge(85);user.setSex(0);try {dao.addUser(user);} catch (Exception e) {e.printStackTrace();}}*///在数据库中根据用户的id来删除数据/*   public static void main(String[] args) {UserDaoIab dao = new UserDaoIab();try {dao.deleteUser(4);} catch (Exception e) {e.printStackTrace();}}*///在数据库中根据用户的id来更新数据
/*    public static void main(String[] args) {UserDaoIab dao = new UserDaoIab();UserVO user = new UserVO();user.setUserName("张弛华");user.setAge(99);user.setSex(0);user.setId(1);try {dao.updateUser(user);} catch (Exception e) {e.printStackTrace();}}*/}

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...