C/C++教程

JDBC API

本文主要是介绍JDBC API,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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



这篇关于JDBC API的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!