㈠ 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語句是字元串