JDBC-常用API

在上一篇文章里介绍了JDBC的概念、产生原因及简单使用。本篇将介绍JDBC的常用API,包括Connection,Statement, ResultSet, PreparedStatement。

一、Connection

Connection是数据库的连接对象。有两个作用:(1)获取执行SQL的对象(2)管理事务

关于第(1)点,将会在后续介绍,这里介绍一下(2)管理事务的操作。

管理事务有三个主要的API:

setAutoCommit(boolean b);

commit();

rollback();

具体的使用的注释见下面的代码片段:


        // 关闭自动提交:true为自动提交事务;false为手动提交事务,即为开启事务        
        connection.setAutoCommit(false);
        try {

            // 定义sql
            String sql1 = "update user set phone = '666' where id = 1";

            String sql2 = "update user set phone = '666' where id = 2";

            // 获取执行sql的对象
            statement = connection.createStatement();
            // 执行更新语句
            statement.executeUpdate(sql1);

            // 若放开这一行,出现了异常,事务会回滚,相当于两条sql都没有执行
             int x = 9 / 0;

            statement.executeUpdate(sql2);
            // 提交事务
            connection.commit();
        } catch (Exception e) {
            // 回滚
            connection.rollback();
            e.printStackTrace();
        } finally {

            // 释放资源
            connection.close();
            statement.close();
        }
二、Statement

Statement是执行SQL的对象,作用也是用于执行SQL。常用的SQL有DDL, DML, DQL,有以下两个常用的API。

int executeUpdate(String sql); 执行DDL, DML语句,返回值是影响的行数;

ResultSet executeQuery(String sql); 执行DQL语句,返回值是结果集对象;

更新语句可以见(一)中的示例,返回值对象将在下一节介绍。

三、ResultSet

JDBC执行查询SQL的返回值。作用就是封装返回对象。主要API有如下两个

boolean next(); 判断是否还有有效的数据;

xxx getXxx(参数) 获取数据,getInt, getString等。对于参数,可以是int或是string类型的。当参数是int时,表示的是列的编号;参数是string时,表示的是列的名称。

        // 定义sql
        String sql = "select * from user";

        // 获取执行sql的对象
        statement = connection.createStatement();
        // 执行更新语句
        ResultSet resultSet = statement.executeQuery(sql);

        while (resultSet.next()) {
            Long id = resultSet.getLong("id");
            String name = resultSet.getString("name");
            String gender = resultSet.getString("gender");
            String phone = resultSet.getString("phone");
            System.out.println(id + name + gender + phone);
        }

        // 释放资源
        connection.close();
        statement.close();
四、PreparedStatement

继承自Statement,预编译SQL语句并执行,预防SQL注入问题,且性能更高。

        // 定义sql,用?作为占位符表示查询的参数
        String sql = "select * from user where name = ? and phone = ?";

        // 需要传入sql作为参数
        PreparedStatement statement = connection.prepareStatement(sql);

        // 第一个参数表示第几个占位符,设置?的值
        statement.setString(1, "zs");
        statement.setString(2, "777");

        // 执行更新语句
        ResultSet resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Long id = resultSet.getLong("id");
            String name = resultSet.getString("name");
            String gender = resultSet.getString("gender");
            String phone = resultSet.getString("phone");
            System.out.println(id + name + gender + phone);
        }

        // 释放资源
        resultSet.close();
        statement.close();
        connection.close();

 关于性能更高的原因:在获取PreparedStatement对象时,会将参数里的sql发送约MySQL服务器进行检查和编译,因此耗时的动作先完成了;而且如果sql的模板一样时,只需要进行一次检查和编译。

相关推荐

  1. JDBC-API

    2024-01-08 20:46:02       41 阅读
  2. unity---API

    2024-01-08 20:46:02       9 阅读
  3. <span style='color:red;'>常</span><span style='color:red;'>用</span><span style='color:red;'>API</span>

    API

    2024-01-08 20:46:02      12 阅读
  4. uniappapi讲解

    2024-01-08 20:46:02       39 阅读
  5. uniapp一些api

    2024-01-08 20:46:02       36 阅读
  6. 生活、工作API免费接口

    2024-01-08 20:46:02       27 阅读
  7. ROS-ROS通信机制-API

    2024-01-08 20:46:02       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-08 20:46:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-08 20:46:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-08 20:46:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-08 20:46:02       20 阅读

热门阅读

  1. 笨蛋学设计模式创建者模式-单例模式【2】

    2024-01-08 20:46:02       30 阅读
  2. Django5+DRF入门教程

    2024-01-08 20:46:02       39 阅读
  3. 2024校招,网易互娱游戏测试工程师一面

    2024-01-08 20:46:02       34 阅读
  4. Vagrant Centos 7 环境配置

    2024-01-08 20:46:02       38 阅读
  5. 使用structured concurrency简化异步并发调用

    2024-01-08 20:46:02       51 阅读
  6. Wargames与bash知识10

    2024-01-08 20:46:02       32 阅读
  7. kotlin take 和 drop

    2024-01-08 20:46:02       37 阅读
  8. Copilot在Pycharm的应用和示例

    2024-01-08 20:46:02       32 阅读
  9. python常见解包方式

    2024-01-08 20:46:02       32 阅读