1

Connector/Jのドキュメントには、MySQL INT を Java String 型に簡単に変換できると書かれています。(つまり、結果セットからJava型へのマッピング。)

しかし、これは逆に機能しますか?言い換えれば、StringMySQL が期待する準備済みステートメントでJava を使用できますINTか? これは良い/悪い習慣と見なされますか?

# pseudo-code
table EMPLOYEES 
(
    NAME VARCHAR(50)
    EMPLOYEE_NO INT(11)
)

// Java code
PreparedStatement prepStmt = 
    con.prepareStatement("SELECT * from EMPLOYEES where EMPLOYEE_NO=?");
prepStmt.setString(1, str);
ResultSet rs = prepStmt.execute(); // ...
4

1 に答える 1

1

のjavadocにsetString(よると(私の強調

指定されたパラメーターを指定された Java String 値に設定します。ドライバーは、これをデータベースに送信するときに、これをSQL VARCHAR または LONGVARCHAR値 (VARCHAR 値に対するドライバーの制限に対する引数のサイズに応じて) に変換します。

これは機能しない可能性がありますが、おそらく機能しますが (int は送信時に文字列のように表されると思います)、状況が変化した場合は機能しない可能性があります。いずれにせよ、文字列には整数以外の値が含まれる可能性があるため、これを良い習慣とは見なしません。

代わりに、次を使用します。

prepStmt.setInt(1, Integer.parseInt(str));

必要に応じて処理NumberFormatExceptionします。


さらに、値をexecute()返すため、次の行は無効です。boolean

ResultSet rs = prepStmt.execute();

代わりに、次を使用できます。

if (prepStmt.execute()) {
    ResultSet rs = prepStmt.getResultSet();
}  

また

ResultSet rs = prepStmt.executeQuery();
于 2013-04-12T01:01:15.467 に答える