JDBC错误:无法在数据库查询中执行字符串

时间:2013-04-19 19:24:25

标签: java mysql bash jdbc

我想将字符串作为参数传递给 JDBC 程序。该代码适用于 INT 类型输入,但在字符串类型输入上捕获阻塞。

我想修改程序,以便它可以随机捕获所有类型的输入。因为,我需要运行以下java编程。在bash脚本中。所以一旦生成了类文件,我应该为程序提供随机输入并获得输出......

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Statement;

public class JDBC_run {

    public static void main(String[] args) throws Exception {

        Connection conn = null;
    //  int var = 123050044 ;
        String var = "sir"; 

        Class.forName("com.mysql.jdbc.Driver"); 
        conn = DriverManager.getConnection( "jdbc:mysql://localhost/test?user=root&password=root");
        ResultSet rs;
        System.out.println("Connected?");
        try{
          Statement st = (com.mysql.jdbc.Statement) conn.createStatement();
          rs = st.executeQuery("SELECT type FROM Table_new WHERE id = " + var);
          while ( rs.next() ) {
                String lastName = rs.getString("type");
                System.out.println(lastName);
            }
          }

      catch(SQLException s){
          System.out.println("wrong !!");
          }
}
}

对于 int var = 123050044 ,输出为

Connected?
student

对于 String var =“sir”,输出为

Connected?
wrong !!

1 个答案:

答案 0 :(得分:1)

SELECT type FROM Table_new WHERE id = " + var

适用于int。当使用上面的String查询时,应该如下所示(注意:这很容易出现SQL注入,请使用PreparedStatement而不是纯SQL字符串。)

SELECT type FROM Table_new WHERE id = ' " + var +"'"

否则你会得到SQLException(我想这就是你的情况)。

catch区块中的打印例外将为您提供更多线索。