各位给想想办法,怎样并解决sql注入那.
解决方案 »
- 请问struts2怎么会出现基础数据类型转换失败呢
- 关于MyEclips6.5 导入别人的工程名,附加了别人的数据库(采用的是SQL SERVER 2000),如何修改连接数据库的相关配置才能使程序运行成功
- s2sh框架问题求大神解决
- javaEE分层体系结构的问题(谁可以回答)
- 关于手机识别问题
- lazy="false"的问题?
- 2013年哪款UML工具是主流的,用的人是最多的???
- Sturst2 同名参数的接收问题!请高手解答!
- 一个绝对非常有趣的问题,看谁能解答出来
- jbuilder make EJB 时候出现了Appc错误
- 为什么我用jasperreport生成的pdf文件是空白的?
- Hibernate 级联刷新、删除问题
public boolean executeSql(String strSql, Object[] param) throws Exception { boolean bRet = false;// 返回值 try {
if (conn == null) {
conn = getConn(connId);// 取得数据联接
}
ps = conn.prepareStatement(strSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
ps.setObject(i + 1, param[i]);
}
}
bRet = ps.execute();
System.out.println(strSql);
bRet = true;
} finally {
closeResource();
}
return bRet;
}
我们公司用的都是statement,
总不能全改吧,这样不现实,
我试过用filter过滤,但会出问题,跪求其他方法!
public void getConn(){
try {
Class.forName(Driver);
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public ResultSet execQuery(String sql,String[] params){
getConn();
try {
ps = conn.prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
ps.setString(i+1, params[i]);
}
}
rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public int execUpdate(String sql,String[] params){
int count = 0;
getConn();
try {
ps = conn.prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
ps.setString(i+1, params[i]);
}
}
count = ps.executeUpdate();
} catch (SQLException e) {
System.err.println("SQLException: " + e.getMessage());
if (conn != null) {
System.err.println("Transaction is being rolled back");
try {
conn.rollback(); //数据库回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}finally{
closeAll();
}
return count;
}
public void closeAll(){
try {
if(rs!=null)
rs.close();
if(ps!=null)
ps.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
statement效率低,而且不安全
用JDBC,除非对效率非常注重的模块,都要用PreparedStatement的,好处很多
Map<Object, Object> map = new HashMap<Object, Object>();
if(searchService != null && searchService.length() != 0){
hql.append(" and service.a like :a ");
hql.append(" or service.aa like :aa ");
hql.append(" or service.aaa like :aaa ");
map.put("a", "%"+searchService+"%");
map.put("aa", "%"+searchService+"%");
map.put("aaa", "%"+searchService+"%");
}
}
hql.append(" order by service.id desc ");
List<Service> serviceList =
getHibernateTemplate().getSessionFactory().getCurrentSession()
.createQuery(hql.toString())
.setProperties(map)
.list();
getHibernateTemplate().getSessionFactory().getCurrentSession()
.createQuery(hql.toString())
.setProperties(map)
.setFirstResult(firstResult)
.setMaxResults(maxResult)
.list();
分页的。
getHibernateTemplate().getSessionFactory().getCurrentSession()
.createQuery(hql.toString())
.setProperties(map)
.setFirstResult(firstResult)
.setMaxResults(maxResult)
.list();
分页的。
用filter,过滤特殊字符,特殊字符网上查就是了。