JDBC学习,快速使用,API介绍

52 阅读4分钟

概念:使用Java语言操作关系型数据库的一套API

全称:( Java DataBase Connectivity ) Java 数据库连接

用处:使用同一套Java代码,操作不同的关系型数据库。SUN公司定义了一套标准接口,各个想支持Java的数据库生产商只要按照此接口提供相应的实现,就可以使用JDBC进行操作。真正执行的代码是驱动jar包中的实现类

好处:各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;可随时替换底层数据库,访问数据库的Java代码基本不变

Java操作数据库的流程:Java代码将SQL语句发送到MySQL服务端,MySQL服务端接收到并执行该SQL语句,将SQL语句执行的结果返回给Java代码

简单使用:

  1. 下载jar包。image.png
  2. 在项目模块下建一个文件夹用来存放驱动jar包(一般取名为lib),并将该jar包Add as Library. 有三个选项:Global Library,全局有效、Project Library : 项目有效、Module Library : 模块有效。看情况选。
  3. 编写jdbc操作代码
    public class demo {
        public static void main(String[] args) throws Exception {
            //1. 注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/mybatis_study";
            String username = "你的mysql用户名";
            String password = "你的密码";
            Connection conn = DriverManager.getConnection(url, username, password);
            //3. 定义sql
            String sql = "根据你的数据库写sql语句";
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);//受影响的行数
            //6. 处理结果
            System.out.println(count);
            //7. 释放资源
            stmt.close();
            conn.close();
        }
    }
    

DriverManager:两个作用,注册驱动、获取数据库连接

  1. 类中的静态方法registerDriver()用于注册驱动,但上面没有看到。
    因为MySQL提供的Driver类中的静态代码块中已经执行了registerDriver()方法进行驱动的注册了,那么我们只需要加载 Driver类,该静态代码块就会执行 image.png MySQL 5之后可以省略注册驱动的步骤,自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
  2. url 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
    本机IP:127.0.0.1
    如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为: jdbc:mysql:///数据库名称?参数键值对。比如useSSL=false参数,禁用安全连接方式,解决警告提示 image.png

Connection:获取执行 SQL 的对象、管理数据库事务

  1. 普通执行SQL对象,上面用的那种、预编译SQL的执行SQL对象,可以防止SQL注入。后面重点讲、执行存储过程的对象,不常用不讲
  2. MySQL中事务管理的操作:
    开启事务 : BEGIN; 或者 START TRANSACTION;
    提交事务 : COMMIT; 默认
    回滚事务 : ROLLBACK;
    Connection接口中定义了3个对应的方法
    开启事务:setAutoCommit(false); 即关闭默认的提交
    提交事务:commit()
    回滚事务:rollback();
    //使用try…catch来执行逻辑
    try {
    //开启事务
    conn.setAutoCommit(false);//5.执行sql
    int count1 = stmt.executeUpdate(sql1);//受影响的行数//6.处理结果
    system.out.println(count1);int i = 3/0;
    //5.执行sql
    int count2 = stmt.executeUpdate(sql2);//受影响的行数//6.处理结果
    system.out.println(count2);
    //提交事务
    conn.commit();
    }catch (Exception throwables) {
    //回滚事务
    conn.rollback(O;
    throwables.printStackTrace(;
    }
    

Statement:对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样。ResultSet后面讲 image.png DML增删改数据、DDL增删改库表、DQL查

// 获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
// 执行sql
int count = stmt.executeUpdate(sql);

ResultSet:执行了DQL语句后就会返回该对象,封装了SQL查询语句的结果。然后就需要从 ResultSet 对象中获取我们想要的数据。
ResultSet 对象如下图
image.png
方法:boolean next()、xxx getXxx(参数)
一开始光标指定于第一行前,如图红色箭头指向于表头行。调用next()方法后,光标就下移到第一行,并且方法返回true,此时就可以通过getint("id")获取当前行id字段的值,也可以通过getstring("name")获取当前行name字段的值。如果想获取下一行的数据,继续调用next()方法,以此类推。 image.png image.png PreparedStatement:预编译SQL语句并执行,预防SQL注入问题
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。 image.png
PreparedStatement使用步骤: image.png

image.png 原理:将敏感字符进行转义。
PreparedStatement可以开启预编译SQL,效率更高:在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译,执行时就不用再进行这些步骤了。
因为检查SQL和编译SQL花费的时间比执行SQL的时间长。如果检查和编译不需要重复执行,性能就提高了。
如果sql模板一样,则只需要进行一次检查、编译
开启方法:在代码中编写url时需要加上参数:useServerPrepStmts=true。