// 1. 加载驱动(类加载)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取连接
Connection connection = DriverManager.getConnection(url,
username, password);
// 3. 获取执行sql的对象(两种statement,重要:防止sql注入)+ 执行sql
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(querySql);
// 4. 获取结果集+遍历结果集
while (resultSet.next()) {
String s_id = resultSet.getString("s_id");
String s_name = resultSet.getString("s_name");
String s_birth = resultSet.getString("s_birth");
String s_sex = resultSet.getString("s_sex");
System.out.println("s_id=" + s_id + ",s_name=" + s_name + ",s_birth=" + s_birth + ",s_sex=" + s_sex);
// 5. 释放资源
if (resultSet != null) {
resultSet.close();
}
statement.close();
connection.close();
}
上面只是一般的使用过程
第三步的实际使用当中,我们大多数情况下都会使用PrepareStatement而不是Statement
public class PreparedStatementDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1. 获得数据库连接
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:8066/dbtest?useServerPrepStmts=true", "root", "123456");
// PreparedStatement
PreparedStatement ps = conn.prepareStatement("SELECT id, username, password FROM t_user WHERE id = ?");
ps.setLong(1, Math.abs(new Random().nextLong()));
// execute
ps.executeQuery();
// 关闭资源
ps.close();
conn.close();
}
}
链接:https://juejin.cn/post/6844903490058190862
来源:稀土掘金
Prestatement相比于普通的Statement有几点好处:
statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译的
如果相同语法(变量参数可以不一样)的sql在短时间内反复被JDBC调用执行,preparedstatement可以降低执行时间,提高执行效率(每次JDBC请求只需要传递?的值即可,减少网络传输和 SQL 解析开销)
PreparedStatement是存储在JDBC里的,初始化后,缓存到了JDBC里,初始化的开销比Statement大,对于少量的查询操作没有优势,适用于大量的查询语句才能体现性能的优势。
细致的说,所谓的预编译,本质就是preparedstatement使用了mysql的cache缓存(Map数据结构)