叶千辰  

JDBC API

一、DriverManager

1、注册驱动

DriverManager.registerDriver(new Driver());

registerDriver方法是用于注册驱动的,但是我们之前做的入门案例并不是这样写的。而是如下实现


Class.forName("com.mysql.jdbc.Driver");

我们查询MySQL提供的Driver类,看它是如何实现的,源码如下:


static {
   try {
       DriverManager.registerDriver(new Driver());
  } catch (SQLException var1) {
       throw new RuntimeException("Can't register driver!");
  }
}
//JVM加载类时会执行静态代码块;每个静态代码块只会被执行一次。

在该类中的静态代码块中已经执行了 DriverManager 对象的 registerDriver() 方法进行驱动的注册了,那么我们只需要加载 Driver 类,该静态代码块就会执行。而 Class.forName("com.mysql.jdbc.Driver"); 就可以加载 Driver 类。

==提示:==

  • MySQL 5之后的驱动包,可以省略注册驱动的步骤

  • 自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类

 

2、获取数据库连接


String url = "jdbc:mysql://localhost:3306/JDBCTest";
Connection connection = DriverManager.getConnection(url, "root", "123456");

参数说明:

  • url : 连接路径

    语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…

    细节:

    • 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对

    • 配置 useSSL=false 参数,禁用安全连接方式,解决警告提示

  • user :用户名

  • password :密码

 

二、Connection

1、获取执行对象

  • 普通执行SQL对象


Statement statement = connection.createStatement();
  • 预编译SQL的执行SQL对象:防止SQL注入


    PreparedStatement prepareStatement(sql)

2、事务管理

  • 开启事务


connection.setAutoCommit(false);

MySQL默认是自动提交事务。

true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。

  • 提交事务


connection.commit();
  • 回滚事务


connection.rollback();

3、案例

package com.qianchen;

import java.sql.*;

/*
事务管理
*/
public class JDBCTest02 {
   public static void main(String[] args) throws Exception {
       String url = "jdbc:mysql://localhost:3306/JDBCTest";
       Connection connection = DriverManager.getConnection(url, "root", "123456");
       String sql = "update `User` set `password`=110119 where `username`='李四'";
       Statement statement = connection.createStatement();
       try {
           //开启事务
           connection.setAutoCommit(false);
           //执行sql
           //int a = 3/0;//设置错误,检验 connection.rollback();
           int i = statement.executeUpdate(sql);
           System.out.println(i);
           //提交事务
           connection.commit();

      }catch (Exception e){

           //如果出现错误,就回滚事务
           connection.rollback();
      }
       statement.close();
       connection.close();

  }
}

三、Statement

1、执行DDL、DML语句


int i = statement.executeUpdate(sql);

2、执行DQL语句


ResultSet resultSet = statement.executeQuery(sql);

四、ResultSet

ResultSet对象提供了操作查询结果数据的方法,如下:

boolean next()

  • 将光标从当前位置向下移动一行

  • 判断当前行是否为有效行

方法返回值说明:

  • true : 有效行,当前行有数据

  • false : 无效行,当前行没有数据

xxx getXxx(参数):获取数据

  • xxx : 数据类型;如: int getInt(参数) ;String getString(参数)

  • 参数

    • int类型的参数:列的编号,从1开始。不是行的编号!!!

    • String类型的参数: 列的名称

案例


package com.qianchen;

import java.sql.*;

/*
ResultSet
*/
public class JDBCTest03 {
   public static void main(String[] args) throws Exception {
       String url = "jdbc:mysql://localhost:3306/JDBCTest";
       Connection connection = DriverManager.getConnection(url, "root", "123456");
       String sql = "select * from `User`";
       Statement statement = connection.createStatement();
       ResultSet resultSet = statement.executeQuery(sql);

       while (resultSet.next()){
           /*
           //数字代表列的编号,不是行的编号!!!
           String username = resultSet.getString(1);
           int password = resultSet.getInt(2);
           System.out.println("username:"+username+"-->password:"+password);
           */
           String username = resultSet.getString("username");
           int password = resultSet.getInt("password");
           System.out.println("username:"+username+"-->password:"+password);


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


  }
}

五、PreparedStatement



posted on 2022-05-05 21:52  叶千辰  阅读(350)  评论(0编辑  收藏  举报