文章目录
- 一、实验目的
- 二、实验要求
- 三、实验内容
- 1、设计数据库表
- 2、定义实体类
- 3、定义数据库连接类
- 4、实现数据库的增删改查
- 5、测试用例
一、实验目的
理解 JDBC 的工作原理,掌握 JDBC 访问数据库; 掌握常见数据库 MYSQL ;
二、实验要求
- 理解 JDBC 的应用。
- 掌握 JDBC 的编程接口。
- 熟练使用 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;
}
@Override
public 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<UserVO> queryAll() throws Exception {
Connection conn = DBUtil.connectDB();
String sql = "SELECT * FROM tbl_user_info";
List<UserVO> userList = new ArrayList<UserVO>();
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<UserVO> queryByParams(List<Map<String, Object>> params) throws Exception {
Connection conn = DBUtil.connectDB();
StringBuilder sql = new StringBuilder("SELECT * FROM tbl_user_info WHERE 1 = 1 ");
for (Map<String, Object> 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<UserVO> userList = new ArrayList<UserVO>();
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<UserVO> 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<Map<String, Object>> params = new ArrayList<Map<String, Object>>();
Map<String, Object> param1 = new HashMap<String, Object>();
param1.put("col", "user_name");
param1.put("rel", "like");
param1.put("value", "'%John%'");
params.add(param1);
Map<String, Object> param2 = new HashMap<String, Object>();
param2.put("col", "sex");
param2.put("rel", "=");
param2.put("value", 1);
params.add(param2);
try {
List<UserVO> 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();
}
}*/
}
运行结果: