Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

DAOパターンを使ってMySQLのレコードを出力したいが、できない。

Eclipse上で開発しております。Windows10を使用、プログラミング初心者です。

現在自身のプロジェクトでJSP&サーブレットを使用し、MySQLのレコードをコンソールに出力しようと
しているのですが上手くいきません。

先にエラーを乗せると、
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or in an application resource file: java.naming.factory.initial
    at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:685)
    at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
    at java.naming/javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:342)
    at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
    at dao.EmployeeDAO.findAll(EmployeeDAO.java:31)
    at servlet.SelectEmployeeSample.main(SelectEmployeeSample.java:13)
Exception in thread "main" java.lang.NullPointerException
    at servlet.SelectEmployeeSample.main(SelectEmployeeSample.java:16)

とでてきます。

以下現在使用しているファイルです。エラーが出ている行は★を付けています。
・SelectEmployeeSample.java

package servlet;

import java.util.List;

import dao.EmployeeDAO;
import model.Employee;

public class SelectEmployeeSample {
    public static void main(String[] args) {

        //employeeテーブルの全レコードを取得
        EmployeeDAO empDAO = new EmployeeDAO();
★       List<Employee> empList = empDAO.findAll();

        //取得したレコードの内容を出力
★     for(Employee emp : empList) {
            System.out.println("ID:" + emp.getId());
            System.out.println("名前:" + emp.getName());
            System.out.println("年齢:" + emp.getAge() + "\n");
        }
    }
}
-----------------------------------------------------------------
・EmployeeDAO.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import model.Employee;

public class EmployeeDAO {
    public List<Employee> findAll()  {

        //JDBCドライバーを使うための準備
        Connection con = null;
            PreparedStatement pStmt = null;
        ResultSet rs = null;

      //ArrayListインスタンスを作成
        List<Employee> empList = new ArrayList<Employee>();

        //例外をスローする可能性のある処理
        try {
          // データソースの取得
          Context context = new InitialContext();
★     DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/Jsp10");

          // データベースへ接続
          con = ds.getConnection();

          // SQLの実行
          pStmt = con.prepareStatement("SELECT id, name, age FROM EMPLOYEE");
          rs = pStmt.executeQuery();


         //結果表に格納されたレコードの内容をコンソールに表示
          while(rs.next()) {

              String id = rs.getString("ID");
              String name = rs.getString("NAME");
              int age = rs.getInt("AGE");
              Employee employee = new Employee(id, name, age);
              empList.add(employee);
          }

        } catch (Exception e) {
            e.printStackTrace();
            return null;

        } finally {
              if(con != null) {
            try {
              rs.close();
              pStmt.close();
              con.close();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
     }
        return empList;
    }
}
------------------------------------------------------------
・Employee.java

package model;

public class Employee {

    private String id;
    private String name;
    private int age;

    public Employee(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() { return id; }
    public String getName() { return name; }
    public int getAge() { return age; }

}
---------------------------------------------------------------

これは「スッキリわかるサーブレット&JSP入門」という教本に添って書いたのですが、
教本ではH2 Databaseを使用しているのに対し、私はもとからインストールしていた
MySQLをそのままと使おうとして、一部書き直したところ、エラーが出た感じです。

書いている感じでは、多分ArrayListとInitialContext,Contextメソッド辺りで何か
起きているのかなー思ったんですが、如何せん初心者のため一人では解決に至ることが出来ません。

実際に私と同じようなモデルを作成したことのある方など、いらっしゃいましたら
どうかご教示いただけませんでしょうか。宜しくお願い致します。

1

回答

90543

閲覧

1件の回答

評価

0

あのあとDriverManagerでデータベースに接続してみたところ上手く行きました!!

なぜ上記だと失敗したのかはまだ分かってないため、ご存知の方どうかご教示お願いいたします泣

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。