質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.09%

JDBCを利用したデータの更新方法について

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 178

bona

score 8

何をしたいのか

JDBCをを利用してSQLのデータを更新しようとしているのですがエラーが発生してしまいます。エラーの感じからしてSQL文に問題があるのではないかと考えたのですが、原因を見つけられませんでした。何か間違っている場所があったらご指摘いただきたいです。

package camp;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBC {
    public static void main(String[]args) throws SQLException{
        Connection  db_con = null;
        PreparedStatement db_st = null;
        ResultSet db_rs = null;
         try {
             Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
             db_con = DriverManager.getConnection("jdbc:mysql://localhost:8889/Data_db","root","root");
             db_st = db_con.prepareStatement("update from profiles set name=? tel=? age=? birthday=? where profilesID = ?");
             db_st.setString(1,"佐々木慎");
             db_st.setString(2,"987-654-3210");
             db_st.setInt(3, 44);
             db_st.setString(4, "1999-09-09");

             db_st.executeUpdate();

             db_st = db_con.prepareStatement("select * from profiles ");
             db_rs = db_st.executeQuery();
             while(db_rs.next()) {
                 System.out.println(db_rs.getInt("profilesID"));
                 System.out.println(db_rs.getString("name"));
                 System.out.println(db_rs.getString("tel"));
                 System.out.println(db_rs.getInt("age"));
                 System.out.println(db_rs.getString("birthday"));
             }

             db_con.close();
             db_st.close();
             db_rs.close();

         }catch(SQLException e_sql){
             System.out.println("接続時にエラーが発生しました");

         }catch(Exception e){
             System.out.println("接続時にエラーが発生しました");

         }finally {
             if(db_con != null) {
                 try {
                     db_con.close();
                     db_st.close();
                     db_rs.close();
                 }catch(Exception e_con){
                     System.out.println("エラーが発生しました");
                 }
             }
         }
    }
}

エラー内容

イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • bona

    2020/07/01 07:38

    StackTraceメソッドというものがあるのですね、勉強になります。エラーの詳細が特定できなかったので助かりました。ありがとうございます。

    キャンセル

  • cateye

    2020/07/01 07:40 編集

    https://docs.oracle.com/javase/jp/8/docs/api/java/sql/SQLException.html
    を、参考に、エラーの原因を確認してみましょう。

    キャンセル

  • bona

    2020/07/01 07:43

    こちらも活用させていただきます。御回答頂きありがとうございます。

    キャンセル

回答 4

+2

とりあえず

         }catch(SQLException e_sql){
             System.out.println("接続時にエラーが発生しました");

         }catch(Exception e){
             System.out.println("接続時にエラーが発生しました");

         }finally {


握りつぶしてるのが悪いです。
誰もわかりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 08:20

    初心の方にはもしかしたら「握りつぶす」と言う表現が通じないのでは、と思いました。
    } catch (HogeException e) {
    ; // 例外
    }
    のようなコードを「例外を握りつぶす」などと言います。プログラマー自ら、例外を無かったことのようにする行為だから、です。>@質問者さん
    それにしてもなぜ、違う例外(要因)に関して同じエラー出力をするのか。これではasahina1979さんの回答どおり、誰にも原因は分かりません。(握りつぶし、です)

    キャンセル

  • 2020/07/01 10:19

    SQLを直に実行確認してないのがそもそもの根本原因ですけどね。

    キャンセル

  • 2020/07/01 10:30

    全体の手順として問題が起きた時に切り分けし易いものとしては、
    1. SQLを直に実行して、SQL文として相当なものを確認する。
    2. 確認でOKだったSQL文を、実際のコード中にPreparedStatementとして適用する。
    3. コード実行の際にエラーが起きて原因が分かるように、Exceptionなどの例外、エラーハンドリング、報告のコードを書いておく。
    4. 可能な限り、実際にデバッグ(トレース)する。少なくとも1度は。
    でしょうね。

    キャンセル

  • 2020/07/01 14:04

    握りつぶすという言葉自体理解できていませんでした。また実装手順なども非常に参考になりました、御回答頂きありがとうございます。

    キャンセル

checkベストアンサー

+1

update from profiles set name=? tel=? age=? birthday=? where profilesID = ?


項目間の区切り(,)がありません。
また、文法的に誤っています。
update テーブル名 set [項目](,[項目]・・・)です。

update profiles set name=? ,tel=? ,age=? ,birthday=? where profilesID = ?


他の方も云われているように、実行可能なSQLとして確認したものを元にすることをお薦めします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 10:40 編集

    フロム テーブル(エイリアス プロファイル)(ぼそっ)

    キャンセル

  • 2020/07/01 10:51

    あ、そうですね。

    キャンセル

  • 2020/07/01 14:07

    エラー個所を特定して構文を見直したことで、ご指摘いただいた所と同じ間違いに気づくことができました。御回答頂きありがとうございます。

    キャンセル

0

SQLに問題があると思うのでしたら構文を確認することです。
リファレンスマニュアル:update

ただ、アプリケーションから実行する前にSQLを直に実行して想定の結果を得られるか確認するのが先です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 14:08

    やはりSQL文周辺に間違いがあることが分かり、見比べてみた所間違いに気づくことができました。御回答頂きありがとうございます。

    キャンセル

  • 2020/07/01 15:51

    文法問題ならドキュメント確認が確実です。
    それより、アプリケーション実装になって初めてSQLを実行するやり方を見直してください。
    それだけで未然に防げる問題も多いです。

    キャンセル

0

StackTraceメソッドでSQL自体に誤りがあること、where profilesIDに相当する部分がセットされていないことに気づき修正した所、上手くいきました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/01 14:24

    ちなみに 3つ連続でクローズしてますが。
    prepareStatement で エラーになった結果

    ResultSet が null のままなので NullPointerException が発生し 「エラーが発生しました 」が出力されてることも付け加えておく

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる