- PR -

SQLExceptionについて

投稿者投稿内容
花瓶夫
ベテラン
会議室デビュー日: 2003/10/01
投稿数: 50
投稿日時: 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/10/01
投稿数: 50
投稿日時: 2003-11-21 18:22
select の中にkaishaidのカラム名を入力し直してResultSetで仮想テーブルから取ってくるよな事をしたのですが、やはり同様のエラーが返されます。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2003-11-21 18:50
修正したsqlをもう一度コピーペーストしてください。
エラーの内容をもう一度コピーペーストしてください。
花瓶夫
ベテラン
会議室デビュー日: 2003/10/01
投稿数: 50
投稿日時: 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)
saruchan
会議室デビュー日: 2003/11/21
投稿数: 1
投稿日時: 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/10/01
投稿数: 50
投稿日時: 2003-11-21 21:24
回答ありがとうございます。内部結合するために、kaishaidを双方に同じキーを定義したのですが・・
SQL文に関してはおかしい所が無いような気がするのですが、やはり未だkaishaidのフィードの定義についてエラーが出ています。何でか原因がわかりません。プロンプト上で同様のSQL文を実行したのですが、昨日では実行できていたのが、本日実行したときには
ERROR 1052:Column:'kaishaid' in field list is ambiguousが表示されてしまっています。
mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-11-21 22:55
こんばんわ。みかん@オレンジ畑です。

Column: '****' in field list is ambiguous
は、ちょうど今日、新人のプログラム指導でよく目にしたものです。

花瓶夫 さんの 投稿日時: 2003-11-21 20:19 より
コード:
String query ="select kokyakuid,shimei,shozoku,yakushoku,keitai,bikou,

kaishaid,kaishamei,juusho,denwa
from kokyakukanri,kaishakanri
where kokyakukanri.kaishaid = kaishakanri.kaishaid
and kokyakuid ='"+kokyakuID+"'";


では、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/10/01
投稿数: 50
投稿日時: 2003-11-21 23:36
こんばんは 解決しました。!getStringのyakushokuとkeitaiの順番が逆でした。ポインタはSQLの順番でとってくるんでした。悲しいです。この問題だけで、十二時間、時間をさいてしまいました。しんどかったです。投稿下さった方、本当に有難うがざいました。また宜しくお願いします。

スキルアップ/キャリアアップ(JOB@IT)