MySQL#4(JDBC常用API详解)

4 篇文章 0 订阅

目录

一.简介

1.概念

2.本质

3.优点

4.步骤

二.API详解

1.DriverManager(驱动管理类)

2.Connection

3.Statement

4.ResultSet

5.PreparedStatement


一.简介

1.概念

JDBC就是使用Java语言操作关系型数据库的一套API(Java DataBase Connectivity)Java 数据库连接

2.本质

官方定义的一套操作所有关系型数据库的规则,即接口各个数据库厂商去实现这套接口,提供数据库驱动jar包
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

3.优点

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

4.步骤

1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
Connection conn = DriverManager.getConnection(
url, username, password);(三个参数最好自己设置为变量, 方便修改)
3.定义SQL语句
String sql = "......";
获取执行SQL对象
Statement stmt = conn.createStatement();
5.执行SQL
stmt.executeUpdate(sql);
6.处理返回结果
7.释放资源

代码示范: 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo1 {
    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/db2";
        String username = "root";
        String  password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //3.定义SQL语句
        String sql = "update account set money = 0 where name = '李四'";
        //4.获取SQL对象
        Statement sta = conn.createStatement();
        //5.执行SQL
        long long1 = sta.executeLargeUpdate(sql);
        //6.打印返回结果
        //long1是受影响的行数
        System.out.println(long1);
        //7.释放资源
        sta.close();
        conn.close();

    }

}

数据库中表的原本数据

修改后的数据

二.API详解

1.DriverManager(驱动管理类)

(1)作用

注册驱动
获取数据库连接

(2)获取连接
static Connection          getConnection(string url,string user, string password)
(3)参数

url: 连接路径
语法: jdbc:mysql://ip地址(域名):端口号/数据库名称
?参数键值对1&参数键值对2...
示例: idbc:mysgl://127.0.0.1:3306/db1

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

配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
user: 用户名
password: 密码

简化和修改后 

2.Connection

(1)作用

获取执行SQL的对象

管理事务

(2)获取执行SQL的对象
普通执行SQL对象
Statement createStatement( )
预编译SQL的执行SQL对象: 防止SQL注入
PreparedStatement prepareStatement (sql)
执行存储过程的对象
CallableStatement prepareCall (sql)

(3)事务管理

MySQL 事务管理
开启事务: BEGIN;/ START TRANSACTION;
提交事务:COMMIT;
回滚事务: ROLLBACK;
MySQL默认自动提交事务

JDBC 事务管理: Connection接口中定义了3个对应的方法
开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务; false为手动提交事务,即为开启事务
提交事务: commit()
回滚事务: rollback()

代码示范:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCDemo2 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //Class.forName("com.mysql.jdbc.Driver");jar5以上才可以不用写这行
        //2.获取连接
        String url = "jdbc:mysql:///db2?useSSL=false";
        String username = "root";
        String  password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        Statement sta = conn.createStatement();
        try {
            conn.setAutoCommit(false);//开启事务
            //3.定义SQL语句
            String sql1 = "update account set money = 0 where name = '李四'";
            String sql2 = "update account set money = 999 where name = '张三'";
            //5.执行SQL
            long long1 = sta.executeLargeUpdate(sql1);
            long long2 = sta.executeLargeUpdate(sql2);
            //6.打印返回结果
            //long1是受影响的行数
            System.out.println(long1);
            System.out.println(long2);
            conn.commit();//提交事务
        } catch (Exception e) {
            conn.rollback();//回滚事务
            throw new RuntimeException(e);
        }
        //7.释放资源
        sta.close();
        conn.close();

    }

}

开启事务前

开启事务后:

3.Statement

作用: 执行SQL语句
int executeUpdate(sql):
执行DML、DDL语句
返回值: (1) DML语影响的行数  (2) DDL语执行后,执行成功也可能返回 0
ResultSet executeQuery(sql):
执行DQL 语句

返回值:ResultSet 结果集对象

4.ResultSet

作用: 封装了DQL查询语句的结果
ResultSet
stmt.executeQuery(sql): 执行DQL 语句,返回 ResultSet 对象
获取查询结果

boolean next(): (1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行返回值:
true: 有效行,当前行有数据
false: 无效行,当前行没有数据

getXxx(参数): 获取数据XXXxxx: 数据类型;

如: int getlnt(参数);String getString(参数)

参数:
可以是列的编号, 
从1开始; 也可以是列的名称

代码示范: 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test1 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接
        String url = "jdbc:mysql:///db2?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //定义sql
        String sql = "select * from account";
        //获取statement对象
        Statement sta = conn.createStatement();
        //执行sql
        ResultSet result1 = sta.executeQuery(sql);
        while(result1.next()){
            int id = result1.getInt(1);
            //也可以写成int id = result1.getInt("id");
            String name = result1.getString(2);
            //String name = result1.getString("name");
            double money = result1.getDouble(3);
            //double money = result1.getDouble("money");
            System.out.println(id);
            System.out.println(name);
            System.out.println(money);
            System.out.println("=============");
        }
        //释放资源
        conn.close();
        result1.close();
        sta.close();
    }
}

结果展示: 

将查询到的数据收藏到集合中(重点)

代码示范:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class Test1 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接
        String url = "jdbc:mysql:///db2?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);
        //定义sql
        String sql = "select * from account";
        //获取statement对象
        Statement sta = conn.createStatement();
        //执行sql
        ArrayList<Account> list = new ArrayList<>();//创建一个集合来存储数据
        ResultSet result1 = sta.executeQuery(sql);
        while(result1.next()){
            Account acc = new Account();//创建一个对象
            int id = result1.getInt(1);
            //也可以写成int id = result1.getInt("id");
            String name = result1.getString(2);
            //String name = result1.getString("name");
            double money = result1.getDouble(3);
            //double money = result1.getDouble("money");

            acc.setId(id);
            acc.setName(name);
            acc.setMoney(money);
            list.add(acc);//将数据存到集合中
        }
        System.out.println(list);
        //释放资源
        conn.close();
        result1.close();
        sta.close();
    }
}

结果展示: 

5.PreparedStatement

作用:
(1)预编译SQL,性能更高(
预编译功能开启: useServerPrepStmts=true)并执行SQL语句

(2)可以防止SQL注入
(3)获取 PreparedStatement 对象
SQL语句中的参数值,使用? 占位符替代

String sql = "select * from user where username = ? and password = ?";
通过Connection对象获取,并传入对应的sql语句

PreparedStatement pstmt = conn.prepareStatement(sql);
(4)设置参数值
PreparedStatement对象: setXxx(参数1,参数2): 给 ? 赋值

Xxx: 数据类型 ;如 setlnt(参数1,参数2)参数:
参数1:
?的位置编号,从1 开始
参数2: ?的值
(5)执行SQL
executeUpdate();   executeQuery(); : 不需要再传递sql

预编译功能的开启:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值