ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

エンジニア相談所(java、web)コミュのMySQLを利用してのDBとの通信方法について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
MySQLを利用してのDBとの通信方法についてご教授ください。

作成ボタン押下時にDBに値を書き込むようにしたいです。
どのようにしたらいいでしょうか?


javaソース、JSPは以下のようにしました。
web.xmlについても変更が必要でしょうか?


---------------------------------------------------
<%@page language="java" %>
<%@page contentType="text/html;charset=EUC-JP" %>
<%@page pageEncoding="EUC-JP" %>
<%@page import="monndai.PageChangeBean1"%>
<%@page import="monndai.ParamId" %>

<%
request.setCharacterEncoding("EUC-JP");
String returnPath0 = null;
%>

<%
PageChangeBean1 pageChangeBean1 = (PageChangeBean1) request.getAttribute(ParamId.FORM_BEAN);
String monshoNum = pageChangeBean1.getMonshoNum();
String title = pageChangeBean1.getTitle();
String date = pageChangeBean1.getDate();
String hakken = pageChangeBean1.getHakken();
String target = pageChangeBean1.getTarget();
String hasseikasho = pageChangeBean1.getHasseikasho();
String event = pageChangeBean1.getEvent();
String testNum = pageChangeBean1.getTestNum();
String mondainaiyou = pageChangeBean1.getMondainaiyou();
String kaisekisha = pageChangeBean1.getKaisekisha();
String margeKaisekiDate = pageChangeBean1.getMargeKaisekiDate();
String mondaibunrui = pageChangeBean1.getMondaibunrui();
String mihakkenriyuu = pageChangeBean1.getMihakkenriyuu();
String hakkenkoutei = pageChangeBean1.getHakkenkoutei();
String kaisekinaiyou = pageChangeBean1.getKaisekinaiyou();
String taishosha = pageChangeBean1.getTaishosha();
String margeTaishoDate = pageChangeBean1.getMargeTaishoDate();
String taishonaiyou = pageChangeBean1.getTaishonaiyou();
String kakuninsha = pageChangeBean1.getKakuninsha();
String margeKakuninDate = pageChangeBean1.getMargeKakuninDate();
String kakuninnaiyou = pageChangeBean1.getKakuninnaiyou();

%>

<html>
<head>
<script language="JavaScript">
<!--
function sendRequest(path) {
document.newFileInputDataCheck.action = path;
document.newFileInputDataCheck.submit();
}

function pageBack(){
history.back();
}

-->

</script>
</head>
<title>新問処チェック</title>
<body>
<form name="newFileInputDataCheck" onSubmit="true" method="POST" enctype="multipart/form-data">

<div align="left">
<h1>新問処チェック</h1>
<br>

<table border="1">
<tr><th width=150>問処番号</th>
<td width=100>
<%=monshoNum%>
</td></tr>
</table>
<br>


<table border="1">
<tr><th width=150>タイトル</th>
<td width=450>
<%=title%>
</td></tr>
</table>
<br>


(((中略)))


<table border="1">
<tr><th width=150>確認内容</th>
<td width=450>
<%=kakuninnaiyou%>
</td></tr>
</table>
<br>



<%
returnPath0 = "sendRequest('/mondai/Monsyo_NewFileResultServlet')";
%>
<br>
<input type="button" value="作成"onClick="<%= returnPath0 %>"/>
<input type="button" value="戻る"onClick="pageBack()"/>


</div>

</form>
</body>
</html>

---------------------------------------------------
package monndai;

import java.io.IOException;

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

