ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのJDBCのUPDATEについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
以下のようなデータベースがあります。
+---------+------+------+-------+
| user_id | name | pass | point |
+---------+------+------+-------+
| 1 | yuki | 0731 | 10 |
+---------+------+------+-------+

このコラムのpointの値を10から20に変えて、要素をプリントするJavaプログラムをJDBCを使って作りました。

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

public class SelectAll2 {
static String driverClassName = "com.mysql.jdbc.Driver";
static String dbUrl = "jdbc:mysql://localhost/user";
static String encoding = "?useUnicode=true&characterEncoding=SJIS";
static String url = dbUrl+encoding;
static String user = "root";
static String password = "123456";

private void select() throws SQLException {
Connection con = null;
Statement st = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url,user,password);
st = con.createStatement();
rs = st.executeQuery("UPDATE userdb SET point=20 WHERE user_id=1"); ☆
while (rs.next()) {
int userId = rs.getInt("user_id");
String name = rs.getString("name");
String password = rs.getString("pass");
int point = rs.getInt("point");
System.out.println(userId+","+name+","+password+
","+point);
}
} finally {
if (rs != null) rs.close();
if (st != null) st.close();
if (con != null) con.close();
}
}
private void loadDriver() throws ClassNotFoundException {
Class.forName(driverClassName);
}
public static void main(String[] args) throws Exception {
SelectAll2 sa2 = new SelectAll2();
sa2.loadDriver();
sa2.select();

}

}

が、☆印の部分がエラーになります。
エラーメッセージは
「Can not issue data manipulation statements with executeQuery().」
とのこと。
UPDATEは、executeQueryでは実行できないのでしょうか?

コメント(7)

ゆきさん

> UPDATEは、executeQueryでは実行できないのでしょうか?

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/Statement.html#executeQuery(java.lang.String)
例外:
SQLException - データベースアクセスエラーが発生した場合、または指定された SQL 文が単一の ResultSet オブジェクト以外のものを生成する場合

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/Statement.html#executeUpdate(java.lang.String)
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/Statement.html#execute(java.lang.String)
> UPDATEは、executeQueryでは実行できないのでしょうか?

Statementの実装クラスによる、としか言いようがない。mysqlがそういう実装クラスを提供しているから落ちるという事。トピはexecuteUpdateを実行すれば解決する。
どうしてもexecuteQueryを使いたいのであれば手はある。
>Cappuccinoさん、chunさん
ご回答ありがとうございました!!
executeUpdateを使ったら、実行は出来ました。

まだまだ、勉強不足ですね。頑張ります。
これ、実装依存なんですね。初めて知りました。
executeQueryでのDDL文の実行でさえOKにしているJDBCドライバが多数派のようですね。
仕様上Nullは返せませんから、executeUpdateのint値が1行1列になっているResultSetを返すんでしょうか。
by 岩清水
> 仕様上Nullは返せませんから、executeUpdateのint値が1行1列になっているResultSet
> を返すんでしょうか。

ベンダ、ドライバ、タイプによって実装は違うのだから一概には言えない。
だが、StatementでUPDATEは通常使用しないだろう。
無理して使う必要も無い。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング