- 締切済み
【ご依頼】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個 ========================================================================= 何度も修正するも自身では解決に至りませんでしたので 皆様のお力をお借りしたく投稿致しました。 ご確認の程、宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
変数のスコープをよく考えてください。 public void service(HttpServletRequest request, HttpServletResponse response)メソッドから参照できる範囲にvalues2の定義はありますか? 同様にprivate int get_price( String values2, PrintWriter out )メソッドから参照できる範囲にrequestの定義はありますか? また private String getValue( HttpServletRequest request ) private int get_price( String values2, PrintWriter out ) の2つのメソッドは何をするメソッドなのか、引数には何を渡すべきなのか、戻り値は何を意味するのか把握されていますか? 「下記のソースコードはブラウザのパラメータを受け取り、」と書かれていますが、そのパラメータとは何なのか把握されていますか? それを把握もせずに修正されてるようでしたら無駄な作業やってるだけですが。 本来されるべき各メソッドの説明がないので合ってるかどうかは知りません。 out.println("<h1>Price of " + getValue(request) + " is " + get_price( values2, out ) + " </h1>" ); ↓ out.println("<h1>Price of " + getValue(request) + " is " + get_price( getValue(request), out ) + " </h1>" ); values2 = getValue(request); ↓ 削除