㈠ java jdbc 里 拼接 sql 的时候 直接用 ++ 拼接上值还是 用 = 那个拼接啊
不谈安全的话,使用StringBuffer对象拼接sql效率更高一点。但是如果使用字符串拼接的形式会造成sql注入的问题。因此尽量使用PrepareStatement来预处理sql,即使用=?的sql语句。
sql注入:
假设你想查询的sql如下:
String sql="select * from user_infor where username='123' and pwd= ",且理论上你想要拼接 "'password'"。那么如果拼接错了密码sql就不会返回想要的结果,但是如果拼接"'wrongPassword' or 1=1 " ,sql语句也会执行成功的。
㈡ 关于java中拼接sql,表名作为参数,返回结果集怎么接 [问题点数:30分]
通常通过SQL查询语句查出来的结果集封装在ResultSet对象中,然后我们会这样处理:
把ResultSet对象中的数据取出来并封装在javabean中,所以我们需要这样写(我假设这里的javabean是Student.java 里面有private String name和private int id两个属性 ,当然你需要生成对应的getter和setter方法)
while(rs.next()){
Student s=new Student();
s.setName(rs.getString("name"));
s.setId(rs.getInt("id"));
return s;
}
这样就把相应的数据封装进javabean对象中了,当然还有一种简便的方法是用Apache开源组织的dbUtils工具 详看API 这个太多不好说
㈢ Java动态sql语句拼接
Map<String,Boolean> map = new HashMap<String,Boolean>();
Set<Entry<String, Boolean>> ens = map.entrySet();
StringBuilder sb = new StringBuilder();
if(ens != null && ens.size() > 0){
for(Entry<String, Boolean> en: ens){
if(en.getValue()){
sb.append("'").append(en.getKey()).append("',");
}
}
}
String names = sb.toString();
if(names.length() > 0){
names = names.substring(0, names.length()-1);//去掉最后一个逗号
String sql = "select * from stuent t1 where t1.name in("+names+")";
System.out.println(sql);
}else{
System.out.println("没有及格的学生");
}
㈣ java拼接sql怎么防止注入
使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。
在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成:
String queryStr = “from user where username=:username ”+”password=:password”;
List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();
㈤ java中SQL拼接的问题
//既然你说有可能不拼接,直接不拼接是无法实现的可以换一种思路,就是全部查询,比如,你不想加proviceCd=”“的判断,可以让他全部查询出来,因为不加条件就是全盘检查,使用模糊查询,让条件 like ‘%’ ,”%“代表任意长度任意字符,所以都符合条件,不会排除任何一个其他项目。希望这个思路能帮到你,如果不行我也没办法了。
String sql = select * from intern t WHERE name like '?' and institute like '? 'and gender like '?' and majorCd like '?' and provinceCd like '?';
PreparedStatement pstmt = null;
int status = -1;
try {
pstmt = conn.prepareStatement(sql);
if(name==null)
{
pstmt.setString(1, %);
}
else
{
pstmt.setString(1, name);
}
/*
其他条件判断,
*/
status = pstmt.executeUpdate();
if (status > 0) {
System.out.println("成功");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBResources.resource(conn, pstmt);
}
㈥ java 中sql拼接
你把你的sql语句定义成变量。
StringBuffer sql=new StringBuffer("select top(?) * from nrxx, lmxx where nrxx.lmbh=lmxx.lmbh and lmxx.lmmc = ? order by nrxx.nrbh desc");
然后加判断条件
if(){
sql.append("");
}else{
sql.append("");
}
conn .prepareStatement(sql.toString());
㈦ java里拼接sql怎么防注入
最简单最容易的是限制用户输入。简单点的就是不允许用户输入单引号 和 --,因为单引号号--在SQL中都是影响执行的,两种方式一种是在JSP中加判断:
3
另一种是在SQL拼接是对单引号和--等进行转义,str = str.replace("'", "''");
㈧ java和sql语句拼接问题
因为拼接字符串没有预编译,像mybatis会预编译,当你传入一个字符串的时候会自动给你添加上'',表示这是一个字符串,但是你手动字符串拼接的时候就需要自己执行mybatis的这个操作,在字符串上添加 ''。最后sql += " and id='"+ id + "'"相当于sql =sql + " and id='"+ id + "'";就是一个字符串简单拼接
㈨ java开发中拼接sql语录使用什么类型的变量为什么
String类型 因为sql语句是字符串