:MySQL之Java的JDBC编程

Posted 我擦我擦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:MySQL之Java的JDBC编程相关的知识,希望对你有一定的参考价值。

文章目录

一:JDBC基本概念

(1)JDBC是什么

JDBC:全称为Java Database Connectivity,也即Java数据库连接,是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范,为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问(例如MySQL、SQL Server等等)

(2)JDBC工作原理

JDBC工作原理:JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。JDBC访问数据库层次结构如下

二:JDBC使用

(1)下载驱动

进入Maven Repository中搜索“mysql”,然后选择“MySQL Connector Java”

下拉选择相应版本的下载,注意大版本号要对应,这里我选择8.0.31,然后选中jar下载

  • jar包是Java程序发布的一种常见方式

(2)添加项目依赖

首先创建一个项目

然后创建一个和src同级的目录,这里我命名为lib

接着把驱动包拷贝到该目录下

右键lib选择Add as Library,让IDEA能够识别目录中的jar包

(3)JDBC基本流程

JDBC基本流程

  • 创建数据源对象
  • 设置URL、用户名和密码
  • 与服务器建立连接
  • 构造SQL语句并进行预处理
  • 执行SQL语句
  • 释放资源
import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBC 
    public static void main(String[] args) throws SQLException 

                    /************创建数据源对象:它描述了要访问的数据库是什么,在哪里 **************/

        /*
             1: DataSource来源标准库,是一个接口,而MysqlDataSource来源于MySQL驱动包
             2:每种数据库都会提供对应的类来实现DataSource接口(向上转型)
        */

        DataSource dataSource = new MysqlDataSource();

                  /************设置URL、用户名和密码 **************/

        /*
             1:DataSource服务于各种数据库,而MysqlDataSource只是服务于MySQL
             2: MySQL是一个C/S程序,要描述服务器的位置就必须指定服务器地址,所以需要
                向下转型,转成子类后调用MysqlDataSource中的setURL方法

             3:当然你也可以不用多态写法,写成下面这样
                    MysqlDataSource dataSource = new MysqlDataSource();
                    dataSource1.setURL();
               但是这样的写法会导致MysqlDataSource与项目耦合程度太高,
               因此未来在更换数据库时修改成本就会增加
             4:setURL中各字段含义如下
                        jdbc:mysql:  协议名称
                        127.0.0.1:IP地址,这是本地环回,即本机IP地址
                        3306:端口号
                        mysql_java:要访问的数据库名称
                        characterEncoding=utf8:客户端使用的字符集(注意要和服务器一致)
                        useSSL=false:设置连接不加密
                        serverTimezone=UTC:设置时区为全球标准时间

         */
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("password");

                  /************与服务器建立连接**************/
        /*
            1:注意处理异常,因为有很多原因可能会导致连接建立失败

            2:使用Connection来表示连接,且注意Connection应该要使用JDBC(java.sql)下的Connection
            不要使用MySQL中的Connection
         */
        Connection connection = dataSource.getConnection();
        System.out.println(connection);  // 如果可以正常显示代表连接成功

                 /************构造SQL语句并进行预处理**************/
        /*
            1:使用高级语言操作数据库时,还是要通过SQL语句进行
            2:如果直接把 字符串发给数据库,数据库就得对其进行解析(耗时比较长)
            3:因此我们会把解析工作放在客户端进行,待客户端解析完成后直接把解析后的结果发送给数据库
            4:所以需要通过字符串描述待执行的SQL操作,然后构造PreparedStatement对象
         */
        String sql = "insert into student values(1, '张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

                /************执行SQL语句**************/

        /*
             1:executeUpdate 对应插入删除、修改语句,返回值表示这次SQL影响了多少行
             2:excuteQuery 对应查询语句,返回值是临时表数据
         */
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

              /************释放资源**************/

        statement.close();
        connection.close();
    


三:使用示例

(1)插入INSERT

实际在插入数据时不能把数据写死,要依据用户的输入把信息放入相应的字段,可以借助statementsetXXX方法实现

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCINSERT 
    public static void main(String[] args) throws SQLException 
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("password");
        Connection connection = dataSource.getConnection();

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生学号");
        int Sid = sc.nextInt();
        System.out.println("请输入学生姓名");
        String Sname = sc.next();
        String sql = "insert into student values(?, ?)"; //?是占位符
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, Sid);
        statement.setString(2, Sname);

        int n = statement.executeUpdate();
        System.out.println("n = " + n);
        statement.close();
        connection.close();
    


(2)更新UPDATE

更新前表状态


代码

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCUPDATE 
    public static void main(String[] args) throws SQLException 
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("password");
        Connection connection = dataSource.getConnection();

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改学生的学号");
        int Sid = sc.nextInt();
        System.out.println("请输入要修改学生的姓名");
        String Sname = sc.next();
        String sql = "update student set Sname = ? where Sid = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(2, Sid);
        statement.setString(1, Sname);

        int n = statement.executeUpdate();
        System.out.println("n = " + n);
        statement.close();
        connection.close();
    



(3)删除DELETE

更新前表状态


代码

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCDELETE 
    public static void main(String[] args) throws SQLException 
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("password");
        Connection connection = dataSource.getConnection();

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除学生的学号");
        int Sid = sc.nextInt();
        String sql = "delete from student where Sid = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, Sid);

        int n = statement.executeUpdate();
        System.out.println("n = " + n);
        statement.close();
        connection.close();
    


(4)查询SELECT

注意查询时要使用executeQuery方法,并用resultSet接受返回结果

import com.mysql.cj.jdbc.MysqlDataSource;

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

public class JDBCSELECT 
    public static void main(String[] args) throws SQLException 
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysql_java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("password");
        Connection connection = dataSource.getConnection();


        String sql = "select * from student where Sid > 3";
        PreparedStatement statement = connection.prepareStatement(sql);

        //注意查询语句需要使用executeQuery来完成
        ResultSet resultSet = statement.executeQuery();

        //然后需要遍历结果集合
        while(resultSet.next())
            int Sid = resultSet.getInt("Sid");
            String Sname = resultSet.getString("Sname");
            System.out.println("Sid = " + Sid + ", Sname = " + Sname);
        

        resultSet.close();
        statement.close();
        connection.close();
    


以上是关于:MySQL之Java的JDBC编程的主要内容,如果未能解决你的问题,请参考以下文章

Java解惑 之 MySQL与JDBC编程

:MySQL之Java的JDBC编程

Java之JDBC

JavaWeb开发之JDBC知识总结

MySQL数据库 --- Java的JDBC编程

jdbc操作数据库(详细)