-3

文字列をパラメーターとして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 !!
4

1 に答える 1

1
SELECT type FROM Table_new WHERE id = " + var

で正常に動作しintます。上記のクエリを使用する場合はString、以下のようにする必要があります (注: これは SQL インジェクションを起こしやすいため、プレーンな SQL 文字列の代わりに PreparedStatement を使用してください)。

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

そうでなければ、あなたは得るでしょうSQLException(私はそれがあなたに起こっていると思います)。

例外をcatchブロックで出力すると、より多くの手がかりが得られます。

于 2013-04-19T19:26:13.473 に答える