JDBC API详解——Statement

JDBC API详解——Statement,第1张

JDBC详解——Statement

作用:执行SQL语句

1、int executeUpdate(sql):执行DML(对数据增删改)、DDL(对表和库的增删改查)语句

返回值:
(1)DML语句影响的行数

//3、定义sql
        String sql1 = "UPDATE account set money = 2000 where id = 1";

        //4、获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5、执行sql
        int count1 = stmt.executeUpdate(sql1);

        //6、处理结果
        System.out.println(count1);

在上述代码中,sql1就是一条DML语句,count1就是执行后所影响的行数,运行结果为1。如果将DML语句改为UPDATE account set money = 2000 where id = 10,而原表中并没有id=10的记录,运行结果会返回0。

但用户想要看到的结果是“成功”或者是“失败”,而不是输出0或1,可以通过影响的行数判断是否执行成功,使用if-else语句,如果大于0输出“执行成功”,否则输出“执行失败”,代码如下:

//3、定义sql
        String sql1 = "UPDATE account set money = 2000 where id = 1";

        //4、获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5、执行sql
        int count1 = stmt.executeUpdate(sql1);

        //6、处理结果
        //System.out.println(count1);
        if(count1>0){
            System.out.println("执行成功");
        }else {
            System.out.println("执行失败");
        }

(2)DDL语句执行后,执行成功也可能返回0
下面代码是创建一个数据库db2,执行成功,输出结果为1,在数据库内也会成功创建db2数据库。

//3、定义sql
        String sql1 = "create database db2";

        //4、获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5、执行sql
        int count1 = stmt.executeUpdate(sql1);

        //6、处理结果
        System.out.println(count1);

下面代码是删除一个数据库db2,IDEA输出结果为0,但数据库db2成功被删除了,说明此DDL语句执行成功也可能会返回0:

//3、定义sql
        String sql1 = "drop database db2";

        //4、获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5、执行sql
        int count1 = stmt.executeUpdate(sql1);

        //6、处理结果
        System.out.println(count1);

因此,执行DDL语句时,不能通过影响行数的结果判断是否执行成功。

2、ResultSet executrQuery(sql): 执行DQL语句(查询语句)(比较常用)

返回值:ResultSet 结果集对象(封装了DQL查询语句的结果)

【获取查询结果】

boolean next():
1)将光标从当前位置向下移动一行,开始默认在属性行;
2)判断当前行是否为有效行
返回值:

true:有效行,当前行有数据;false:无效行,当前行没有数据。

xxx getXxx(参数):获取数据
xxx:数据类型,如:int getInt(参数),String getString(参数)
参数:int:列的编号,从1开始 ; String:列的名称

获取查询结果过程:
最开始光标指在id-name-money一行,从当前位置往下一行,指在id=1的行,判断这一行是否有效,当前行有效,返回true,获取数据;从当前位置往下一行,指在id=2的行,判断这一行是否有效,当前行有效,返回true,获取数据;从当前位置往下一行,判断这一行是否有效,当前行无效,没有数据,返回false,执行结束;

这个过程是一个重复执行的过程,可以用一个循环:

//循环判断游标是否是最后一行末尾
while(rs.next()){
    //获取数据
    rs.getXxx(参数);
}

以下两种方法都可以实现,第一种使用getXxx(int(列的编号,从1开始)),另一种是getXxx(String(列的名称)),记得加引号!

//3、定义sql
        String sql1 = "select * from account";

        //4、获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5、执行sql
        ResultSet rs = stmt.executeQuery(sql1);

        //6、处理结果,遍历rs中的数据
           //6.1光标向下移动一行,并判断当前行是否有数据
//        while(rs.next()){
//            //6.2 获取数据 getXxx()
//            int id = rs.getInt(1);
//            String name = rs.getString(2);
//            double money = rs.getDouble(3);
//
//            System.out.println(id);
//            System.out.println(name);
//            System.out.println(money);
//
//            System.out.println("-----------------------");
//        }

        while(rs.next()){
            //6.2 获取数据 getXxx()
            int id = rs.getInt("id");
            String name = rs.getString("name");
            double money = rs.getDouble("money");

            System.out.println(id);
            System.out.println(name);
            System.out.println(money);

            System.out.println("-----------------------");
        }

        //7、释放资源
        stmt.close();
        conn.close();

两种方式运行结果相同

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/990919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存