Java和MySql-如何在执行查询之前转义查询

Java和MySql-如何在执行查询之前转义查询,java,mysql,sql-injection,Java,Mysql,Sql Injection,我将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; Stri

我将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注入问题!我该怎么做?

使用:

有时,使用PreparedStatement对象向数据库发送SQL语句更方便。这种特殊类型的语句是从更一般的类statement

如果要多次执行语句对象,通常使用PreparedStatement对象可以缩短执行时间

PreparedStatement对象的主要特征是,与Statement对象不同,它在创建时被赋予SQL语句。这样做的好处是,在大多数情况下,该SQL语句会立即发送到DBMS,并在那里进行编译。因此,PreparedStatement对象不仅包含SQL语句,还包含已预编译的SQL语句。这意味着在执行PreparedStatement时,DBMS可以只运行PreparedStatement SQL语句,而不必首先编译它

使用:

有时,使用PreparedStatement对象向数据库发送SQL语句更方便。这种特殊类型的语句是从更一般的类statement

如果要多次执行语句对象,通常使用PreparedStatement对象可以缩短执行时间

PreparedStatement对象的主要特征是,与Statement对象不同,它在创建时被赋予SQL语句。这样做的好处是,在大多数情况下,该SQL语句会立即发送到DBMS,并在那里进行编译。因此,PreparedStatement对象不仅包含SQL语句,还包含已预编译的SQL语句。这意味着在执行PreparedStatement时,DBMS可以只运行PreparedStatement SQL语句,而不必首先编译它


什么是db?什么样的物体;哪一班?根据您使用的DB驱动程序,可能有更好的方法,比如使用prepared statements.MySql…我已经编写了:jdbc驱动程序!什么是db?什么样的物体;哪一班?根据您使用的DB驱动程序,可能有更好的方法,比如使用prepared statements.MySql…我已经编写了:jdbc驱动程序+1.此外,Vector被认为是不推荐使用的,请参见所有关于SQL注入的讨论,此链接是必需的:@JeremyP不知道这一点。你让我开心。此外,Vector被认为是不推荐使用的,请参见所有关于SQL注入的讨论,此链接是必需的:@JeremyP不知道这一点。你让我开心。