您的位置:首页 > 数据库

使用JDBC对数据库进行CRUD

2016-08-22 14:25 411 查看

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','zs@sina.com','1980-12-04');
insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04');
insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');


接下来我们编写程序对users表进行CRUD(增删改查)操作,为了更通用,应编写一个工具类来简化CRUD操作。(工具类中的异常暂不处理)

新建一个JavaWeb工程,并导入MySQL数据库驱动。



在src目录下创建一个db.properties文件,如下图所示:



在db.properties中编写MySQL数据库的连接信息,代码如下所示:

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


在cn.itcast.utils包下编写一个JdbcUtils工具类,如下图所示:



JdbcUtils工具类用于连接数据库,获取数据库连接和释放数据库连接,代码如下:

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();
} catch (Exception e) {
e.printStackTrace(); // 只需在后台记录异常
}
}

}
}


对于数据库里面的每一张表,我们都应该创建一个对应的java类,所以对应数据库中的users表,应创建一个User类,从users表查询出来的数据,我们就可以用User类来封装其数据了。

在cn.itcast.domain包中创建一个User类,如下所示:



User类的代码如下所示:

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,'liayun','123321','liayun@163.com','1992-10-06')";
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='liyunling' 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.getId(rs.getInt(1));
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.getId(rs.getInt(1));
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: