jdbc初学理解(二)

之前的代码都是异常外抛,现在处理异常

用try-catch-resource中的自动关闭,处理起来使代码比较简洁,且不容易出错

import java.sql.*;

/**
 * day04.jdbc,try-catch-resource异常处理
 *
 * 在set值时,会有问题 ->Demo8
 */

public class JdbcDemo3 {

    static String url = "day04.jdbc:mysql://127.0.0.1:3306/course?serverTimezone = GMT";
    static String userName = "root";
    static String password = "";

    public static void main(String[] args) {

        String sql = "select * from tb_user";

        try (Connection connection = DriverManager.getConnection(url, userName, password);
             PreparedStatement statement = connection.prepareStatement(sql);
             ResultSet resultSet = statement.executeQuery()
        ) {
            while (resultSet.next()) {

                int id = resultSet.getInt("id");
                String name = resultSet.getString("user_name");
                int age = resultSet.getInt("user_id");

                String row = String.format("id=%d,name=%s,age=%d", id, name, age);
                System.out.println(row);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

正常select语句的的异常处理,这里的sql语句都是写死的

如果动态处理sql,就会面临statement.setInt(1,2)放在哪个位置的尴尬境地,发在{}里statement.executeQuery()运行在statement.setInt(1,2)之前,放在resource()里则会报受检异常,表示不支持

所以:需要两次try-catch-resource

import java.sql.*;

/**
 * day04.jdbc,try-catch-resource异常处理
 * <p>
 * 在set值时,会有问题 ->Demo8
 * 单独try-catch处理ResultSet
 */

public class JdbcDemo8 {

    static String url = "day04.jdbc:mysql://127.0.0.1:3306/course?serverTimezone = GMT";
    static String userName = "root";
    static String password = "";

    public static void main(String[] args) {

        String sql = "select * from tb_user where id>?";

        try (Connection connection = DriverManager.getConnection(url, userName, password);
             PreparedStatement statement = connection.prepareStatement(sql);
        ) {
            statement.setInt(1, 2);
            try (ResultSet resultSet = statement.executeQuery();
            ) {
                while (resultSet.next()) {

                    int id = resultSet.getInt("id");
                    String name = resultSet.getString("user_name");
                    int age = resultSet.getInt("user_id");

                    String row = String.format("id=%d ,name=%s ,age=%d", id, name, age);
                    System.out.println(row);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

补充下动态设置:

sql 中,where id = ?,后续用statement.setInt(1,2)(或者setString,或者setObject),其中第一个参数表示第几个问好,第二个参数表示要赋的值

posted on 2021-01-28 15:54  测开小白的杂货铺  阅读(56)  评论(0)    收藏  举报