データベースから思っている値を取得できません
Q&A
Closed
現在、独学でJavaのWebアプリ開発を行っているプログラム初心者です。
Seihinchoice.javaサーブレットから入力した値("A200")を以下のコードから
String name = sdao.select(pp1);//問題あり
"A200"と出力されるようにしたいです。
しかし、現状はnullが帰ってきてしまいます。
また、エラーメッセージとして以下のメッセージが帰ってきます。
java.sql.SQLSyntaxErrorException: Unknown column 'A200' in 'where clause'
ProductDAO.javaからmysqlのカラム(ID)から該当する値("A200")を取得したいのですが
何か、問題がありそうな点をご教示頂けないでしょうか?
※初めての作成ということもあり、コードがとても汚いと思います。
ご了承頂けますと幸いです。
開発環境
java
eclipse
apache-tomcat-9.0
mysql
自分で試したこと
1、データベースのパスが通ていなかったためクラスパスを通しました。
2、エラーの場所を特定するため、Seihinchoice.javaの変数のデータを一つずつ確認しました。//値問題なしとコメントしております。
3、javaのString型とmysqlのVARCHAR型の関係をネットで調べました。
発生している問題・エラー
java.sql.SQLSyntaxErrorException: Unknown column 'A200' in 'where clause'
Seihinchoice.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import syoppingsaito.EtcNo;
import syoppingsaito.Product;
/**
* Servlet implementation class Seihinchoice
*/
@WebServlet("/Seihin-choice")
public class Seihinchoice extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//レスポンスのコンテンツタイプおよびエンコーディング方式を指定
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String a =request.getParameter("idx1");//"入力は問題なし"
//オブジェクト作成
Product ppp = new Product();
EtcNo etc = new EtcNo();
PorductDAO sdao = new PorductDAO();
//"A100が該当する数値を取得"
int ab = etc.etc(a);//値問題なし
String pp1 = ppp.returnId(ab);//値問題なし
//データベースのデータと比較
String name = sdao.select(pp1);//問題あり
String pp2 = ppp.Judg(name,ab);
//後で削除(テスト用)
PrintWriter out = response.getWriter();//[7]
out.println("<html><head></head><body>");//[8]
out.println("<p>入力された項目を表示します。</p>");//[9]
out.println("<p>入力項目1:" + name + "</p>");//[10]
out.println("</body></html>");
// セッションオブジェクト取得
HttpSession session = request.getSession();
session.setAttribute("pp2", pp2);
}
}
ProductDAO.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class PorductDAO {
private final String URL = "jdbc:mysql://localhost/product";
private final String USER = "root";
private final String PASS = "pass";
private Connection con = null;
public String select(String pp1) {
Statement stmt = null;
ResultSet rs = null;
String result = null;
String sql = "SELECT ID FROM Product WHERE ID = " + pp1;
try{
//①DBに接続
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(URL, USER, PASS);
//②ステートメントを生成
stmt =con.createStatement();
//③SQLを実行
rs = stmt.executeQuery(sql);
//④検索結果の処理
result = rs.getString("ID");
} catch(Exception e){
e.printStackTrace();
} finally {
try{
if(rs != null) rs.close();
if(stmt != null) stmt.close();
} catch(Exception e){
e.printStackTrace();
}
}
return result;
}
public void disconnect(){
try{
//⑤DBを切断
if(con != null) con.close();
} catch(Exception e){
e.printStackTrace();
}
}
}
//データベースmysql
Product
+------+--------------------+-------+
| ID | NAME | PRICE |
+------+--------------------+-------+
| A100 | ワイヤレスマウス | 5000 |
| A200 | デスク | 13000 |
| A300 | ワイヤレスイヤホン | 15000 |
| A400 | キーボード | 8000 |
| A500 | モニター | 18000 |
ID VARCHAR(10) primary key
NAME VARCHAR(10)
PRICE INTEGER