JDBC-常用API

发布时间:2024年01月11日

在上一篇文章里介绍了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的模板一样时,只需要进行一次检查和编译。

文章来源:https://blog.csdn.net/buzzkiller/article/details/135440285
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。