JDBC 访问数据库

现在使用 JDBC 写一个简单的小程序,主要是使用 JDBC 连接 MySQL 数据库,然后对数据库进行一些基本的增删改查操作。
1、设计数据库表
先设计一个数据库表,用于保存用户信息,建表语句如下:
在用户表中定义了几个字段,分别是 id,user_name,age,sex,create_dt,其中 id 是主键, 是自增长的,user_name 表示用户名,age 表示用户年龄,sex 表示用户的性别,这里的性别用数字表示,0 表示女性,1 表示男性,create_dt 表示创建的时间。预先在数据库中插入几条数据,数据如下。

CREATE TABLE
tbl_user_info
(	
id INT NOT NULL AUTO_INCREMENT,
user_name VARCHAR(20) NOT NULL,
age INT NOT NULL,
sex INT(1) NOT NULL,
create_dt DATE NOT NULL,
PRIMARY KEY (id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述
2、定义实体类
定义一个 Bean,与数据库表中的各个字段对应:

package com.imooc.jdbc;

import java.sql.Date;

public class UserVO {
	//vo:
	//dto:数据传输对象
	//pojo:javaBean
	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;
		
	}
	public String toString() {
	return "UserVO [id=" + id + ", userName=" + userName + ", age=" + age
	+ ", sex=" + sex + ", createDt=" + createDt + "]";
	}


}

3、定义数据库连接类
定义一个数据库连接类,用于获取 MySQL 的连接

 package com.imooc.jdbc;

import java.sql.*;


public class DBUtil {
	private static final String URI = "jdbc:mysql://localhost:3306/shen?"
			+ "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;
	}

	public static void main(String[] args) throws Exception {
		System.out.println(connectDB());
	}
}

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

4、实现数据库的增删改查
在获取了数据库的连接之后,就可以操作数据库了,下面分别实现数据库的增删改查操作, 定义一个 UserDao 类用于操作数据库。
1) 查询
先看查询操作,查询可以一次查询出所有的数据,也可以根据相应的条件查询。 查询所有的数据,在 UserDao 中定义一个 queryAll()方法:

//查询全部
	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);
		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;

	}

在这里插入图片描述
这里使用 Connection.createStatement()方法获取一个 Statement 对象,这个对象里面有很多的方法可以操作数据库,使用 excuteQuery(String sql)执行查询操作,查询结果为一个结果集 R
esultSet,可以通过这个结果集获取相关的信息。 定义 main 函数:
UserVO [id=4, userName=Mary, age=25, sex=0, createDt=2016-06-24] UserVO [id=5, userName=Jack, age=22, sex=1, createDt=2016-06-24] UserVO [id=6, userName=John, age=19, sex=1, createDt=2016-06-24]

根据条件查询,定义一个 queryByParams 方法:
这个方法可以自由选择查询的条件,只需要向方法中传入一个条件的 List 即可,这些条件都是由 Map 组成的,每一个 Map 包含三个元素,col 表示查询条件对应哪一列,rel 表示查询条件的关系是什么,value 是指查询条件的值。这样写集成了多查询条件的方法,很多的业务下,查询的逻辑可能很多,这样写只用一个统一的方法就可以解决多种不同查询条件的 业务逻辑。
再写一个简单的 main 函数测试一下:
在这个 main 方法中设定了两个查询条件,一是 user_name like %John%,另一个是 sex=1, 当然条件也可以是其他的,执行程序运行结果为:
SELECT * FROM tbl_user_info WHERE 1=1 and user_name like ‘%John%’ and sex
= 1
UserVO [id=6, userName=John, age=19, sex=1, createDt=2016-06-24]

//按条件查询
	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);
						}
				
						return userList;	

}
//按条件查询测试
UserDao dao = new UserDao();
		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();
		}
	

在这里插入图片描述
2) 增加

现在在 UserDao 中写一个 addUser 方法用于新增一条信息:

//添加数据
	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();
	}
//添加测试
UserDao dao = new UserDao();
		UserVO user = new UserVO();
		user.setUserName("Tom");
		user.setAge(20);
		user.setSex(1);
		try {
		dao.addUser(user);
		} catch (Exception e) {
		e.printStackTrace();
		}

这个方法使用 Connection.prepareStatement(String sql)方法获取一个 PreparedStatement 对象, 使用这个方法可以传入带参数的 SQL 语句,而参数的值可以通过 PreparedStatement.setXXX (int index, XXX value)的方法指定,其中 XXX 为各种不同的类型,index 指定第几个参数的下标。指定了参数的值之后,便可以执行 excute()方法执行 SQL 语句了。
接下来写一个 main 方法来验证这个增加的方法:
执行后再查看数据库,发现 Tom 这个用户已经已经插入成功了。
在这里插入图片描述
3) 删除
接下来再写一个删除的方法,根据用户的 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();
		}
//删除测试
UserDao dao = new UserDao();
		try {
		dao.deleteUser(7);
		} catch (Exception e) {
		e.printStackTrace();
		}

删除 id 为 7 的用户,也就是刚刚用新增方法创建的用户名为 Tom 的这个用户,运行后查看数据库:
在这里插入图片描述

4) 更新数据库
最后来看一下更新数据库:

//更新数据库
	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());
		pstmt.executeUpdate();
		}


//更新数据库测试
		UserDao dao = new UserDao();
		UserVO user = new UserVO();
		user.setUserName("Mary");
		user.setAge(30);
		user.setSex(0);
		user.setId(4);
	
		try {
		dao.updateUser(user);
		} catch (Exception e) {
		e.printStackTrace();
		}

这个方法里将用户名为 Mary 的用户年龄改为 30 岁,执行程序,运行后查看数据库:
可以看到 Mary 的年龄确实变成了 30,,删除成功。
在这里插入图片描述
以上便是对数据库的增删改查基本操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值