本文主要是介绍JDBC一般使用过程+两种statement的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
JDBC的使用过程
// 1. 加载驱动(类加载)Class.forName("com.mysql.cj.jdbc.Driver");// 2. 获取连接Connection connection = DriverManager.getConnection(url, username, password);// 3. 获取执行sql的对象(两种statement,重要:防止sql注入)+ 执行sqlStatement 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();}
上面只是一般的使用过程
两种statement
第三步的实际使用当中,我们大多数情况下都会使用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");// PreparedStatementPreparedStatement ps = conn.prepareStatement("SELECT id, username, password FROM t_user WHERE id = ?");ps.setLong(1, Math.abs(new Random().nextLong()));// executeps.executeQuery();// 关闭资源ps.close();conn.close();}}
链接:https://juejin.cn/post/6844903490058190862
来源:稀土掘金
prepareStatement的好处
Prestatement相比于普通的Statement有几点好处:
- PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入
- PreparedStatement可以使用预编译的sql(对于批量处理可以大大提高效率. 也叫JDBC存储过程),而Statment只能使用静态的sql
statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译的
如果相同语法(变量参数可以不一样)的sql在短时间内反复被JDBC调用执行,preparedstatement可以降低执行时间,提高执行效率(每次JDBC请求只需要传递?的值即可,减少网络传输和 SQL 解析开销)
PreparedStatement是存储在JDBC里的,初始化后,缓存到了JDBC里,初始化的开销比Statement大,对于少量的查询操作没有优势,适用于大量的查询语句才能体现性能的优势。
细致的说,所谓的预编译,本质就是preparedstatement使用了mysql的cache缓存(Map数据结构)
- preparenment的使用可以增加代码的可读性和可维护性
这篇关于JDBC一般使用过程+两种statement的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!