- 締切済み
データベースへのアクセスエラーについて
はじめまして!大学でデータベースを学んでいるのですが、以下のプログラムを実行した際、「式の型が一致しません」というエラーが出ます。またアクセスしているテーブルmeiboにはフィールドに,IDと名前shakai,eigoなどのテーブルには,IDと得点(それぞれの科目の名前)がフィールドにあります。 よろしければ、ご回答よろしくお願いいたします。 import java.io.*; import java.sql.*; public class Ex1 { public static void main(String[] args) { Connection conn = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:ex1"); Statement stmt = conn.createStatement(); BufferedReader r = new BufferedReader(new InputStreamReader(System.in), 1); System.out.print("学籍番号を入力してください : "); System.out.flush(); String number = r.readLine(); String select = "SELECT * from meibo,kokugo,sansuu,shakai,rika,eigo " + "where meibo.ID=kokugo.ID=sansuu.ID=shakai.ID=rika.ID=eigo.ID"; ResultSet rs = stmt.executeQuery(select); while(rs.getString("ID")!=number) rs.next(); // System.out.printf("%s\t",rs.getString("name")); System.out.printf("%s\t"," 国語 "+rs.getString("kokugo")); System.out.printf("%s\t"," 算数 "+rs.getString("sansuu")); System.out.printf("%s\t"," 社会 "+rs.getString("shakai")); System.out.printf("%s\t"," 理科 "+rs.getString("rika")); System.out.printf("%s\n"," 英語 "+rs.getString("eigo")); stmt.close(); conn.close(); } catch (Exception e) { System.out.println(e); } } }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- mako_sea
- ベストアンサー率47% (62/130)
データベースは何をお使いなのでしょう。 Javaプログラムで実行する前に、 SQLの妥当性を確認した方がよろしいと思います。 特に 「where meibo.ID=kokugo.ID=sansuu.ID=shakai.ID=rika.ID=eigo.ID」 この条件の書き方で、実行できるのかがあやしいと思うのですが。 普通は 「where meibo.ID=kokugo.ID and meibo.ID=sansuu.ID and meibo.ID=shakai.ID and meibo.ID=rika.ID and meibo.ID=eigo.ID and」 と書くと思うのですが、 固有のデータベースアプリではありえる書き方なんでしょうかね?
- wEqM
- ベストアンサー率0% (0/6)
3カ所か4カ所なにかしら後の方は自動ミスのよう
- ProKaseifu
- ベストアンサー率51% (98/192)
そのSQL実行できるんですよね? で、 String number = r.readLine(); ここで入力された値をwhere句に条件に入れて。 実行結果のrs !=null なら結果ありと判断すればいいんじゃないかと・・・
- ProKaseifu
- ベストアンサー率51% (98/192)
SQL文が明らかにおかしいです。
- wshino
- ベストアンサー率0% (0/0)
どこでひっかかってるのかわからないですが、 とりあえず while の String 比較が比較になっていないような。
補足
早急なご回答ありがとうございます。 ResultSet rs = stmt.executeQuery(select);の文の前後にprintfで適当な文字を出力させようとすると,ResultSetの前に書いたprintfの内容は出力されたのですが、後に書いたものは出力されませんでした。
補足
ご回答ありがとうございます。 SQL変更しました。 String select = "SELECT meibo.*,kokugo.kokugo,sansuu.sansuu,shakai.shakai,rika.rika,eigo.eigo" + " from meibo,kokugo,sansuu,shakai,rika,eigo " + "where meibo.ID=kokugo.ID=sansuu.ID=shakai.ID=rika.ID=eigo.ID";