@[TOC]JDBC——增删改查
本篇将介绍JDBC源码对数据库的基本操作——增删改查
一、未封装的JDBC数据库操作源码,增删改查四个操作每一个都必须要经历7个步骤,分别为:
(1)加载数据库
(2)创建数据库连接
(3)准备数据库sql语句
(4)处理sql语句
(5)得到产生的结果
(6)处理结果
(7)释放加载的资源
一、未对连接进行封装的JDBC数据库操作源码,注释都写在里面哦,很容易就能看懂,源码如下:
//1.查询tb_user这张表中的数据
public static void printAllUser() {
try {
//(1)加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//(2)创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=uft8","root","123456");
System.out.println("数据库连接成功!");
//(3)准备写出sql语句
String sql = "select * from tb_user";
//(4)选中语句并执行它
PreparedStatement pstm = conn.prepareStatement(sql);
//(5)产生结果
ResultSet rs = pstm.executeQuery();
//(6)处理结果
while(rs.next()) {
System.out.println("用户编号"+rs.getInt(1)+",用户名称"+rs.getString(2)+",用户密码"+rs.getString(3));
}
//(7)释放连接
rs.close();
pstm.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
//2.新增数据
public static void addUser(){
try {
//(1)加载数据库成功
Class.forName("com.mysql.jdbc.Driver");//反射:reflect - 封装,要想得到封装具体细节,需要用反射机制来获取
//(2)创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true$characterEncoding=uft8","root","123456");
System.out.println("数据库连接成功!");
//(3)准备SQL语句
String sql = "insert into tb_user values(null,?,?,?)";
//(4)处理SQL语句
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1,"陈潇猫");
pstm.setString(2,"961215");
pstm.setInt(3,1);
//(5)产生结果
int num = pstm.executeUpdate();
//(6)处理结果
System.out.println("新增成功<"+num+">受到影响");
//(7)释放资源
pstm.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
//3.删除数据
public static void delUser() {
try {
//(1)加载数据库
Class.forName("com.mysql.jdbc.Driver"); //反射:reflect - 封装,想要得到具体细节,需要用反射机制来获取
//(2)创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
System.out.println("数据库连接成功!");
//(3)准备数据库语句
String sql = "delete from tb_user where uid=2";
//(4)处理SQL语句
PreparedStatement pstm = conn.prepareStatement(sql);
/*Statement stmt = conn.createStatement(); */ //创建Statement对象
//(5)产生结果
int num = pstm.executeUpdate();
//(6)处理结果
System.out.println("删除成功<"+num+">受到影响");
//(7)释放资源
pstm.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
//4.更改用户信息
public static void updUser() {
Scanner in = new Scanner(System.in);
try {
//(1)加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//(2)建立数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
System.out.println("请输入更新后的用户编号:");
int uid = in.nextInt();
System.out.println("请输入更新后的用户名称:");
String username = in.next();
System.out.println("请输入更新后的用户密码:");
String userPassword = in.next();
System.out.println("请输入更新后的用户类型:");
int tid = in.nextInt();
//(3)准备sql语句
String sql = "update tb_user set username=?,userpassword=?,tid=? where uid=?";
//(4)执行sql语句
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1,username);
pstm.setString(2,userPassword);
pstm.setInt(3,tid);
pstm.setInt(4,uid);
//(5)产生结果
/* ResultSet rs = pstm.executeQuery();*/
int num = pstm.executeUpdate();
//(6)执行结果
System.out.println("修改成功<"+num+">行受影响");
//释放连接
pstm.close();
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
//5.模糊查询
public static void fuzzyQuery(){
try {
//(1)加载数据库
Class.forName("com.mysql.jdbc.Driver");
//(2)创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
System.out.println("数据库连接成功!");
//(3)准备sql语句
String sql = "select * from tb_user where username like '%猫%'";
//(4)处理sql语句
PreparedStatement pstm = conn.prepareStatement(sql);
//(5)产生结果
ResultSet rs = pstm.executeQuery();
//(6)处理结果
while (rs.next()) {
System.out.println("用户编号"+rs.getInt(1)+",用户名称"+rs.getString(2)+",用户密码"+rs.getString(3));
}
}catch (Exception e) {
e.printStackTrace();
}
}
//6.精准查询
public static void selOneById(){
try {
//(1)加载数据库
Class.forName("com.mysql.jdbc.Driver");
//(2)创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8","root","123456");
System.out.println("数据库连接成功!");
//(3)准备sql语句
String sql = "select * from tb_user where uid=10";
//(4)处理sql语句
PreparedStatement pstm = conn.prepareStatement(sql);
//(5)产生结果
ResultSet rs = pstm.executeQuery();
//(6)处理结果
while (rs.next()) {
System.out.println("用户编号"+rs.getInt(1)+",用户名称"+rs.getString(2)+",用户密码"+rs.getString(3));
}
}catch (Exception e) {
e.printStackTrace();
}
}
二、可以看到以上代码中每一种方法的编写都会重复使用数据库连接,在大量的数据库操作过程中,重复使用是会造成代码冗余并且影响速度,下面可以把数据库连接封装成一个函数,在每个方法中调用,封装函数代码如下:
//封装连接数据库
public Connection getConn() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=uft8";
String root = "root";
String password = "123456";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,root,password);
return conn;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
可以用getConn()函数替换掉每个方法中连接数据库的代码,这样就简化了代码,减少代码量,是整体看起来更清晰。
三、使用文档式调用静态资源实现数据库连接,原理很简单,就是将连接数据库的几个参数存放在properties文件里面。通过静态方法调用它,去除其中的参数,与直接写上去并无差别,不过写上去更直接,调用静态资源有个很大的优点是如果需要修改参数,不需要去找java代码,这就能为不懂java代码的人修改参数带来会很大的便利,properties文件可以写成如下:
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/db_ssm?userSSL=true$characterEncoding=utf8
jdbcuser = root
password = 123456
调用方式如下:
//1.数据库连接的获取
public static String driver;
public static String url;
public static String jdbcuser;
public static String password;
public static Properties properties = new Properties();
//获取db.properties资源,static方法代表软件一打开就会自动加载资源文件
static {
try {
properties.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
jdbcuser = properties.getProperty("jdbcuser");
password = properties.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
//1.实现数据库连接的获取
public Connection getConn() {
try {
Class.forName(driver);
conn = DriverManager.getConnection(url,jdbcuser,password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
以上实现了数据库的连接,很清晰方便。