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

このQ&Aのポイント
  • Windows 8.1, Java 6でシンボルを見つけられませんエラーが発生しています。
  • 参考書通りにプログラムを実行したにもかかわらずシンボルを見つけられませんエラーが発生しています。
  • Inquiry.javaの33行目でシンボルを見つけられませんエラーが発生しています。
回答を見る
  • ベストアンサー

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

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
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • yossy_kt
  • ベストアンサー率50% (103/203)
回答No.2

Java6のexecuteUpdateメソッドでは、引数にSQL文の配列は指定できないと思います。 シンボルが見つからないというエラーは、SQL文の配列を引数に取るようなexecuteUpdateメソッドが見つからないという意味だと思います。 また、executeUpdateの戻り値はResultSetではなくてintです。 互換性のない型というエラーは、intとResultSetに互換性がないという意味だと思います。 特に戻り値を利用するわけではないなら、次のような感じでよいと思います。 String qry = "INSERT INTO inquiry VALUES ('いとう', '22', '名古屋市', '西区', '企画部', 2)"; // ←配列ではない。 st.executeUpdate(qry); // ←使わないなら戻り値は変数で受けない。 なお、eclipse等の開発環境をお使いになれば、このあたりのバグはプログラム編集の段階で指摘してくれるので便利ですよ。

KAIJI-000
質問者

補足

回答有難うございます。 提示して頂いたコードで解決できました。 実はエクリプスもインストール済みこっちの方も使うよう心がけます。

その他の回答 (1)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

>String[] qry = {"INSERT INTO inquiry VALUES ('いとう', '22', '名古屋市', '西区', '企画部', 2)"}; qryはString[]型の変数なので、 >ResultSet rs = st.executeUpdate(qry);  executeメソッドにString[]型の引数qryを渡している >ResultSet rs = st.executeUpdate(qry[0]);  とかでいいんじゃないでしょうか。

KAIJI-000
質問者

補足

回答有難うございます。 qry[0] で試しましたが、 Inquiry.java:33: 互換性のない型 検出値 : int 期待値 : java.sql.ResultSet ResultSet rs = st.executeUpdate(qry[0]); と出ています。

関連するQ&A

  • 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(); } } }

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

    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
  • 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と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)

  • JDBCについて

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.Statement; public class DBtest { public static void main(String[] args){ try { Connection con = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/address"; String user = "test"; String password = "pass"; con = DriverManager.getConnection(url, user, password); Statement st = (Statement) con.createStatement(); Statement st2 = (Statement) con.createStatement(); String sql = "SELECT * FROM data2"; ResultSet rs = st2.executeQuery(sql); try { System.out.println("ok"); // ここでクエリを実行 while(rs.next()){ System.out.println(rs.getString("name")+rs.getString("age")); } //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader na = new BufferedReader(new InputStreamReader(System.in)); String Na = na.readLine(); String ins = "INSERT INTO data2(name,age)VALUES('?',20)"; ps = (PreparedStatement) con.prepareStatement(ins); ps.setString(1,Na); ps.executeUpdate(); //INSERT実行 int rs2 = st2.executeUpdate(ins); System.out.println(rs2); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } finally { // 直前の try ブロックに入ったら、ここは必ず実行される con.close(); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); // 接続できない時 } } } 現在javaでmysqlに接続してDB内の検索や追加等を行うものを作成しています。 現状は入力されたものをDBに追加することまでできましたが 検索で 入力された値がDBの中に一致する、または部分一致したものを表示させるやり方がわかりません

    • ベストアンサー
    • Java
  • 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
  • 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
  • カンマ付数字を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
  • 【ご依頼】Javaソースコードシンボルエラー

    Javaプログラミングから離れて年月が経ってしまったそんな時、 急遽、Java演習の依頼を受けてしまいました。 下記のソースコードはブラウザのパラメータを受け取り、 その値をDB(MySQL)上で検索して画面上に表示する簡単なJavaサーブレットです。 【action.java】 ========================================================================= import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; public class action extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Action!</title></head><body>"); out.println("<h1>Profuct name is " + getValue(request) + " </h1>" ); out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" ); out.println("<p><a href=\"./form.html\">Return to input form</a>"); out.println("</body></html>"); out.close(); } private String getValue( HttpServletRequest request ) { String values = request.getParameter( "name" ); // ブラウザから送られた値を受け取る if( values != null ) { return( values ); } return( "error occured!" ); } // Access sample_db and returns price private int get_price( String values2, PrintWriter out ) { Connection conn = null; Statement stmt = null; ResultSet rs = null; values2 = getValue(request); int price = 0; try { conn = DriverManager.getConnection( "jdbc:mysql://localhost/sample_db", // url form of db "admin", // user name "******" // password ); stmt = conn.createStatement(); rs = stmt.executeQuery( "SELECT price FROM product WHERE name = '" + values2 +"'" ); rs.first(); price = rs.getInt( "price" ); // get the value of the first column } catch ( SQLException ex ) { out.println( "SQLException: " + ex.getMessage() + "<br>" ); out.println( "SQLState: " + ex.getSQLState() + "<br>"); out.println( "VendorError: " + ex.getErrorCode() + "<br>"); } finally { if( rs != null ) { try { rs.close(); } catch (SQLException ex) {} rs = null; } if( stmt != null ) { try { stmt.close(); } catch (SQLException ex) {} rs = null; } } return( price ); } } ========================================================================= 上記ソースコードをコンパイル(javac)しても 以下のエラーが発生してしまいます。 【エラーメッセージ】 ========================================================================= action.java:25: エラー: シンボルを見つけられません out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" ); ^ シンボル: 変数 values2 場所: クラス action action.java:44: エラー: シンボルを見つけられません values2 = getValue(request); ^ シンボル: 変数 request 場所: クラス action エラー2個 ========================================================================= 何度も修正するも自身では解決に至りませんでしたので 皆様のお力をお借りしたく投稿致しました。 ご確認の程、宜しくお願い致します。