• ベストアンサー

UPDATE文について

tyoufuの回答

  • ベストアンサー
  • tyoufu
  • ベストアンサー率28% (19/67)
回答No.1

Statmentクラスの executeUpdateメソッドの戻り値は UPDATE、INSERT、DELETEで対象となった行数が戻ってくるので、 「対象となる行がない」= 戻り値 0 となるのではないでしょうか。

mickeyland
質問者

お礼

回答ありがとうございます。 今StatmentクラスのexecuteUpdateの戻り値を確認したところ確かに処理件数が帰ってきますね。 これで、対象となる行がないことを判定することができます。 ありがとうございました。

関連するQ&A

  • DB2のクライアントを7.1から8.1に変更した時に出るエラーについて

    初歩的な質問なのかもしれませんが DB2を扱うのが初めてなのでお願いします。 私なりに調べて見ましたが原因がわからず困っています VB6.0で開発してあるプログラムで7.1では正常に動作していましたが8.1にバージョンアップさせたところ 「 SQL0100W FETCH、UPDATE または DELETE の対象となる行がないか、または照会の結果が空の表です。 SQLSTATE=02000 」 というエラーメッセージが出てしまいます。 7.1ではこのエラーはOnErrorGoToに飛ばないみたいなのですが8.1で飛んでしまいます。 これはどのように対処すればよろしいのでしょう?

  • synchronizedについて

    こんにちは!質問です! javaのsynchronizedについて教えてください。 DBへの更新メソッドに、 排他制御をしようと思っているのですが、調べて自分で コーディングしました。アドバイスをお願いします! public static synchronized void update() throws SQLException{ Connection db = null; PreparedStatement objPs = null; ResultSet rs = null; StringBuffer sql = new StringBuffer(); try { Context ctx=new InitialContext(); DataSource ds=(DataSource)ctx.lookup("java:/comp/env/test/sample"); db=ds.getConnection(); sql.append("UPDATE "); sql.append("test "); sql.append("SET "); sql.append("aaa = '000', "); sql.append("bbb = '000', "); sql.append("ccc = '000' "); sql.append("WHERE dd = '0'"); objPs=db.prepareStatement(sql.toString()); objPs.executeUpdate(); } catch (SQLException e) { //エラー処理 } catch(Exception e) { //エラー処理 } finally { try { if(rs!=null) {rs.close();} if(objPs!=null){objPs.close();} if(db!=null) {db.close();} } catch(Exception e){ e.printStackTrace(); } } } クラスはpublicですが、static synchronized にしていたら、 排他制御が可能でしょうか? staticなので、インスタンス複数でも1つしか存在しないのですよね? その場合、このメソッドを呼び出しているスレッドが終了しないうちに 別のスレッドが呼び出した場合、そのスレッドはどうなるのでしょうか? 目で見て確認する方法もできれば、教えていただきたいです! また、sql発行メソッド(上記メソッド)を直接排他制御するのと、 上記メソッドの呼出元を排他制御するのと、どちらがいいとかって あるのですか? ご存知の方、よろしくお願い致しますm(_ _)m

    • ベストアンサー
    • Java
  • プログラム処理について質問です

    お世話になります。 開発環境 データベース :: MySQL プログラム言語 :: Java SE7 フレームワーク :: Java EE 7 データベース設計概要 テーブル名所 language_code :: ja, zh-cn, zh-hk, ...その他言語コード locale :: 日本語、中国語(簡体)、中国語(香港)、...その他言語 truth_value :: 0 または、1 *truth_valueには、デフォルトで0を指定してます。 アプリケーション概要 ユーザーが複数の言語から使用する言語を選択して、選択した言語に紐付くコンテンツを作成するというものです。 プログラム処理について ユーザーが選択した複数の言語をサーブレットで取得しました。その後、取得したデータがNULLでないことを確認したうえで、データをDAOクラスに渡しプリペアードステートメントでアップデート処理をしました。 問題は、この処理だとユーザーが何らかの理由(誤操作)で、一回目に登録した言語を除外した場合、1から0にtruth_valueを変更できないということです。この問題を解決するにはどのような処理が必要としますか。皆様の知恵を御貸し下さい。よろしくお願いします。 実際のコードとユーザーが使用する画面の添付ファイルを載せてます。 サーブレット protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, Exception { List<LanguageDTO> useLanguageList = new ArrayList<LanguageDTO>(); LanguageDTO useLanguage = null; String[] selectLanguages = request.getParameterValues("selectLanguage"); if(selectLanguages != null){ for(String lang : selectLanguages){ useLanguage = new LanguageDTO(); useLanguage.setLanguageCode(lang); useLanguageList.add(useLanguage); } LanguageDAO.updateLanguage(useLanguageList); } } DAOクラス public static void updateLanguage(List<LanguageDTO> useLnaguageList) throws Exception{ Connection db = null; PreparedStatement ps = null; try{ Context context = new InitialContext(); DataSource ds = (DataSource)context.lookup("jdbc/ecommerce"); db = ds.getConnection(); ps = db.prepareStatement("update language_codes set truth_value = ? where language_code = ?;"); for(LanguageDTO useLanguage : useLnaguageList){ ps.setBoolean(1, useLanguage.getTruthValue()); ps.setString(2, useLanguage.getLanguageCode()); ps.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } finally { if(ps != null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(db != null){ try { db.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

    • ベストアンサー
    • Java
  • 継承クラスで定義したメソッドのtry-catch文

    親クラスで、子クラスで実装されたメソッドのExceptionをキャッチしたいのですが、 うまくいきません。 何か良い方法はないでしょうか? abstract class A { public __construct(){ try{ $this->testA(); }catch(Exception $e){ var_dump(1); } } abstract function testA(); } class B extends A { function testA(){ throw Exception('test',1); } } try{ new B; }catch(Exception $e){ var_dump(2); // こっちが動く } よろしくお願いします。

    • ベストアンサー
    • PHP
  • Oracleに接続すると、それ以降の処理を素通りしてしまう

    下記のようなメソッドで<1><2>の後、すぐに<7>に処理をしてしまいます。 <1>~<7>と動くと思っていたのですが、<3>~<6>が全て無視されます。 どこか問題があるのでしょうか? ちなみに、<1>で無効なURLを指定するとSQLExceptionでcatchされます。 try { Class.forName("oracle.jdbc.OracleDriver"); try { //<1> conn = DriverManager.getConnection (URL, UID, PSW); //<3> System.out.println("Oracleと接続しました"); } catch (SQLException e) { System.out.println("oracle接続エラー"); } catch (Exception e) { System.out.println("oracle接続エラー"); } //<4> try { //<5> stmt = conn.createStatement(); //<6>sql文の作成 // select文の実行 //(略) } catch (Exception ex3) { System.out.println("なんかエラーです"); } } catch (Exception e){ System.out.println("その他エラーです"); //<2> } finally { //特になし } //<7> return list;

    • ベストアンサー
    • Java
  • DBに接続しブラウザ上に検索結果が全て表示されるServlet

    首記の件ですが、コーティングしてコンパイルしても NullPointerExceptionがでてしまいます。 このServletはDB接続クラスと実行Servletにわかれていてます。 原因はDB接続クラスにレコードをカウントするメソッドが あるのですが、そこでNullPointerExceptionが発生して その他に影響を及ぼしているみたいです。 ・・・とまぁ、ここまで理解できたのですが行き詰まって しましましたのでご教授いただけると幸いです。 以下に問題のコードとエラー内容を記述します。 --接続クラス-- (略) private int count() throws SQLException { // 桁数 int rec = 0; // SQL文実行 rs = st.executeQuery("SELECT * FROM TESTTABLE1"); // カウント while(rs.next()) { rec++; } return rec; } } --エラーメッセージ-- java.lang.NullPointerException at DB.count(DB.java:146) at DB.select(DB.java:117) at SELECT.doGet(SELECT.java:73)

    • ベストアンサー
    • Java
  • SOAP::Lite axis 例外処理

    お世話になります。 perlクライアントから、SOAP::Liteモジュールを使い、 axisに登録されたjavaサーブレットクラスを呼び出しています。 (例) $s = SOAP::Lite->service( 'http://xxx.wsdl' ); #サービス名 $s->test(); #javaサーブレットクラス呼び出し javaサーブレットクラスが例外(Exception)で終了した場合、 perlクライアントで例外をキャッチする方法はありますでしょうか? #以下のコードではエラーはキャッチできませんでした。 eval { $s->test(); }; if ($@) { # エラー処理 }; * 通常処理はうまくうごいています。 例外は意図的にExceptionをthrowしています。java内ではキャッチして終了してます。

  • Eclipseで生成したJavaDocのレイアウトについて

    40クラスほどJavaDocを生成したところ、1クラスだけ若干レイアウトが異なります。 何度再生成しても同じ結果になります。 ■Javaソース /** * 1行目のコメント<br> * 2行目のコメント<br> */ public void sample() { System.out.println("サンプル"); } 【通常のJavaDoc】 ==メソッドの概要== -メソッド名 -1行目のコメント ==メソッドの詳細== -メソッド名 -1行目のコメント -2行目のコメント 【問題になってるJavaDoc】 ==メソッドの概要== -メソッド名 -1行目のコメント -2行目のコメント ==メソッドの詳細== -メソッド名 -1行目のコメント -2行目のコメント このように、通常のJavaDocはメソッドの概要のところに2行目のコメントは表示されませんが、問題となってるJavaDocでは表示されてしまいます。 他のクラスと異なる箇所があるのかと思い、よく見比べましたがわかりませんでした。 原因のわかる方がいらっしゃいましたら、ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • javaサーブレットからのoracle接続エラー

    お世話になります。 javaサーブレットからoracleに接続する際、以下のエラーが発生して困っております。 エラー:java.sql.SQLRecoverableException: クローズされた接続です。 解決するための情報を頂けますでしょうか。 私がテストしている環境は、以下となります。 【Webサーバ】 centOS5.5. jdk1.6 tomcat5.5 【DBサーバ】 centOS5.5. oracle10g r2 jdbcドライバーは、ojdbc6.jarを使用しております。 サーブレット起動時にDB接続し処理完了時にDBクローズしていますが、DBクローズ処理にて 上記エラーが、発生してしまいます。 DB接続及びDBクローズは、以下のようにプログラミングしております。 /** * 概要 : DBアクセス * 処理 : DBアクセス */ public void dbAccess() throws Exception { conn = null; try { DriverManager.setLogWriter(new PrintWriter(System.out)); Class.forName(driver); conn = DriverManager.getConnection( jdbcPrefix + hotname + dbname, username,password); // 自動コミット・モードを設定(手動コミット) conn.setAutoCommit(false); }catch (SQLException e) { throw e; }catch (Exception e) { throw e; } } /** * 概要 : DBクローズ * 処理 : DBを閉じます。 */ public void dbClose() throws Exception { try { if (conn != null) conn.close(); }catch (Exception e) { throw e; } } お手数お掛け致しますが、ご教授宜しくお願い致します。

    • ベストアンサー
    • Java
  • アクセス用クラスを利用した登録画面の作成。

    DB登録画面をアクセス専用のクラスを利用する形で作成しているのですが、 eclipseのJunitテストを行うとエラーが出てしまいます。 (欲しい値は取れているのですが、その直後に表記されるエラーの原因がよく分かりません。) ↓エラーはこのような内容です。↓ org.postgresql.util.PSQLException: ERROR: 列"id"は型integerですが、式は型character varyingでした Hint: 式を書き換えるかキャストしなければなりません 以下はソースの一部を抜粋です。 //DBアクセス用クラス。 public final class DataBaseAccess { ・・・・ public void setMultiType(int index, Object value) throws SQLException { statement.setObject(index, value);} public void setMultiType(int index, boolean value) throws SQLException { statement.setBoolean(index, value);} public void setMultiType(int index, byte value) throws SQLException { statement.setByte(index, value);} public void setMultiType(int index, short value) throws SQLException { statement.setShort(index, value);} public void setMultiType(int index, int value) throws SQLException { statement.setInt(index, value);} public void setMultiType(int index, long param) throws SQLException { statement.setLong(index, param);} public void setMultiType(int index, float value) throws SQLException { statement.setFloat(index, value);} public void setMultiType(int index, double value) throws SQLException { statement.setDouble(index, value);} public ResultSet select() throws SQLException { return statement.executeQuery();} public void update() throws SQLException { statement.executeUpdate();} ・・・・ //登録クラス public class CustomerEntry{ public void entry(CustomerBean customerBean) { DataBaseAccess db = new DataBaseAccess(); try {/** DB接続。 */ db.open(); String SQL = "INSERT INTO TB_CUSTOMER VALUES ( ? , ? , ? , ?);"; db.setSql(SQL); for (int i = 0; i < 11; i++) {/** ?に値をセット */ db.setMultiType(1, "int id"); db.setMultiType(2, "String userid"); db.setMultiType(3, "String name");      ・      ・      ・ db.setMultiType(11, "String tel"); db.update(); } db.close(); } } } 長文で申し訳ありませんが、ご教授お願いいたします。

    • ベストアンサー
    • Java