Java Web基础入门第四十六讲 使用JDBC对数据库进行CRUD

Statement对象介绍

JDBC中的Statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。Statement对象的executeUpdate方法,用于向数据库发送增、删、改的SQL语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。

使用JDBC对数据库增删改查

搭建实验环境

在MySQL中创建一个库,并创建user表以及插入一些数据。SQL脚本如下:

create database day14;
use day14;
create table users 
(
    id int primary key,
    name varchar(40),
    password varchar(40),
    email varchar(60),
    birthday date
);
insert into users(id,name,password,email,birthday) values(1,'zs','123456','[email protected]','1980-12-04');
insert into users(id,name,password,email,birthday) values(2,'lisi','123456','[email protected]','1981-12-04');
insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','[email protected]','1979-12-04');

接下来我们编写程序对users表进行CRUD(增删改查)操作,为了更通用,应编写一个工具类来简化CRUD操作。(工具类中的异常暂不处理)。
首先,新建一个Java普通工程,并导入MySQL数据库驱动。
Java Web基础入门第四十六讲 使用JDBC对数据库进行CRUD_第1张图片
然后,在src目录下创建一个db.properties文件,如下图所示:
Java Web基础入门第四十六讲 使用JDBC对数据库进行CRUD_第2张图片
在db.properties中编写MySQL数据库的连接信息,内容如下所示:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day14
username=root
password=liayun

接着,在cn.liayun.utils包下编写一个JdbcUtils工具类,JdbcUtils工具类用于连接数据库,获取数据库连接和释放数据库连接,代码如下:

package cn.liayun.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {
	
	private static Properties config = new Properties();
	
	// 静态代码块只执行一次,因为静态代码块在类加载时执行,类永远只加载一次
	static {
		try {
			config.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
			Class.forName(config.getProperty("driver"));
		} catch (Exception e) {
			/*
             * db.properties文件都无法读取,那么整个应用程序就无法连接数据库;
             * 驱动都加载不了,那么整个应用程序都无法工作,
             * 所以应该抛一个错误(ExceptionInInitializerError)
             */
			throw new ExceptionInInitializerError(e);
		}
	}

	public static Connection getConnection() throws SQLException {
		return DriverManager.getConnection(config.getProperty("url"), config.getProperty("username"), config.getProperty("password"));
	}
	
	public static void release(Connection conn, Statement st, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();// 假设throw异常
			} catch (Exception e) {
				e.printStackTrace();// 只需在后台记录异常
			}
			rs = null;// 假设rs对象没有释放,将其置为null,该对象就变成垃圾,由Java垃圾回收器回收
		}
		
		if (st != null) {
			try {
				st.close();// 假设throw异常
			} catch (Exception e) {
				e.printStackTrace();// 只需在后台记录异常
			}
			st = null;
		}
		
		if (conn != null) {
			try {
				conn.close();// 假设throw异常
			} catch (Exception e) {
				e.printStackTrace();// 只需在后台记录异常
			}
			conn = null;
		}
	}
	
}

最后,对于数据库里面的每一张表,我们都应该创建一个对应的Java类,所以对应数据库中的users表,应创建一个User类,从users表查询出来的数据,我们就可以用User类来封装其数据了。于是,在cn.liayun.domain包中创建一个User类,User类的代码如下所示:

package cn.liayun.domain;

import java.util.Date;

public class User {
	private int id;
	private String name;
	private String password;
	private String email;
	private Date birthday;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

使用Statement对象完成对数据库的CRUD操作

CRUD操作-create

使用executeUpdate(String sql)方法完成数据添加操作。

public void insert() throws SQLException {
	Connection conn = null;
	Statement st = null;
	ResultSet rs = null;
	try {
		conn = JdbcUtils.getConnection();
		st = conn.createStatement();
		String sql = "insert into users(id,name,password,email,birthday) values(4,'zhaomin','123321','[email protected]','1980-09-07')";
		int num = st.executeUpdate(sql);
		if (num > 0) {
			System.out.println("插入成功!!!");
		}
	} finally {
		JdbcUtils.release(conn, st, rs);
	}
}

CRUD操作-updata

使用executeUpdate(String sql)方法完成数据修改操作。

public void update() throws SQLException {
	Connection conn = null;
	Statement st = null;
	ResultSet rs = null;
	try {
		conn = JdbcUtils.getConnection();
		st = conn.createStatement();
		String sql = "update users set name='张无忌' where id='4'";
		int num = st.executeUpdate(sql);
		if (num > 0) {
			System.out.println("更新成功!!!");
		}
	} finally {
		JdbcUtils.release(conn, st, rs);
	}
}

CRUD操作-delete

使用executeUpdate(String sql)方法完成数据删除操作。

public void delete() throws SQLException {
	Connection conn = null;
	Statement st = null;
	ResultSet rs = null;
	try {
		conn = JdbcUtils.getConnection();
		st = conn.createStatement();
		String sql = "delete from users where id=4";
		int num = st.executeUpdate(sql);
		if (num > 0) {
			System.out.println("删除成功!!!");
		}
	} finally {
		JdbcUtils.release(conn, st, rs);
	}
}

CRUD操作-read

使用executeQuery(String sql)方法完成数据查询操作。

  • 根据id来查询用户信息

    public void find() throws SQLException {
    	Connection conn = null;
    	Statement st = null;
    	ResultSet rs = null;
    	try {
    		conn = JdbcUtils.getConnection();
    		st = conn.createStatement();
    		String sql = "select id,name,password,email,birthday from users where id=1";
    		rs = st.executeQuery(sql);
    		User user = null;
    		if (rs.next()) {
    			user = new User();
    			
    			user.setId(rs.getInt("id"));
    			user.setName(rs.getString("name"));
    			user.setPassword(rs.getString("password"));
    			user.setEmail(rs.getString("email"));
    			user.setBirthday(rs.getDate("birthday"));
    		}
    		System.out.println(user);
    	} finally {
    		JdbcUtils.release(conn, st, rs);
    	}
    }
    
  • 查询所有用户的信息。

    public void getAll() throws SQLException {
    	Connection conn = null;
    	Statement st = null;
    	ResultSet rs = null;
    	try {
    		conn = JdbcUtils.getConnection();
    		st = conn.createStatement();
    		String sql = "select id,name,password,email,birthday from users";
    		rs = st.executeQuery(sql);
    		List<User> list = new ArrayList<User>();
    		while (rs.next()) {
    			User user = new User();
    			
    			user.setId(rs.getInt("id"));
    			user.setName(rs.getString("name"));
    			user.setPassword(rs.getString("password"));
    			user.setEmail(rs.getString("email"));
    			user.setBirthday(rs.getDate("birthday"));
    			list.add(user);
    		}
    		
    		System.out.println(list);// 断点查看
    	} finally {
    		JdbcUtils.release(conn, st, rs);
    	}
    }
    

你可能感兴趣的:(Java,Web基础入门)