我正在使用Java作为Web应用程序,而我正在使用MySql数据库。我需要在执行之前转义查询。这是我的实际代码:
db_result=mydb.selectQuery("SELECT nickname FROM users WHERE nickname='"+log_check_user+"' AND password='"+log_check_pass+"'");
public Vector selectQuery(String query) {
Vector v = null;
String [] record;
int colonne = 0;
try {
Statement stmt = db.createStatement();
ResultSet rs = stmt.executeQuery(query);
v = new Vector();
ResultSetMetaData rsmd = rs.getMetaData();
colonne = rsmd.getColumnCount();
while(rs.next()) {
record = new String[colonne];
for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
v.add( (String[]) record.clone() );
}
rs.close();
stmt.close();
} catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }
return v;
}
我相信你需要这个,以避免SQL注入问题!我该怎么办?
答案 0 :(得分:18)
有时使用
PreparedStatement
对象将SQL语句发送到数据库会更方便。这种特殊类型的语句来自更通用的类Statement
...如果要多次执行
Statement
对象,通常会减少使用PreparedStatement
对象的执行时间。
PreparedStatement
对象的主要特征是,与Statement
对象不同,它在创建时会被赋予一个SQL语句。这样做的好处是,在大多数情况下,此SQL语句会立即发送到DBMS,并在其中进行编译。因此,PreparedStatement
对象不仅包含SQL语句,还包含已预编译的SQL语句。这意味着当执行PreparedStatement
时,DBMS可以只运行PreparedStatement
SQL语句而无需先编译它......