- - PR -
SQLExceptionについて
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-11-21 18:13
見ていただき誠に有難う御座います。
kokyakuKensakuServletの中 htmlで入力したものをdoPostで受け取りパラメータをBeansにセットした後 //検索メソッドとして実行 if(kkb.KennsakuID(kenkokyakuid) == true){ //検索してきたものをリクエストディスパッチャーでJSPに転送し表示 } else{ //検索エラーとしてhtmlに表示する。 } kokyakuKensakuBeansの中のメソッドです //検索する引数を受け取る public boolean KennsakuID(String kokyakuID){ if(kokyakuID == null || kokyakuID.equals("")){ return false; } String dbkokyakuid =""; String dbshimei =""; String dbshozoku =""; String dbyakushoku=""; String dbkeitai =""; String dbbikou = ""; String dbkaishaid=""; String dbkaishamei =""; String dbjuusho =""; String dbdennwa =""; try{ この中にjdbcの上記の部分が続きます。 | ||||
|
投稿日時: 2003-11-21 18:22
select の中にkaishaidのカラム名を入力し直してResultSetで仮想テーブルから取ってくるよな事をしたのですが、やはり同様のエラーが返されます。
| ||||
|
投稿日時: 2003-11-21 18:50
修正したsqlをもう一度コピーペーストしてください。
エラーの内容をもう一度コピーペーストしてください。 | ||||
|
投稿日時: 2003-11-21 20:19
皆様、いろいろなご意見本当に感謝します。Tomcatのエラーが変わり、少しだけ解消しました。しかしGeneral errorがでてしまい、テーブル上のカラム名と、SQLのカラム名を比較したのですが、間違えがないようです。テーブルの型の問題とかでしょうか。何かお気づきであれば、ご意見頂けますでしょうか?
----kokyakuKensakuBeansのメソッドの一部----- public boolean KennsakuID(String kokyakuID){ if (kokyakuID == null || kokyakuID.equals("")){ System.out.println(kokyakuID); return false; } String dbkokyakuid = ""; String dbshimei = ""; String dbshozoku = ""; String dbyakushoku = ""; String dbkeitai = ""; String dbbikou = ""; String dbkaishaid=""; String dbkaishamei=""; String dbjuusho=""; String dbdennwa =""; try{ ResourceBundle bundle = ResourceBundle.getBundle("../mysqlresource"); String url= bundle.getString("URL"); System.out.println("接続ok"); String driver = bundle.getString("Driver"); Class.forName(driver); Connection dbconnect = DriverManager.getConnection(url); //クエリの実行処理 System.out.println("クエリ実行"); Statement stmt = dbconnect.createStatement(); String query ="select kokyakuid,shimei,shozoku,yakushoku,keitai,bikou,kaishaid,kaishamei,juusho,denwa from kokyakukanri,kaishakanri where kokyakukanri.kaishaid = kaishakanri.kaishaid and kokyakuid ='"+kokyakuID+"'"; ResultSet rs = stmt.executeQuery(query); //顧客情報の取得 if(rs.next() == true){ dbkokyakuid = rs.getString("kokyakuid"); dbshimei = rs.getString("shimei"); dbshozoku = rs.getString("shozoku"); dbyakushoku = rs.getString("yaksuhoku"); dbkeitai = rs.getString("keitai"); dbbikou = rs.getString("bikou"); dbkaishaid = rs.getString("kaishaid"); dbkaishamei = rs.getString("kaishamei"); dbjuusho = rs.getString("juusho"); dbdennwa = rs.getString("denwa"); //検索結果をプロパティにセット this.setKokyakuid(dbkokyakuid); this.setShimei(dbshimei); this.setShozoku(dbshozoku); this.setYakushoku(dbyakushoku); this.setKeitai(dbkeitai); this.setBikou(dbbikou); this.setKaishaid(dbkaishaid); this.setKaishamei(dbkaishamei); this.setJuusho(dbjuusho); this.setDennwa(dbdennwa); ------スキーマ定義---- mysql> show fields from kokyakukanri; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | kokyakuid | int(5) | | PRI | 0 | | | shimei | varchar(10) | | | | | | shozoku | varchar(6) | YES | | NULL | | | yakushoku | varchar(6) | YES | | NULL | | | keitai | varchar(16) | YES | | NULL | | | bikou | varchar(50) | YES | | NULL | | | kaishaid | int(5) | | | 0 | | +-----------+-------------+------+-----+---------+-------+ 7 rows in set (0.00 sec) mysql> show fields from kaishakanri; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | kaishaid | int(5) | | PRI | 0 | | | kaishamei | varchar(10) | | | | | | juusho | varchar(50) | | | | | | denwa | varchar(16) | | | | | +-----------+-------------+------+-----+---------+-------+ 4 rows in set (0.10 sec) -----Tomcatのエラ------ 接続ok クエリ実行 java.sql.SQLException: General error: Column: 'kaishaid' in field list is ambigu ous at org.gjt.mm.mysql.MysqlIO.sendCommand(Unknown Source) at org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Unknown Source) at org.gjt.mm.mysql.MysqlIO.sqlQuery(Unknown Source) at org.gjt.mm.mysql.Connection.execSQL(Unknown Source) at org.gjt.mm.mysql.Connection.execSQL(Unknown Source) at org.gjt.mm.mysql.Statement.executeQuery(Unknown Source) at org.gjt.mm.mysql.jdbc2.Statement.executeQuery(Unknown Source) at mybeans.kokyakuKensakuBeans.KennsakuID(kokyakuKensakuBeans.java:110) at kokyakuKensakuServlet.doPost(kokyakuKensakuServlet.java:43) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:256) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex t.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex t.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java: 2415) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex t.invokeNext(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche rValve.java:171) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex t.invokeNext(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:172) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex t.invokeNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex t.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:22 3) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java :594) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce ssConnection(Http11Protocol.java:392) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java :565) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:619) at java.lang.Thread.run(Thread.java:536) | ||||
|
投稿日時: 2003-11-21 21:01
kaishaidは kokyakukanri と kaishakanri に存在するため
だと思います。 MySQLはよく分かりませんが、通常は取得するカラム名を kokyakukanri.kaishaid または kaishakanri.kaishaid と 指定しなくてはならないと思います。 例えば... String query ="select kokyakuid,shimei,shozoku,yakushoku,keitai,bikou,kokyakukanri.kaishaid,kaishamei,juusho,denwa from kokyakukanri,kaishakanri where kokyakukanri.kaishaid = kaishakanri.kaishaid and kokyakuid ='"+kokyakuID+"'"; | ||||
|
投稿日時: 2003-11-21 21:24
回答ありがとうございます。内部結合するために、kaishaidを双方に同じキーを定義したのですが・・
SQL文に関してはおかしい所が無いような気がするのですが、やはり未だkaishaidのフィードの定義についてエラーが出ています。何でか原因がわかりません。プロンプト上で同様のSQL文を実行したのですが、昨日では実行できていたのが、本日実行したときには ERROR 1052:Column:'kaishaid' in field list is ambiguousが表示されてしまっています。 | ||||
|
投稿日時: 2003-11-21 22:55
こんばんわ。みかん@オレンジ畑です。
Column: '****' in field list is ambiguous は、ちょうど今日、新人のプログラム指導でよく目にしたものです。 花瓶夫 さんの 投稿日時: 2003-11-21 20:19 より
では、SELECT句の kaishaid が kokyakukanri と kaishakanri の両方にあるため、どっちのテーブルの kaishaid なんだ?と、怒ってるわけです。ambiguous = あいまいな saruchan さんの 投稿日時: 2003-11-21 21:01 のように、SELECT句の kaishaid を、kokyakukanri.kaishaid に変えてもだめですか? 実際に実行したコードと、そのときに出たエラーメッセージと、それに関する花瓶夫さんの書き込みが、どうも一致しません。 なお、花瓶夫 さんの 投稿日時: 2003-11-21 16:04 の時点では、SELECT句にないカラムをgetString()するからエラーなのです。 花瓶夫 さんの 投稿日時: 2003-11-21 20:19 時点では、前述のように SELECT句の kaishaid があいまいだからエラーなのです。 昨日、本日といわれてもよくわかりませんが、 ・SELECTしていないフィールドをgetString()するのでエラー(SQL文は正しいので、コンソールでは動く) ・SQL文自体に誤りがあるので、executeQuery()でエラー(コンソールでも、当然エラー) と、理由が異なっているので、何も不思議なことはないですよ。 saruchan さんの示したSQL文なら、大丈夫だと思うのですが。 (目見なので、試した上で言ってるわけじゃないですけど) むー、記事ポインタが難しいですねぇ。 あと、コードの貼り付けは http://www.atmarkit.co.jp/bbs/phpBB/faq-japanese.php#bbcode の CODEタグ 使いませんか。 #誤字修正しました。 [ メッセージ編集済み 編集者: みかん 編集日時 2003-11-21 23:00 ] | ||||
|
投稿日時: 2003-11-21 23:36
こんばんは 解決しました。!getStringのyakushokuとkeitaiの順番が逆でした。ポインタはSQLの順番でとってくるんでした。悲しいです。この問題だけで、十二時間、時間をさいてしまいました。しんどかったです。投稿下さった方、本当に有難うがざいました。また宜しくお願いします。
| ||||
