1、在在MyJDBCUtils中加入update(String sql , Object[] args)的方法,用于更新数据库中的记录信息
2、update(String sql , Object[] args)方法,根据传进来的sql语句和参数去跟新数据库表的记录,增加了update(String sql , Object[] args)的MyJDBCUtils如下
package com.jdbc.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import com.jdbc.entity.User;
public class MyJDBCUtils {
private static Connection conn;
private static PreparedStatement pstate;
private static ResultSet rs;
// 为了程序的更好的解耦合,利用Properties文件保存连接Mysql的配置文件
private static Properties config = new Properties();
/**
* 使用static块,加载数据库的配置文件和数据库的驱动
*/
static {
try {
config.load(MyJDBCUtils.class.getClassLoader().getResourceAsStream(
"db.properties"));
Class.forName(config.getProperty("driver"));
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* 获取一个数据库的连接
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(config.getProperty("url"),
config.getProperty("username"),
config.getProperty("password"));
} catch (SQLException e) {
throw new RuntimeException("获取连接Mysql数据库连接失败");
}
return conn;
}
/**
* 释放数据库的连接
*
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn, Statement st, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
throw new RuntimeException("ResultSet关闭异常");
}
rs = null;
}
if (st != null) {
try {
st.close();
} catch (Exception e) {
throw new RuntimeException("Statement关闭异常");
}
st = null;
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
throw new RuntimeException("Connection关闭异常");
}
conn = null;
}
}
/**
* 根据User实体的id,到数据库里面取出对应的User记录,然后返回User记录
*
* @param id
*/
public static User findById(int id) {
User user = null;
try {
String sql = "select * from user where id = ? ";
conn = getConnection();
pstate = conn.prepareStatement(sql);
pstate.setInt(1, id);
rs = pstate.executeQuery();
if (rs.next()) {
user = new User();
String uname = rs.getString(rs.findColumn("uname"));
int age = rs.getInt(rs.findColumn("age"));
user.setAge(age);
user.setId(id);
user.setUname(uname);
}
} catch (Exception e) {
throw new RuntimeException("在数据库中,查找id为" + id + "的User记录失败." + e);
} finally {
// 释放资源,关闭与数据库的连接
release(conn, pstate, rs);
}
return user;
}
/**
* 根据传进来的sql语句,来跟新数据库的表记录
*
* @param sql
* @param args
*/
public static void update(String sql, Object[] args) {
try {
if (args.length < 0) {
throw new RuntimeException("Object[] args的数组长度,不应该为空");
}
conn = getConnection();
pstate = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
pstate.setObject(i + 1, args[i]);
}
// 注意要调用这个方法
pstate.executeUpdate();
} catch (Exception e) {
throw new RuntimeException("更新数据库中的记录失败" + e);
} finally {
// 释放资源,关闭与数据库的连接
release(conn, pstate, rs);
}
}
/**
* 根据sql语句来更新数据库表中的记录
*
* @param sql
*/
public static void update(String sql) {
try {
conn = getConnection();
pstate = conn.prepareStatement(sql);
// 注意要调用这个方法
pstate.executeUpdate();
} catch (Exception e) {
throw new RuntimeException("更新数据库中的记录失败" + e);
} finally {
// 释放资源,关闭与数据库的连接
release(conn, pstate, rs);
}
}
}
3、调用MyJDBCUtils更新数据库中id为1的记录,将其年龄改为14岁
package com.jdbc.utils;
import org.junit.Test;
import com.jdbc.entity.User;
public class TestMyJDBCUtils {
@Test
public void testMyJDBCUtils() {
User user = null;
try {
// 查询更新前的数据库记录信息
user = MyJDBCUtils.findById(1);
System.out.println(user);
// 根据sql语句,更新数据库id为1的记录
// 将其年龄age改为 14
String sql = "update user set age = ? where id = ? ";
Object[] args = { 14, 1 };
MyJDBCUtils.update(sql, args);
// 查询更新后的数据库记录信息,看有没有更新成功
user = MyJDBCUtils.findById(1);
System.out.println(user);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
4、程序的运行结果
4.1更改前的数据库信息
4.2更改后的数据库信息
4.3 程序的运行截图