電子書籍の厳選無料作品が豊富!

ある書籍を参考に勉強しております。以下のDAOクラスのデータ追加に関して使い方がわかりません。
サーブレット、もしくはJSPにどのように書けば、DBにデータを追加できるようになるのでしょうか?
宜しく御願い致します。

package chap11_database.sec03;

import java.sql.*;
import java.util.ArrayList;

public class EmployeeDAO {
//データベースとの接続に必要な情報を保持するフィールド変数
private final static String DRIVER_URL ="jdbc:mysql://192.168.2.200:3306/satoh" + "?useUnicode=true&characterEncoding=utf8";
private final static String DRIVER_NAME = "com.mysql.jdbc.Driver";
private final static String USER_NAME = "root";
private final static String PASSWORD = "1qaz!QAZ";

//接続メソッド
protected Connection createConnection(){
try{
Class.forName(DRIVER_NAME);
Connection con = DriverManager.getConnection(DRIVER_URL, USER_NAME, PASSWORD);
return con;
}
catch(Exception e){
e.printStackTrace();
}
return null;//例外が発生した場合はnullを返す。
}

//切断メソッド
protected void closeConnection(Connection con){
try{
con.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
public ArrayList<Employee> findAll(){
//社員一覧を保持するリスト
ArrayList<Employee> list = new ArrayList<Employee>();

Connection con = null;
try{
//データベースに接続
con = createConnection();

//データベースにSQL文を送信
String sql = "select * from employee";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String address = rs.getString("address");
int tel = rs.getInt("tel");
Date birthday = rs.getDate("birthday");
Employee employee = new Employee(id, name, address, tel, birthday);
//TO(Employeeオブジェクト)を、社員一覧を保持するリス手に追加
list.add(employee);
}
//社員一覧を返す。
return list;

}catch(Exception e){
e.printStackTrace();
return null;
}finally{
//データベースからの切断
closeConnection(con);
}
}

//社員登録メソッド
public void create(Employee emp){
Connection con = null;
try{
//データベースに接続
con = createConnection();

//データベースにSQL文を送信
String sql = "insert into employee values(?, ?, ?, ? ,?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1, emp.getId());
stmt.setString(2, emp.getName());
stmt.setString(3, emp.getAddress());
stmt.setInt(4, emp.getTel());
stmt.setDate(5, emp.getBirthday());
stmt.executeUpdate();

}catch(Exception e){
e.printStackTrace();
}finally{
//データベースからの切断
closeConnection(con);
}
}
}

A 回答 (2件)

こんばんわ、データの追加に関しての質問に絞っているので一覧表示はできたのでしょうか?



基本的に「public void create(Employee emp)」のメソッドがデータの追加のメソッドになりますので、データを持ったEmployee型のインスタンスを渡すだけでデータの追加になるはずです。

Employee emp = new Emplpyee();
emp.setId("1");
emp.setName("aa");
emp.setAddress("aa");
emp.setTel("090");
emp.setBirthday("00");

EmployeeDAO dao = new EmployeeDAO();
dao.create(emp);

こんな感じで大丈夫なはずです。

この回答への補足

一覧表示についてはできました。
そこまでは書籍に載っていたので。
早速助言いただいた方法を試してみます!!

補足日時:2007/05/08 01:11
    • good
    • 0
この回答へのお礼

以下のようにサーブレットから値を入力しようとしてみたのですが、emp.setBirthday(2562-11-24);のところで、引数がdateではありませんとエラーがでてしまいます。""や''でくくってみたのですが、ダメでした。どのようにすると解決するのでしょうか?


package chap11_database.sec03;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EmployeeInsertServlet extends HttpServlet{
//初期メソッド(社員一覧をapplicationスコープにセットします。)
public void init(){
Employee emp = new Employee();
emp.setId(14);
emp.setName("aa");
emp.setAddress("アドレスだよ");
emp.setTel("0804562");
emp.setBirthday(2562-11-24);


EmployeeDAO dao = new EmployeeDAO();
dao.create(emp);
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String nextPage = "/view/chap11_database/sec03/Insert.jsp";

ServletContext context = getServletContext();
RequestDispatcher rd = context.getRequestDispatcher(nextPage);
rd.forward(request, response);
}
}

お礼日時:2007/05/08 10:38

>emp.setBirthday(2562-11-24);のところで、引数がdateではありませんと



EmployeeクラスでsetBirtydayメソッドのパラメータがDate型で宣言されているためでしょう。

2562-11-24だとint扱いになっていると思いますが。
(2562マイナス11マイナス24で解釈されているはず)
※Javaの整数値リテラルはint型

で、Dateはオブジェクトなのでリテラル表記では表現できません。
ここではDateクラスのインスタンスを渡す必要があるはずです。

また、Dateクラスはjava.util.Dateとjava.sql.Dateがありますので、どちらを使うか間違えないようにしてください。

参考URL:http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/in …
    • good
    • 0
この回答へのお礼

ありがとうございました!
解決できました。
今回は取りあえずStringで値を渡しても、登録できたのでそれでいきます。

お礼日時:2007/05/08 20:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!