質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • Java

    13148questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL

    2228questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • JVM

    15questions

    JVM(Java Virtual Machine)があれば、一連のコンピューターソフトウェアプログラムとデータストラクチャが、仮想マシンモデルを使って他のコンピュータプログラムやスクリプトを拡張できます。

SQL文の実行とデータの取り出し

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 688

pen_pen

score 1

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

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

// 受け取るデータの文字コードをUTF-8にセットする
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html:charset=UTF-8");
response.setCharacterEncoding("UTF-8");

// パラメーター"name"の値を取り出し、変数"name"に代入
String name = request.getParameter("name");
// パラメーター"code"の値を取り出し、変数"code"に代入
String code = request.getParameter("code");

// コンソールに表示する
System.out.println(name);
System.out.println(code);

try {
// Daoのコンストラクタの呼び出し
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");

// jdbc経由でデータベースに接続する
conn = DriverManager.getConnection(
"jdbc:oracle:thin:",
"", "");
}

// プリペアードステートメント宣言;
PreparedStatement pstmt = null;

// 重複チェックメソッド
public String checkAdd(String name) throws SQLException {

// データの重複チェック(商品名をDBから検索)
// SELECT文の作成。重複したデータがないか、既に登録されている商品名と比較する
String sql = "SELECT count(*) as checkItem " + " FROM T001_ITEM"
+ " WHERE ITEM_NM='" + name + "'";

pstmt = conn.prepareStatement(sql);

// SELECT文の実行
ResultSet resultSet = pstmt.executeQuery(sql);

// 結果取り出し
resultSet.next();
String kensaku = resultSet.getString("checkItem");

System.out.println(kensaku);
return kensaku;
}

// 商品登録メソッド
public int addItem(String code, String name, String price, String count)
throws ClassNotFoundException {
// SQL文を実行した件数を格納
int result = 0;
try {
// データベースに書き込むためのインサート文を記述
String sql = "INSERT INTO T001_ITEM(ITEM_NO,ITEM_NM,UNIT_PRICE,STOCK_COUNT)"
+ "VALUES(TABLE_SEQ.NEXTVAL,'"
+ name
+ "','"
+ price
+ "','" + count + "')";

System.out.println(sql);

pstmt = conn.prepareStatement(sql);

// SQL文を実行 1なら登録成功、0なら失敗
result = pstmt.executeUpdate();

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

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

// 商品コード検索(前方一致検),商品名検索(あいまいな検索)
// SELECT以下で出力したいデータを記述
// 今回の場合は4項目(コード、名前)
①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の宣言
③List<ItemBean> list = new ArrayList<ItemBean>();

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

// resultSetで返された結果を取得します
// ItemBeanのsetメソッドを使用して各値をセットする
⑥while (resultSet.next()) {

// 1件分の商品データを格納するItemBeanを宣言する
⑦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;

}
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • defghi1977

    2017/11/12 13:26

    >JAVASCRIPTで とありますが, Javaの間違いではないでしょうか?

    キャンセル

  • asahina1979

    2017/11/13 12:27

    コードは 「```」 ではさんでください。

    キャンセル

回答 1

checkベストアンサー

+1

例外が発生して、⑩⑤の前のcatchまで処理が飛んでいるのではないでしょうか。
そこのスタックトレースは出力されていませんでしょうか。
①のSQL文のT001_ITEMとWHEREの間にスペースが入っていないように見えますが、SQL文が間違えているのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13148questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL

    2228questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • JVM

    15questions

    JVM(Java Virtual Machine)があれば、一連のコンピューターソフトウェアプログラムとデータストラクチャが、仮想マシンモデルを使って他のコンピュータプログラムやスクリプトを拡張できます。