statement对象的简介
Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL 语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和 CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存在的存储过程的调用。
在statement中CreateStatement和PrepareStatement区别请参考:https://blog.youkuaiyun.com/weixin_41092717/article/details/82853704文章。
使用JDBC对数据库增删改查。
环境搭建准备
在JDBC学习01的基础上学习:https://blog.youkuaiyun.com/weixin_41092717/article/details/82850592
在MySQL中创建一个jdbcdemo库,并创建users表以及插入一些数据。
create database jdbcdemo character set utf8 collate utf8_general_ci;
use jdbcdemo;
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,'zhansan','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 操作。为了是代码简介我们编写一个JdbcUtils工具类来简化CRUD操作。
通过加载db.properties文件获取到数据连接。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcdemo?Reconnect=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=xxxxx
JDBCUtils工具类:放在utils包中
package cn.bjyy.utils;
import java.sql.*;
import java.util.Properties;
/**
* Created by YYBJ on 2018/9/20.
* ZCL
*/
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 {
Connection conn = DriverManager.getConnection(config.getProperty("url"), config.getProperty("username"), config.getProperty("password"));
return conn;
}
public static void release(Connection conn, PreparedStatement 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(); // 只需在后台记录异常
}
}
conn = null;
}
}
既然基本工作都准备好了我们正式进入测试代码阶段。
1.1编写实体类
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", birthday=" + birthday +
'}';
}
}
所有测试代码:注意插入数据库用得statement对象和其他不一致。为了对比CreateStatement和PrepareStatement需要所写。
public class Demo1 {
//数据库添加数据测试
@Test
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,'漂亮姐姐','123321','dudu@163.com','1992-10-06')";
int num=st.executeUpdate(sql);
if (num>0){
System.out.println("插入成功!!!");
}
conn.close();
st.close();
}finally {
/* JdbcUtils.release(conn,st,rs);*/
}
}
//更新数据测试
@Test
public void update() throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql="update users set name=? where id =?";
ps = conn.prepareStatement(sql);
ps.setString(1,"小豆丁");
ps.setInt(2,4);
int i = ps.executeUpdate();
if (i>0){
System.out.println("更新成功!!!");
}
}finally {
JdbcUtils.release(conn,ps,rs);
}
}
//删除数据测试
@Test
public void delete() throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn= JdbcUtils.getConnection();
String sql="delete from users where id=4";
ps = conn.prepareStatement(sql);
int i = ps.executeUpdate();
if (i>0){
System.out.println("删除用户成功!!!");
}
}finally {
JdbcUtils.release(conn,ps,rs);
}
}
//查找单个数据测试
@Test
public void find() throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn=JdbcUtils.getConnection();
String sql="select id,name,password,email,birthday from users where id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1,2);
rs = ps.executeQuery();
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,ps,rs);
}
}
//查询多条数据
@Test
public void getAll() throws SQLException {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=JdbcUtils.getConnection();
String sql="select * from users";
ps=conn.prepareStatement(sql);
rs = ps.executeQuery();
ArrayList<User> list = new ArrayList<>();
//User user=null;
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.size());
for (User user: list) {
System.out.println(user.toString());
}
}finally {
JdbcUtils.release(conn,ps,rs);
}
}
}
到此JDBC操作数据的CRUD简单demo完成。
转载请说明转载来源:https://blog.youkuaiyun.com/weixin_41092717/article/details/82863046