public class Monsyo_NewFileInputDataCheck extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.setCharacterEncoding("EUC-JP");
res.setContentType("text/html;charset=EUC-JP");
RequestDispatcher reqDis = null;
try {


String monshoNum = null;
String title = null;
String date = null;
String hakken = null;
String target = null;
String hasseikasho = null;
String event = null;
String testNum = null;
String mondainaiyou = null;
String kaisekisha = null;
String kaisekiDate1 = null;
String kaisekiDate2 = null;
String kaisekiDate3 = null;
String mondaibunrui = null;
String mihakkenriyuu = null;
String hakkenkoutei = null;
String kaisekinaiyou = null;
String taishosha = null;
String taishoDate1 = null;
String taishoDate2 = null;
String taishoDate3 = null;
String taishonaiyou = null;
String kakuninsha = null;
String kakuninDate1 = null;
String kakuninDate2 = null;
String kakuninDate3 = null;
String kakuninnaiyou = null;


monshoNum= req.getParameter("monshoNum");
title= req.getParameter("title");
date= req.getParameter("date");
hakken= req.getParameter("hakken");
target= req.getParameter("target");
hasseikasho= req.getParameter("hasseikasho");
event= req.getParameter("event");
testNum= req.getParameter("testNum");
mondainaiyou= req.getParameter("mondainaiyou");
kaisekisha= req.getParameter("kaisekisha");
kaisekiDate1= req.getParameter("kaisekiDate1");
kaisekiDate2= req.getParameter("kaisekiDate2");
kaisekiDate3= req.getParameter("kaisekiDate3");
mondaibunrui= req.getParameter("mondaibunrui");
mihakkenriyuu= req.getParameter("mihakkenriyuu");
hakkenkoutei= req.getParameter("hakkenkoutei");
kaisekinaiyou= req.getParameter("kaisekinaiyou");
taishosha= req.getParameter("taishosha");
taishoDate1= req.getParameter("taishoDate1");
taishoDate2= req.getParameter("taishoDate2");
taishoDate3= req.getParameter("taishoDate3");
taishonaiyou= req.getParameter("taishonaiyou");
kakuninsha= req.getParameter("kakuninsha");
kakuninDate1= req.getParameter("kakuninDate1");
kakuninDate2= req.getParameter("kakuninDate2");
kakuninDate3= req.getParameter("kakuninDate3");
kakuninnaiyou= req.getParameter("kakuninnaiyou");


PageChangeBean1 pageChangeBean1 = new PageChangeBean1();

pageChangeBean1.setMonshoNum(monshoNum);
pageChangeBean1.setTitle(title);
pageChangeBean1.setDate(date);
pageChangeBean1.setHakken(hakken);
pageChangeBean1.setTarget(target);
pageChangeBean1.setHasseikasho(hasseikasho);
pageChangeBean1.setEvent(event);
pageChangeBean1.setTestNum(testNum);
pageChangeBean1.setMondainaiyou(mondainaiyou);
pageChangeBean1.setKaisekisha(kaisekisha);
pageChangeBean1.setKaisekiDate1(kaisekiDate1);
pageChangeBean1.setKaisekiDate2(kaisekiDate2);
pageChangeBean1.setKaisekiDate3(kaisekiDate3);
pageChangeBean1.setMargeKaisekiDate();
pageChangeBean1.setMondaibunrui(mondaibunrui);
pageChangeBean1.setMihakkenriyuu(mihakkenriyuu);
pageChangeBean1.setHakkenkoutei(hakkenkoutei);
pageChangeBean1.setKaisekinaiyou(kaisekinaiyou);
pageChangeBean1.setTaishosha(taishosha);
pageChangeBean1.setTaishoDate1(taishoDate1);
pageChangeBean1.setTaishoDate2(taishoDate2);
pageChangeBean1.setTaishoDate3(taishoDate3);
pageChangeBean1.setMargeTaishoDate();
pageChangeBean1.setTaishonaiyou(taishonaiyou);
pageChangeBean1.setKakuninsha(kakuninsha);
pageChangeBean1.setKakuninDate1(kakuninDate1);
pageChangeBean1.setKakuninDate2(kakuninDate2);
pageChangeBean1.setKakuninDate3(kakuninDate3);
pageChangeBean1.setMargeKakuninDate();
pageChangeBean1.setKakuninnaiyou(kakuninnaiyou);



req.setAttribute(ParamId.FORM_BEAN , pageChangeBean1);


//表示JSP決定
reqDis = req.getRequestDispatcher("/jsp/Monsyo_newFileInputDataCheck.jsp");

//Beanのをクリア
pageChangeBean1 = null;

//forward
reqDis.forward(req,res);


} catch (Exception e) {
System.out.println("err");
e.printStackTrace();
req.setAttribute("exception", e);
reqDis = req.getRequestDispatcher("/jsp/error.jsp");
reqDis.forward(req, res);
}
}
}

---------------------------------------------------

コメント(10)

下記にDBアクセス処理のサンプルを示しますね。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

/**
 * DB にアクセスするための API を提供します。
 */
public class DBAccessor {

    //DB への接続です。
    private Connection connection;

    /**
     * DBAccessor を構築します。
     * @throws SQLException SQL例外が発生した場合
     * @throws ClassNotFoundException クラスが見つからない場合
     */
    protected DBAccessor() throws SQLException, ClassNotFoundException {
        startTransaction();
    }

