13.MySQL数据库JDBC编程

2022-10-26 15:23:13 浏览数 (1)

JDBC编程中主要用到的类/对象 1.DataSource 用于配置如何连接MySQL 2.Connection 表示建立好的一次连接(在操作数据库之前要先建立连接) 3.PrepareStatement 对应到一个SQL语句 4. ResultSet 表示select查找结果的结果集

1.先创建好MySQL的数据库

代码语言:javascript复制
mysql> show databases;
 -------------------- 
| Database           |
 -------------------- 
| information_schema |
| musicserver        |
| mysql              |
| performance_schema |
| sys                |
| test2              |
 -------------------- 
13 rows in set (0.05 sec)

mysql> create database java_0224;
Query OK, 1 row affected (0.04 sec)

mysql> use java_0224;
Database changed

mysql> create table student(id int, name varchar(20), classId int);
Query OK, 0 rows affected (0.06 sec)

2.如果是增删改操作,整体的JDBC代码为:

代码语言:javascript复制
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestJDBC01 {
    public static void main(String[] args) throws SQLException {
        //1.创建DataSource对象(dataSource生命周期是跟随整个程序)
        DataSource dataSource = new MysqlDataSource();
        //  接下来需要针对 DataSource进行一些配置,保证后面能够顺利的访问数据库
        //  主要配置三个信息:URL  User  Password
        //  以上过程需要进行向下转型
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0224?characterEncoding=utf-8&useSSL=true");
        //  此处的127.0.0.1就表示本机,只要Mysql装在本机都可以使用这个ip
        //  3306是端口号
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("09050797");

        //2.和数据库建立连接
        //  建立连接的意义是为了验证当前网络通信是否正常
        //  如果不正常就会抛出 SQLException异常
        //  connect生命周期是较短的,每个请求创建一个新的connect
        Connection connection = dataSource.getConnection();

        //3.拼装SQL语句,用到 PrepareStatement 对象
        //  当前示例中插入的数据内容是确定的。也可以动态拼接进去
//        String sql = "insert into student values(1, '曹操', 10)";
//        PreparedStatement statement = connection.prepareStatement(sql);
        //  动态拼装是这样的
        //  ?是一个占位符,可以把具体的变量的值替换到 ?位置
        int id = 1;
        String name = "曹操";
        int classId = 10;
        String sql = "insert into student values(?, ?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        //此处的1,2,3相当于 ? 的下标(从1开始算)
        statement.setInt(1,id);
        statement.setString(2,name);
        statement.setInt(3,classId);
        System.out.println("statement:" statement);

        //4.拼装完之后,开始执行SQL
        //   insert  delete  update  都使用executeUpdate()方法
        //   select 使用 executeQuery() 来执行
        //返回值表示此次操作修改了多少行
        int ret = statement.executeUpdate();
        System.out.println("ret:"   ret);

        //5.执行完毕之后需要释放相关资源
        //  后创建的先释放
        statement.close();
        connection.close();
    }
}

运行结果为:

在数据库中查找发现已经添加成功了:

3.如果是查找操作,整体的JDBC代码为:

代码语言:javascript复制
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//查找操作
public class TestJDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1. 创建DataSource对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0224?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("09050797");

        //2.创建Connection 对象
        Connection connection = dataSource.getConnection();

        //3.借助PrepareStatement拼装SQL语句
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.执行SQL语句
        ResultSet resultSet = statement.executeQuery();

        //5.遍历结果集
        //  建立过程和使用迭代器遍历集合类有点像
        while (resultSet.next()){
            //resultSet 的光标指向了当前行,就可以把当前列中的数据全部获取到
            //当前表中的每一行包含三个列,id、name、classId,可以根据列名来获取对应列的数据
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int classId = resultSet.getInt("classId");
            //此处参数中的列名必须和数据库中的列名完全一致,顺序无所谓
            System.out.println("id:" id "   name:" name "   classId:" classId);
        }

        //6.关闭释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

执行结果:

4.如果是删除操作,整体的JDBC代码为:

代码语言:javascript复制
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBCDelect {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的学生姓名");
        String name = scanner.next();
        //1.创建DataSource对象(dataSource生命周期是跟随整个程序)
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0224?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("09050797");

        //2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        //3.拼装SQL语句,用到 PrepareStatement 对象
        String sql = "delete from student where name = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);

        //4.拼装完之后,开始执行SQL
        int ret = statement.executeUpdate();
        if (ret == 1){
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }

        //5.执行完毕之后需要释放相关资源
        statement.close();
        connection.close();
    }
}

执行结果为:

在数据库中查找得到:

删除成功!

5.如果是修改操作,整体的JDBC代码为:

代码语言:javascript复制
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBCUpdata {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要修改的学生id");
        int id = scanner.nextInt();
        System.out.println("请输入要修改的学生name");
        String name = scanner.next();

        //1.创建DataSource对象(dataSource生命周期是跟随整个程序)
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0224?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("09050797");

        //2.和数据库建立连接
        Connection connection = dataSource.getConnection();

        //3.拼装SQL语句,用到 PrepareStatement 对象
        String sql = "update student set name = ? where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);

        //4.拼装完之后,开始执行SQL
        int ret = statement.executeUpdate();
        if (ret == 1){
            System.out.println("修改成功");
        }else {
            System.out.println("修改失败");
        }

        //5.执行完毕之后需要释放相关资源
        statement.close();
        connection.close();
    }
}

执行结果为:

数据库中执行结果:

修改成功!

0 人点赞