JDBC中的Statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。Statement对象的executeUpdate方法,用于向数据库发送增、删、改的SQL语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
在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数据库驱动。
然后,在src目录下创建一个db.properties文件,如下图所示:
在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;
}
}
使用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);
}
}
使用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);
}
}
使用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);
}
}
使用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);
}
}