ここから本文です

JAVAでデータベースにアクセスしてデータの取り出しを行うプログラムを作成してい...

chielien_c584013f44bb81c14f59747efさん

2017/11/1303:26:46

JAVAでデータベースにアクセスしてデータの取り出しを行うプログラムを作成しています。

ListControllerからItemDaoへ検索メソッドを呼び出してデータを取り出したいのてすが、SQL文が正常に実行されず終了されていませんとエラーが発生します。

デバッグを行ったところ、検索メソッドの①→⑤まで実行された後に⑩⑤→⑩⑥へ飛んでしまい、⑩⑥のretern listからListController⑩⑦へ返ってしまいます。

⑥から⑩④が実行されないため値を取得出来ず、さらにSQL文が終了されないエラーの対処法を教えて頂きたいです。

ListController

package DrinkMachine;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import beans.ItemBean;
import DrinkMachine.dao.T001_ItemDao;

/**

jspServlet implementation class ListController
*/
public class ListController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**

@see HttpServlet#HttpServlet()
*/
public ListController() {
super();
// TODO Auto-generated constructor stub
}
/**

@see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**

@see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html:charset=UTF-8");
response.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");
String code = request.getParameter("code");

try {

T001_ItemDao itemDao = new T001_ItemDao();

⑩⑦List<ItemBean> list = itemDao.searchItem(name, code);

request.getSession().setAttribute("sItm", list);

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

ItemDao

package DrinkMachine.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import beans.ItemBean;

public class T001_ItemDao {
private Connection conn = null;

public T001_ItemDao() throws ClassNotFoundException, SQLException {

" jdbc:oracle:thin@";
Class.forName("oracle.jdbc.driver.OracleDriver");

conn = DriverManager.getConnection(
"jdbc:oracle:thin:",
"", "");
}

PreparedStatement pstmt = null;







//検索メソッド
public List<ItemBean> searchItem(String code, String name) {

①String sql1 = "SELECT ITEM_NO,ITEM_NM,UNIT_PRICE,STOCK_COUNT"
+ " FROM T001_ITEM" + "WHERE ITEM_NO Like '" + code + "%'"
+ " AND ITEM_NM Like '%" + name + "%'";

②System.out.println(sql1);

③List<ItemBean> list = new ArrayList<ItemBean>();

try {
④Statement statement = conn.createStatement();
⑤ResultSet resultSet = statement.executeQuery(sql1);

⑥while (resultSet.next()) {

⑦ItemBean selectedItm = new ItemBean();

⑧selectedItm.setCode(resultSet.getString("ITEM_NO"));
⑨selectedItm.setName(resultSet.getString("ITEM_NM"));
⑩selectedItm.setPrice(resultSet.getString("UNIT_PRICE"));
⑩①selectedItm.setCount(resultSet.getString("STOCK_COUNT"));

⑩②list.add(selectedItm);
}

⑩③String sItm = resultSet.getString("List<beans.ItemBean> list");

⑩④System.out.println(sItm);

} catch (SQLException e) {
e.printStackTrace();
}

⑩⑤System.out.println(list.size());

⑩⑥return list;

}
}

閲覧数:
60
回答数:
3

違反報告

ベストアンサーに選ばれた回答

pppp1219ppppさん

2017/11/1523:10:38

インジェクション対策をしていないのでDBをdropできるとかは置いといて


resultSetのループができていないということは、中身がないということなので、それ以前のSQLでのデータ取得ができていないと考えるのが妥当かと思います。
まずは下の方の書いてある通りスペースを入れてみる必要はあると思いますので一旦書いてあるSQL文をコピペしてDBの方で実行してみてはいかかでしょうか?
それで取得できているのであれば、それ以降でresultSetまでの間の処理もしくは引数の問題だと推測できます。
あとはコンソールにデータの中身を標準出力してみるのもいいかと思います

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

liketana0317さん

2017/11/1403:02:50

ちゃんと全部読んでませんが、WHEREの前にスペースがないので構文エラーになっていませんか?


" FROM T001_ITEM" + "WHERE ITEM_NO Like '"

" FROM T001_ITEM" + " WHERE ITEM_NO Like '"

これでどうでしょう。

プロフィール画像

カテゴリマスター

lagrange_l5さん

2017/11/1323:19:39

そのSQLインジェクションの標的になりそうなコードは一体なんだ?
PreparedStatement使え。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。