• ベストアンサー

JAVAに書くSQL文について教えてください

Oracle内のデータを更新しようとしていますが ORA-00904というエラーが表示されます。 調べていると列名は「”」で囲ってはいけないと 書かれていたので、それでいろいろ試行錯誤してみたのですが エラーがなくなりません。 「SYAIN1」と「SYAIN2」は変数になっています。 このSQL文が機能するように、アドバイス頂けるとうれしいです。 int row_count = smt.executeUpdate(Update SYAIN_MASTER set SYAIN_NAME = SYAIN2 where SYAIN_ID SYAIN1);

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

DBのカラム型も書いてください。 あと、where句の条件はカンで適当に書いてます。 smt.executeUpdate("Update SYAIN_MASTER set SYAIN_NAME = '" + SYAIN2 + "'" + " where SYAIN_ID = '" + SYAIN1 + "'"); もちっとJavaとSQLの勉強しましょう。(数値型なら''でくくる必要ないですが、文字型だと'でくくる必要があります) あと、初心者っぽいので今のところ問題ないけど、業務アプリ開発するならばこの記述方法はNG、詳細は「SQLインジェクション」とか調べてください。

noname#177375
質問者

お礼

おっしゃる通り初心者です(^^;) まだプログラムというものを始めたばかりです。 答えてくださってありがとうございました。 SQLまだまだ使うと思うので、SQLインジェクションについて勉強しようと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JavaでのSQL文について教えてください

    int row_count = smt.executeQuery("select SYAIN_NAME from SYAIN_MASTER where SYAIN_ID='"+ SYAIN1 +"'"); 「SYAIN1」は、変数です。 変数を使ったときのSQL文を書くときの 「"」の位置などがわかりません。 この文だとエラーが出てしまいます。 どのようにすればいいのか、わかる方教えてくださいm(__)m

    • ベストアンサー
    • Java
  • SQLデバッガソフトってありますか?

    オラクルのORA-00904: 列名が無効です。 というエラーが表示されますが、他人の作った ものすごい長いSQLで どこが悪いのか見当もつきません。 オラクルに限らず、SQLの何行目のこの辺が おかしい等の 妥当性をプログラムのエラーのように チェックするソフトはありますでしょうか?

  • オラクルのSQLについて教えてください

    JavaでOracleに登録するプログラムを作成しています。 下記を実行したところ「ORA-01722: 数値が無効です」と 表示される始末です。 int inse = 0; inse = smt.executeUpdate("insert into MONEY_TABLE values ('"+ Y1 +"','"+ M1 +"','"+ ID1 +"','"+ KEY1 +"','"+ CHOICE1 +"','"+ CHOICE2 +"','"+ CHOICE3 +"','"+ KAMOKU1 +"','"+ FROM1 +"','"+ TO1 +"','"+ TRA1 +"','"+ PLA1 +"','"+ NAIYOU1 +"','"+ MONEY1 +"')"); ()内は、すべて変数です。 見難いと思いますが、アドバイスよろしくお願いします。

  • SQL WHERE文のノットイコールについて

    初歩的な質問ですみません。 Oracle9iでsqlplusで接続しています。 「member_accountテーブルのdelete_flag(VARCHAR2)カラムの値が'1'ではない」ものを抽出したいと考えてます。 ただ、正しい結果が返ってきません。 何が問題でしょうか?よろしくお願いいたします。 ============================================================ SQL> select count(ID) from member_account; COUNT(ID) ---------- 16450 SQL> SQL> select count(ID) from member_account where delete_flag='1'; COUNT(ID) ---------- 107 SQL> SQL> select count(ID) from member_account where delete_flag<>'1'; COUNT(ID) ---------- 0 SQL> SQL> select count(ID) from member_account where delete_flag!='1'; COUNT(ID) ---------- 0 ============================================================ よろしくお願いいたします。

  • PL/SQLでPLS-00201のエラー

    初めて質問させていただきます。 よろしくお願いいたします。 Oracle 9i から 11g へバージョンアップしました。 9iでは動いていたPL/SQLコマンドが11gでは 以下のようなエラーが大量に発生します A_FLG Aシノニム名.列名%type ,      * 行16でエラーが発生しました ORA-00201:行16、列13: PLS-00201:識別子(シノニム名).(列名)を宣言してください。 PROCEDURE D_FLG_UPD ( a in varchar2 ) is type D_TYPE is record ( J シノニム名.列名.列名%type ,    ここでエラー   → A_FLG Aシノニム名.列名%type , B_FLG Bシノニム名.列名%type , C_FLG Cシノニム名.列名%type ); G H; begin これはどういった場合に発生するエラーなのでしょうか? またOracleのバージョンによってPL/SQLのコマンドが動かなくなったりすることは よくあることなのでしょうか? よろしくお願いいたします。

  • SQLのどこがおかしいでしょうか?

    PHP4、MySQLです。 for($i=1;$i<34;$i++){ $sql = "select count(group) as cnt".$i." "; $sql.= "from stock "; $sql.= "where group=".$i." "; //print "sql= ".$sql."<br>"; $result = mysql_query($sql,$db) or die("失敗しました".mysql_error ()); $Row = mysql_fetch_array($result, MYSQL_ASSOC); $cnt.$i = $Row['cnt".$i."']; } としています。どこがおかしいでしょうか? 教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • HSQLDB のデータ更新エラー

    よろしくお願いします。 HSQLDB に繋がっているのですが、データを更新しようとしたら、エラーになります。 どうすればよいのかお教え下さい。 以下のPGを実行したら(smt=org.hsqldb.jdbc.jdbcStatement@*****)と表示されますが、 コメントアウトを外して実行したら、(TABLE not found in [UPDATE ACCOUNT])とエラーが出ます。 package appsample; import java.sql.Connection; import java.sql.Statement; public class UpdateSample { public static void main(String[] args) throws Exception { Connection con = DBManager.getConnection(); Statement smt = con.createStatement(); // int count = smt.executeUpdate("UPDATE ACCOUNT SET MONEY=5000"); // System.out.println("update count : " + count); System.out.println("smt=" + smt); smt.close(); con.close(); } } [環境]HSQLDB1.8.7 Eclipse3.2.1

  • 単一グループのグループ関数ではありませんについて

    以下の様なテーブルがあります。 SOSHIKI_CODE SYAIN_CLS DEL_DATE A部 0 A部 1 B部 1 B部 2 C部 3 組織毎の社員クラスをカウントしたいのですが、 以下のSQLを実行すると ORA-00937: 単一グループのグループ関数ではありません。 のエラーがでます。 どこがいけないのでしょうか。 いけない理由が知りたいのですが。 また、どこを直せばよいのでしょうか。 select soshiki_code -- ,syain_cls ,max(decode(syain_cls,'0',count(*),NULL)) ,max(decode(syain_cls,'1',count(*),NULL)) ,max(decode(syain_cls,'2',count(*),NULL)) ,max(decode(syain_cls,'3',count(*),NULL)) from syain_mst where del_date is NULL group by soshiki_code ,syain_cls order by soshiki_code ;

  • グループ化したSQL文のカウントについて

    オラクルを初めて2週間の初心者です。 tableA表からE_Codeをグループ化し、E_Codeの1の値が何個あるか、2の値が何個あるかカウントした値を求めたいのですがSQL文がわかりません。GROUP BYやCASE文などネットを見ながら試行錯誤しチャレンジしましたが、エラーとなり求めたい結果が取得できませんでした。 この場合どのようなSQL文を書いたらいいのでしょうか。 --tableA-- E_Code|K_Code 001  |   1 001  |   1 002  |   1 002  |   1 002  |   1 003  |   1 004  |   2 005  |   1 005  |   1 006  |   1 007  |   2 007  |   1 007  |   2 求めたい出力結果↓ ----------------------------- E_Code | 1の個数 | 2の個数 001  | 2    | 002  | 3    | 003  | 1    | 004  |      |1 005  | 2    | 006  | 1    | 007  | 1    |2

  • SQL副問い合わせ内のエイリアス

    DEPARTMENTとEMPLOYEESのテーブルがあり、そこから社員のいない部署を取得しようとしているのですが、わたしの書いたSQLがうまく動きません。作動しない理由をご教授くだされば助かります。オラクル8.1.7.4.1で動作させなければならず、left outer joinが使えないところからの質問です。 データはこういう構造です(*がプライマリーキィを表す)。 DEPARTMENT: *DEPT__T, DEPT_NAME, .... EMPLOYEES: *EMPLOYEES__T, DEPT_NAME, ... これに対して、 select dept__t, (select count(*) from employee where department.dept__t = employees.dept__t) counter from department where counter = 0 というSQLで社員のいない部署を取ろうとしたのですが、ORA-00904: "COUNTER": invalid identifier.が返されてしまいます。 WHERE文にcounterというエイリアスではなくカラムそのものを書くと問合せが正常に作動するのですが、なぜでしょうか。オラクルのバージョンが古いことが原因でしょうか。