    /**
     * DBAccessor を構築します。
     * @param connection DB接続
     */
    protected DBAccessor(Connection connection) {
        this.connection = connection;
    }
    /**
     * DB への接続を行います。
     * @throws SQLException SQL例外が発生した場合
     * @throws ClassNotFoundException クラスが見つからない場合
     */
    protected void startTransaction() 
            throws SQLException, ClassNotFoundException {
        if (connection != null && !connection.isClosed()) {
            return;
        }
        ResourceBundle config = ResourceBundle.getBundle("config");
        Class.forName(config.getString("db.driver"));
        
        String url = config.getString("db.url");
        String user = config.getString("db.user");
        String password = config.getString("db.password");
        
        connection = DriverManager.getConnection(url, user, password);

        connection.setAutoCommit(false);
    }

    /**
     * DB への接続を返します。
     * @return DB への接続
     * @throws SQLException SQL例外が発生した場合
     */
    protected void endTransaction() throws SQLException {
        if (connection != null && !connection.isClosed()) {
            connection.rollback();
            connection.close();
        }
        connection = null;
    }
    
    /**
     * DB への接続を返します。
     * @return DB への接続
     */
    protected Connection getConnection() {
        return connection;
    }
    
}
下記を config.properties というファイル名で保存し、をクラスパス上に置く。

# JDBC の設定
db.driver=com.mysql.jdbc.Driver
#useUnicodeは設定によっては不要です。
db.url=jdbc:mysql://DBサーバーのIPアドレス/DB名?useUnicode=true&characterEncoding=EUC_JP
db.user=DBのユーザー名
db.password=DBのパスワード
/*
 * file name : SampleDao.java
 * create    : 2008/09/04
 */

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

import DBAccessor;

/**
 * サンプルの DAO です。
 */
public class SampleDao extends DBAccessor {

    /**
     * SampleDao を構築します。
     * @param connection DB接続
     */
    public SampleDao(Connection connection) {
        super(connection);
    }

    /**
     * 名前を保存します。
     * @param name 名前
     * @return 成功した場合、true
     * @throws SQLException DB例外が発生した場合
     */
    public void save(String name) throws SQLException {
        Connection connection = getConnection();
        PreparedStatement statement = null;
        try {
            statement = connection.prepareStatement(
                    "INSERT INTO sample(name) VALUES(?)");
            statement.setString(1, name);
            if (statement.executeUpdate() > 0) {
                return true;
            } else {
                return false;
            }
        } finally {
            if (statement != null) {
                statement.close();
            }
        }
    }
}
呼び出し例を下記に示します。

SampleDao sampleDao = null;
try {
    sampleDao = new SampleDao();
    sampleDao.save("保存する文字列");
    sampleDao.getConnection().commit();
} finally {
    if (sampleDao != null) {
        sampleDao.endTransaction();
    }
}
とりあえず Connection Pooling も使用しない、最もシンプルな例を挙げてみました。
Servlet 側のクラスから DB 処理を呼び出す形が良いと思います。
なぜ処理を jsp に書かないのかという理由に関しては、MVC パターンと一般的に言われるものを調べてみるとわかりやすいと思います。
>ひろさん

ご教授ありがとうございます。


DBAccessor.javaとSampleDao.javaを作成し、4でコメントいただいた内容を
config.propertiesという名前で保存してクラスパス上におけばいいということでしょうか?
そうですね。
上記は DB アクセスのサンプルなので、実際のアプリの機能に合わせて修正して使ってみて下さい。
DBAccessor クラスと config.properties は DB 処理の際に再利用できるものですので、バグ報告(?)を保存する機能なのであれば、BugReport クラスを作成して、BugReport を保存する BugReportDAO クラスを作成する形になりますね。

サンプルには処理しか書いていませんので、各メソッド呼び出しが何を意味するのかは、jdk の API リファレンス(http://java.sun.com/javase/ja/6/docs/ja/api/)を参考に見てみて下さい。
API リファレンスが読め、内容を理解できるようになる事が、開発業務では必須になると思いますので、ぜひ読めるようになり、辞書代わりに使えるようになる事を勧めます。
(丸移しでも動くかもしれませんが、応用が利かないので、学生のテストであればそれでもいいかもしれませんが、業務で活用されるのであれば、あまり意味無いですから。)
読んでみたけど、ここの内容の書いている意味がわからない。という場合は、再度ご質問下さい。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

エンジニア相談所(java、web) 更新情報

エンジニア相談所(java、web)のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング