jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?
Statement和PreparedStatement的功能主要是对sql语句的执行
区别
(1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划PreparedStatement在执行相同
功能的sql语句,但仅仅是参数不同时,则只需要编译一次,更适合批量处理
(2)PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全
例如sql语句
select * from user where id=1select * from user where id=2
如果用Statement语句执行则需要生成两个执行计划而PreparedStatement则只需要编译一次,执行时仅仅是换个参数而已所以当
在执行大量的功能重复的语句时,效率会成百倍的提升。
两者的使用:
首先连接数据库 这都是相同的 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "root"; String sql = "select * from goods where goodsid = 123"; DriverManager.registerDriver(new com.mysql.jdbc.Driver());//注册数据库驱动 Connection conn = DriverManager.getConnection(url, user, password);//连接数据库Statement在执行sql语句时不能再sql语句中设置参数
Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()){ int id = rs.getInt("goodsid"); String name = rs.getString("goodsname"); int price = rs.getInt("costprice"); String manufacturer = rs.getString("manufacturer"); System.out.println(id+" "+name+" "+price+" "+manufacturer); } rs.close(); conn.close(); st.close();PreparedStatement执行sql语句
PreparedStatement pst = conn.prepareStatement(sql1); pst.setInt(1,789);//第一个参数指的是sql语句中第几个参数(问号),第二个参数为?处要填的值 pst.setString(2, "大米"); pst.setInt(3, 220); pst.setInt(4, 500); pst.setString(5,"大米公司"); pst.executeUpdate(); conn.close(); pst.close();参考:http://blog.csdn.net/jiangwei0910410003/article/details/26143977