什么时候用preparedStatement ???? 请高手帮我举例说明下!谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。 好处:1 预编译——但不是所有的数据库都是这样,比如MySQL的那个就是加的2 设置参数,避免最傻的注入漏洞3 批量操作没有特殊情况,一般都直接用PreparedStatement,哪怕是单条没有参数的SELECT 那么Statement 是不是就一无是处了? 是的PreparedStatement 是 Statement 的子类,Statement 拥有的功能,PreparedStatement 都拥有,而且还拥有其他更多的功能,因此不建议使用 Statement 除了作为PreparedStatement的父类,基本上,它对我就是一无是处。 另外个人认为,PreparedStatement的参数也是重要的一个原因,利用不同的常量可做到RESULTSET(个人理解实际上就像一个指针)的自由调动,以实现许多功能,例如:分页什么的。 基本上都会用预编译,现在还没有见过什么项目使用Statement,所以以后都使用预编译就对了. 我感觉也没有用处。有时候可能会在写个 close 方法时用 Statement 参数,毕竟这个是 PreparedStatement, CallableStatement 的父类,写一个 close 方法可以供给三种对象调用,嘿嘿~~~public static void close(Statement stmt) { if(stmt != null) { try { stmt.close(); } ... ... }} 连这个我也图省事,用了commons-dbutils /** * Close a <code>Connection</code>, <code>Statement</code> and * <code>ResultSet</code>. Avoid closing if null and hide any * SQLExceptions that occur. * * @param conn Connection to close. * @param stmt Statement to close. * @param rs ResultSet to close. */ public static void closeQuietly(Connection conn, Statement stmt, ResultSet rs) { try { closeQuietly(rs); } finally { try { closeQuietly(stmt); } finally { closeQuietly(conn); } } } 楼上的都说的差不多了,我再补充一句啊!执行增、删、改的时候尽量用PreparedStatement,而查询的时候可以用Statement,也可以用PreparedStatement。 String sql = "select * from TBL_REPLY t left join tbl_user u on t.uId = u.uId where topicid = ?";pstmt = con.prepareStatement(sql);pstmt.setInt(1, topicid);//prepareStatement可以预编译SQL语句 语句格式已知并确定,参数未知通过此对象能实现预编译 提高执行效率另外还能防止SQL注入 mvc2模式中,是不是流程控制都用servlet来做? JSP写的访问人数出错的问题 高手进 Tomcat5完全中文手册即攻略 有关数据库取数据的优化问题~ 页面一旦离开就清除session,但是,这个页面应该可以刷新! 现在有一大堆框架,谁能告诉我??? 一起提高网站的访问量 tiles处理框架问题? 到底是JSP好呢?还是ASP好呢? 关于JSP和JAVABEAN的问题,有一定难度,解决此问题者,300分坚决送上 如何把百度、谷歌的搜索结果捉取并放进自己的网页中 谁能完成本地登录:高分+酬谢求
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
1 预编译——但不是所有的数据库都是这样,比如MySQL的那个就是加的
2 设置参数,避免最傻的注入漏洞
3 批量操作没有特殊情况,一般都直接用PreparedStatement,哪怕是单条没有参数的SELECT
是的PreparedStatement 是 Statement 的子类,Statement 拥有的功能,PreparedStatement 都拥有,而且还拥有其他更多的功能,因此不建议使用 Statement
除了作为PreparedStatement的父类,基本上,它对我就是一无是处。
我感觉也没有用处。有时候可能会在写个 close 方法时用 Statement 参数,毕竟这个是 PreparedStatement, CallableStatement 的父类,写一个 close 方法可以供给三种对象调用,嘿嘿~~~public static void close(Statement stmt) {
if(stmt != null) {
try {
stmt.close();
} ...
...
}
}
/**
* Close a <code>Connection</code>, <code>Statement</code> and
* <code>ResultSet</code>. Avoid closing if null and hide any
* SQLExceptions that occur.
*
* @param conn Connection to close.
* @param stmt Statement to close.
* @param rs ResultSet to close.
*/
public static void closeQuietly(Connection conn, Statement stmt,
ResultSet rs) { try {
closeQuietly(rs);
} finally {
try {
closeQuietly(stmt);
} finally {
closeQuietly(conn);
}
} }
String sql = "select * from TBL_REPLY t left join tbl_user u on t.uId = u.uId where topicid = ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, topicid);
//prepareStatement可以预编译SQL语句
通过此对象能实现预编译 提高执行效率
另外还能防止SQL注入