1

関数で「id」というパラメーターを取得し、このid行の名前のセルを出力したいと思います。

例えば:

これは私のテーブルです:

id     name        email
1      alon     alon@gmail.com

関数にfunc(1)を送信するので、'alon'を出力します。

これは私が試したものです:

static final String url = "jdbc:mysql://localhost:3306/database_alon";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, "root", "Admin");
String query_txt = "SELECT * FROM authors WHERE id = " + id;
Statement ps2 = con.createStatement();
ResultSet my_rs = ps2.executeQuery(query_txt);
System.out.println(my_rs.getString("name"));
con.close;
4

3 に答える 3

2

すべて問題ありませんが、問題は1つだけです。ResultSet値をフェッチする前に、カーソルを最初の行に移動する必要があります。

使用する: -

ResultSet my_rs = ps2.executeQuery(query_txt);
while (my_rs.next()) {
    System.out.println(my_rs.getString("name"));
}

補足として、PreparedStatementSQLインジェクションによる攻撃を避けるためにを使用することを検討してください。

使用方法は次のとおりです。-

PreparedStatement ps2 = con.prepareStatement("SELECT * FROM authors WHERE id = ?");
ps2.setInt(1, id);
ResultSet my_rs = ps2.executeQuery();

while (my_rs.next()) {
    System.out.println(my_rs.getString("name"));
}
于 2012-11-30T23:39:23.723 に答える
2

ResultSet.next()返されるデータに移動するには、を使用する必要があります。

if (my_rs.next()) {
  System.out.println(my_rs.getString("name"));
}
于 2012-11-30T23:39:36.553 に答える
2
  1. my_rs.next()を呼び出すと、ResultSetカーソルが最初の行(データを抽出している行)に移動します。
  2. これが実際のアプリケーションである場合は、汎用ステートメントの代わりにPreparedStatementsを使用してください。SQLクエリでユーザー入力を使用する場合、これはセキュリティの非常に重要な問題です。
于 2012-11-30T23:41:11.480 に答える