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),其中第一个参数表示第几个问好,第二个参数表示要赋的值
浙公网安备 33010602011771号