DBへ問合せた後の処理について

このQ&Aのポイント
  • btn1を押すとDBへ問合せ、データが有る場合はbtn2が使えるようになり、データがない場合はbtn3が使えるようになる、という風にしたいのですが、コンパイル時にシンボルがありません。
  • 変数tが宣言されていないため、コンパイル時にシンボルがないというエラーが出ます。
  • データベースへの問い合わせ後に変数tを宣言し、それに応じてbtn2とbtn3の有効化を行う方法を探しています。
回答を見る
  • ベストアンサー

DBへ問合せた後の処理について。

btn2.setEnabled(false); btn3.setEnabled(false); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try{ String drv = "org.postgresql.Driver"; String url = "jdbc:postgresql:postgres"; String usr = "postgres"; Class.forName(drv); Connection cn = DriverManager.getConnection(url, usr); Statement st = cn.createStatement(); String qry1 = "SELECT * FROM getuji WHERE 年度 = '1984';"; ResultSet rs = st.executeQuery ( qry1 ); while(rs.next()){ int t = rs.getInt("年度"); } st.close(); cn.close(); } catch(Exception f){f.printStackTrace();} if (t != 0 ){ btn2.setEnabled(true); } else{ btn3.setEnabled(true); } } }); btn1を押すとDBへ問合せ、データが有る場合はbtn2が使えるようになり、データがない場合はbtn3が使えるようになる、という風にしたいのですが、コンパイル時に シンボルがありません。 変数 t if (t != 0 ){ とエラーた出てしまいます。何かよい方法はないでしょうか?上記以外のやり方でもけっこうですので教えてください。

  • Java
  • 回答数1
  • ありがとう数1

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

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

while(rs.next()){ int t = rs.getInt("年度"); } ↓ int t = 0; while(rs.next()){ t = rs.getInt("年度"); } にすればいいんじゃないかと。 while内の変数なんだからそのスコープの外で見れるわけがないですよね。

totojima
質問者

お礼

なるほど、変数を定義する場所がまずかったのですね・・・ ありがとうございました!!

関連するQ&A

  • コンパイル時にエラーが出てしまいます・・・

    btn2.setEnabled(false); btn3.setEnabled(false); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int t0 = 0; if (txt1.getText().length() == 4 ){ try{ String drv = "org.postgresql.Driver"; String url = "jdbc:postgresql:postgres"; String usr = "postgres"; Class.forName(drv); Connection cn = DriverManager.getConnection(url, usr); Statement st = cn.createStatement(); String qry1 = "SELECT * FROM getuji WHERE 年度 = '1984';"; ResultSet rs = st.executeQuery ( qry1 ); while(rs.next()){ t0 = rs.getInt("年度"); } st.close(); cn.close(); } catch(Exception f){f.printStackTrace();} } else{ btn3.setEnabled(true); } if (t0 != 0 ){ btn2.setEnabled(true); } else{ btn3.setEnabled(true); } } }); btn1を押すとDBへ問合せ、データが有る場合はbtn2が使えるようになり、データがない場合はbtn3が使えるようになる、という風にしたいのですが、コンパイル時に intは間接参照できません。 if (t0 != 0 ){ とエラーた出てしまいます。何がいけないのでしょうか? 以前、聞いたやり方でやったのですがうまくいきませんでした。 http://okwave.jp/qa4452155.html 同じ質問をするのは申し訳なく思うのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • カンマ付数字をDBへ追加するにはどうしたらいいですか?

    txt1.setText(15,200) btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try{ // **接続情報** String drv = "org.postgresql.Driver"; String url = "jdbc:postgresql:postgres"; String usr = "postgres"; // **DBへの接続、問合せ** Class.forName(drv); Connection cn = DriverManager.getConnection(url, usr, pw); Statement st = cn.createStatement(); String qry1 = "INSERT INTO getuji (数字) VALUES ( "+ txt1.getText() + ");"; st.executeUpdate( qry1 ); // **DB切断** st.close(); cn.close(); } catch(Exception f){f.printStackTrace();} } }); txt1にカンマの付いている数字を入れるとエラーが出てしまいます。 カンマがなければエラーが起きないのですが何か良い方法はないでしょうか? DBのgetuji表のテーブル(数字)のデータ型はintegerです。なのですがこれを変えた方がいいのでしょうか? わかる方がいらっしゃいましたらよろしくお願いします。

    • ベストアンサー
    • Java
  • resultsetによるDBへのレコード追加

    できるかできないかだけでも教えてください。 お願いいたします。 ACCESSへレコードの追加を Resultsetによってしたいと思います。 環境1 WIN2000(SP2) Forte3.0 JDK1.4 ACCESS2000  では、以下のプログラムが一部(rs.moveToCurrentRow())を除き動きます。 環境2(ハードウェアの状態よりバージョンがあげられません) win98(SP2?) Forte2 JDK1.3 ACCESS2000  では、   rs.insertRow()  で例外が発生します。 ODBCドライバのバージョンは両環境とも.6019です。 JDBCドライバのバージョンがこの原因と思われますが、 JDBCドライバあげる方法もわかりませんし、手の打ちようがありません。 環境2で insertRow の動作の仕方など ご存知の方ぜひ教えてください。 ソース try{ String drv = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:データベース名"; String usr = ""; String pw = ""; Connection con; Statement st; //接続 Class.forName(drv); con = DriverManager.getConnection(url, usr, pw); st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,                 ResultSet.CONCUR_UPDATABLE);   String qry="SELECT * FROM T_table"; ResultSet rs = st.executeQuery(qry); rs.moveToInsertRow(); //データ入力 rs.updateString(1,"データ");   //省略 //insertRowが動かない rs.insertRow(); rs.moveToCurrentRow(); con.commit(); }catch(Exception e){ // System.exit(0); } }

    • ベストアンサー
    • Java
  • Java PostgreSQL スクリプトレット

    スクリプトレットを使用し、ログイン画面を作成しようと考えています。 <%@ page import="java.io.*,javax.servlet.*,javax.servlet.http.*,java.net.*,java.sql.*" %> <% request.setCharacterEncoding("Shift_JIS"); String id = (String)request.getParameter("id"); String pass = (String)request.getParameter("pass"); String drv = "org.postgresql.Driver"; String dsn = "jdbc:postgresql://localhost:5432/?user=postgres&password=aipo"; String sql = "SELECT * FROM TURBINE_USER"; Connection cn = DriverManager.getConnection(dsn); Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { out.println("<P>" + rs.getString(1) + "</P>"); } rs.close(); st.close(); cn.close(); %> 上記を実行すると org.apache.jasper.JasperException: Exception in JSP: /get.jsp:18 となり、 ResultSet rs = st.executeQuery(sql); の時点でエラーとなります。 Statement st = cn.createStatement(); まで正常に動作するのは確認済みです。 類似する質問に http://oshiete1.goo.ne.jp/qa3522131.html がありましたが、解決できませんでした。 どこが間違っていますでしょうか。

  • Javaでデータに登録する度にIDを振る

    下記のコードはSQLにテーブルを作成し、データを登録するコードですが コードを少し足すことで、ついでにIDを自動的に割り振る方法はあるのでしょうか? import java.sql.*; public class Sample1 { public static void main(String args[]) { try{ //接続の準備 String url = "jdbc:derby:cardb;create=true"; String usr = ""; String pw = ""; //データベースへの接続 Connection cn = DriverManager.getConnection(url, usr, pw); //問い合わせの準備 DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "車表", null); Statement st = cn.createStatement(); String qry1 = "CREATE TABLE 車表(番号 int, 名前 varchar(50))"; String[] qry2 = {"INSERT INTO 車表 VALUES ('伊藤', '男性')", "INSERT INTO 車表 VALUES ('佐藤', '女性')", "INSERT INTO 車表 VALUES ('山田', '男性')"}; String qry3 = "SELECT * FROM 車表"; if(!tb.next()){ st.executeUpdate(qry1); for(int i=0; i<qry2.length; i++){ st.executeUpdate(qry2[i]); } } //問い合わせ ResultSet rs = st.executeQuery(qry3); //データの取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i) + ":"+ rs.getObject(i) + " "); } System.out.println(""); } //接続のクローズ rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } 000001 伊藤 男性 000002 佐藤 女性 000003 山田 男性

    • ベストアンサー
    • Java
  • Javaとエクセルを連携させる

    Sample1.java  ドライバ名にMicrosoft Excel Driver;createと指定しましたが 実行時に、 java.sql.SQLException: No suitable driver found for Microsoft Excel Driver;creat e=true at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at Sample1.main(Sample1.java:14) ドライバが適切でないというエラーが出てしまいました。 エクセルのDBはSQL文では扱えないのでしょうか? コードは以下の通りです。 import java.sql.*; public class Sample1 { public static void main(String args[]) { try{ //接続の準備 String url = "Microsoft Excel Driver;create=true"; String usr = ""; String pw = ""; //データベースへの接続 Connection cn = DriverManager.getConnection(url, usr, pw); //問い合わせの準備 DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "車表", null); Statement st = cn.createStatement(); String qry1 = "CREATE TABLE 車表(番号 int, 名前 varchar(50))"; String[] qry2 = {"INSERT INTO 車表 VALUES (2, '乗用車')", "INSERT INTO 車表 VALUES (3, 'オープンカー')", "INSERT INTO 車表 VALUES (4, 'トラック')"}; String qry3 = "SELECT * FROM 車表"; if(!tb.next()){ st.executeUpdate(qry1); for(int i=0; i<qry2.length; i++){ st.executeUpdate(qry2[i]); } } //問い合わせ ResultSet rs = st.executeQuery(qry3); //データの取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i) + ":"+ rs.getObject(i) + " "); } System.out.println(""); } //接続のクローズ rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } }

  • シンボルを見つけられませんのエラー原因

    Windows 8.1, Java 6です。 参考書通りに入れたので間違えているはずがないのですが、 Inquiry.java:33: シンボルを見つけられません。 シンボル: メソッド executeUpdate(java.lang.String[]) 場所 : java.sql.Statement の インタフェース ResultSet rs = st.executeUpdate(qry); となっています。何が原因でしょうか? package mybeans; import java.util.*; import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class Inquiry implements Serializable { private ArrayList<String> colname; private ArrayList<ArrayList> data; public Inquiry() { try{ String url = "jdbc:mysql://localhost:3306/work;create=true"; String usr = ""; String pw = ""; Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/work","割愛","割愛"); DatabaseMetaData dm = cn.getMetaData(); ResultSet tb = dm.getTables(null, null, "inquiry", null); Statement st = cn.createStatement(); String[] qry = {"INSERT INTO inquiry VALUES ('いとう', '22', '名古屋市', '西区', '企画部', 2)"}; ResultSet rs = st.executeUpdate(qry);  ←ここがエラー箇所 rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } public ArrayList getData() { return data; } public ArrayList getColname() { return colname; } }

    • ベストアンサー
    • Java
  • JavaとMySQLを接続できなくて困っています。

    MySQLで作成したデータベースをJavaを使って表示するというプログラムを作っているのですが、JDBCドライバがうまく機能せず、接続できません。初歩的な問題なのだとは思いますが、どなたか解決方法を教えてください。 import java.sql.*; public class Iwate1 { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ try{ String drv = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql:///iwate"; String usr = "----"; String pw = "-------"; Class.forName(drv).newInstance(); Connection cn = DriverManager.getConnection(url, usr, pw); Statement st = cn.createStatement(); String qry = "SELECT * FROM iwate_table"; ResultSet rs = st.executeQuery(qry); ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); while(rs.next()){ for(int i=1; i<=cnum; i++){ System.out.print(rm.getColumnName(i)+":"+rs.getObject(i)+" "); } System.out.println(""); } rs.close(); st.close(); cn.close(); } catch(Exception e){ e.printStackTrace(); } } } 結果は java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at Iwate1.main(Iwate1.java:17)

  • java.lang.NoClassDefFoundErrorというエラーが出ます

    ご質問させて頂きます。 自分のPC(XP)からTelnetで LINUX(Red Hat Linux release 9 (Shrike))に接続しています。 サンプルを参考にして以下のコードを作ってみました。 これは、PostgreSQLで作成したデータベース(aa)の テーブル(test)のデータを表示させようとしています。 import java.sql.*; public class sample1{  public static void main(String [] args){   String driver = "org.postgresql.Driver";   String url = "jdbc:postgresql://192.178.215.230/home/postgres/data/aa";   try{     Class.forName(driver);     Connection con = DriverManager.getConnection(url,"postgres","aaaa");     Statement st = con.createStatement();     ResultSet rs = st.executeQuery("SELECT * FROM test");      System.out.println("shainno shimei ");     while ( rs.next() ){        System.out.println(" "+rs.getInt("shainno")+" "+ rs.getString("shimei"));     }     rs.close();      st.close();      con.close();     }catch (SQLException sqlEx){     System.out.println("SQLERROR: " + sqlEx.toString());   }catch (Exception ex){     ex.printStackTrace();   }  } } これを実行すると、 [postgres@localhost postgres]$ java sample1 以下のようなエラーが出てします。 Exception in thread "main" java.lang.NoClassDefFoundError: sample1 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • データベース接続をどのように関数にすればよいか分かりません

    この処理を何回か使うので関数にすることになりました。 しかし、例外を考えてtry、catchを使うとすると 処理を入れられないで接続終了になってしまいます。 throwsで全部例外をなげるしかないのでしょうか? 分かる方がいましたら、教えてください。 よろしくお願いします。 public void Connect()throws ServletException,IOException {  try{   String drv = "org.gjt.mm.mysql.Driver";   String url = "jdbc:mysql://localhost/keijiban?useUnicode=true&characterEncoding=sjis";   String usr = "";   String pw = "";   Class.forName(drv);   cn = DriverManager.getConnection(url,usr,pw);  //処理を入れる所////////////////////////  }catch(Exception e){   e.printStackTrace();  } finally {   if (cn != null) {    try {     cn.close();    } catch (SQLException e) {     throw new ServletException(e);    }   }  } }

    • ベストアンサー
    • Java