preparedStatement与createStatemt优缺点对比

小傅哥
Java领域优质创作者
博客专家认证
2012-08-16 11:03:09
希望各位[color=#0000FF]猿友不吝赐教[/color]

个人觉得

方式1:加到缓存区(速度快,不易于随时更改sql,但易于执行同样的sql)

ps = conn.preparedStatement(sql);
ps.setString(...);
ps.execteQuery();

方式2:创建(速度慢,易于随时更改sql)

ps = conn.createStatemt();
ps.execteQuery(sql);
...全文
116 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小傅哥 2012-08-16
  • 打赏
  • 举报
回复
有人说preparedStatement有空指针异常
我因此写个例子解决

/**
* 模糊查询,分析出姓名,性别,年龄
*/
public ArrayList<_students> doSearch(String name,String sex,String age) throws SQLException{

int idNum = 1;

conn = ConnMysql.getConn();

String searchSql = "select * from students where name = ? && sex = ? && age = ? order by id limit 0,10";
/*根据传过来数据是否为空,重组sql*/
if(name.equals("")){
searchSql = searchSql.replace("name = ?", "");
}
if(sex.equals("")){
searchSql = searchSql.replace("&& sex = ?", "");
}
if(age.equals("")){
searchSql = searchSql.replace("&& age = ?", "");
}

searchSql = searchSql.replaceAll("[^//?] &&", "");

if(!searchSql.contains("=")){
searchSql = searchSql.replace("where", "");
}
/*重组好的sql放进去*/
ps = conn.prepareStatement(searchSql);
//根据剩下几个?号,重新给定值
if(!name.equals("")){
ps.setString(idNum, name);
idNum ++;
}
if(!sex.equals("")){
ps.setString(idNum, sex);
idNum ++;
}
if(!age.equals("")){
ps.setString(idNum, age);
idNum ++;
}

rs = ps.executeQuery();
alStudents = new ArrayList<_students>();

while(rs.next()){
_students st = new _students();
ss.setPageCount(pageCount);
st.setType("首次");
st.setPageNow(0);
st.setId(rs.getString(1));
st.setName(rs.getString(2));
st.setSex(rs.getString(3));
st.setAge(rs.getString(4));
st.setHobby(rs.getString(5));
alStudents.add(st);
}

return alStudents;
}
scbb 2012-08-16
  • 打赏
  • 举报
回复
preparedStatement最大的好处不是防止SQL注入吗? 然后是多次执行速度快吧。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