【问题标题】:JDBC Error : unable to execute string in DB query [closed]JDBC 错误:无法在 DB 查询中执行字符串 [关闭]
【发布时间】:2013-04-13 06:54:37
【问题描述】:

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

我想修改程序,使其可以随机捕获所有类型的输入。因为,我需要运行以下 java prog。在 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 !!

【问题讨论】:

  • 当您在这里遇到问题时,仅仅使用诸如“无法执行”之类的模糊语句完全是浪费时间。当您遇到异常时,仅打印“错误!!”完全是浪费时间。打印实际异常及其堆栈跟踪。在您这样做并在此处发布结果(将它们编辑到您的帖子中)之前,您的问题只是一个猜谜游戏。

标签: java mysql bash jdbc


【解决方案1】:
SELECT type FROM Table_new WHERE id = " + var

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

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

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

catch 块中的打印异常将为您提供更多线索。

【讨论】:

  • 只是添加到上面的 SQL 注入说明中 - 您可以查看 PreparedStatements。
  • 为避免 sql 注入的所有风险,您应该使用准备好的语句或 sql 转义方法(例如参见 stackoverflow.com/questions/881194/…
  • SELECT type FROM Table_new WHERE id = ' " + var +"'" : is given no out put only Connected? is apearing
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 2022-08-10
  • 2010-12-04
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多