- PR -

JSPとサーブレットでデータベース更新処理

投稿者投稿内容
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-11 15:19
はじめまして。僕は今、JSPとサーブレットで顧客管理のシステムを作成しているのですが、わからない点が多々あるので良いアドバイスをいただけるとうれしいです。宜しくお願いします。
今DBの更新処理を作成しているのですが、SQLにつないでデータは更新できるのですがJSPの画面に戻りません。
更新処理のプログラムを作る前に、登録を作成したのですが、それはちゃんと動きます。
その登録のサーブレットをちょっといじって更新処理のサーブレットにしたのですが、だめです。どうもダンプを取って見ると、最後にディスパッチャする前で「NullPointer」で落ちているみたいなのです。
どうか良いアドバイスを宜しくお願いします。
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-11 15:21
続きです。(ソース)
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import java.util.*;
import mybeans.*;


public class kousin_servlet extends HttpServlet{

ServletContext sc = null;

String ID_No_SQL; // 社員コード
String Name_SQL; // 氏名
String Sex_SQL; // 性別
String Umare_SQL; // 生年月日
String Nyusya_SQL; // 入社期
String Bsyo1_SQL; // 所属1
String Bsyo2_SQL; // 所属2
String Bsyo3_SQL; // 所属3


private static final String CONTENT_YTPE = "text/html; charset=Shift_JIS";


public void init(ServletConfig config) throws ServletException{
super.init(config);
System.out.println("init");
}

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


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

ServletContext sc = getServletContext();

try{
response.setContentType("text/html; charset=Shift_JIS");
HttpSession session = request.getSession(true);

DBConnect3 dbc = new DBConnect3();
DataBean db = new DataBean();
SQL sql = new SQL();


//登録key取得→
setId(request.getParameter("ID_NO"));
setName(request.getParameter("name"));
setNyusya(request.getParameter("year"));
setSex(request.getParameter("sex"));
setUmare(request.getParameter("umare"));
setBsyo1(request.getParameter("busyo1"));
setBsyo2(request.getParameter("busyo2"));
setBsyo3(request.getParameter("busyo3"));


try{
sql.connectDB(dbc.oracle_open());

//新規登録
int r = sql.execUpdate(updateSQLForNAMEM());
System.out.println("更新件数 = " + r);
// sql.commit();
System.out.println("Update OK");

//検索
sql.execQuery(selectSQLForNAMEM());
System.out.println("Select OK");

int count = 0;

while(sql.fetch( SQL.FORWARD ))
{
System.out.println("while");

db.setData("SYAINCD"+Integer.toString(count) ,(String)sql.getData("SYAINCD"));
db.setData("FULLNAME"+Integer.toString(count) ,(String)sql.getData("FULLNAME"));
db.setData("KI"+Integer.toString(count) , sql.getData("KI"));
db.setData("SEX"+Integer.toString(count) ,Sex_henkan((String)sql.getData("SEX")));
db.setData("BIRTH"+Integer.toString(count) , Birth_henkan(sql.getData("BIRTH")));
db.setData("SYOZOKU1"+Integer.toString(count) ,Bsyo1_henkan((String)sql.getData("SYOZOKU1")));
db.setData("SYOZOKU2"+Integer.toString(count) ,Bsyo2_henkan((String)sql.getData("SYOZOKU2")));
db.setData("SYOZOKU3"+Integer.toString(count) ,Bsyo3_henkan((String)sql.getData("SYOZOKU3")));
count++;
System.out.println("count="+count);
}
db.setData("COUNT",Integer.toString(count));
request.setAttribute("db", db);
sql.Close();

}catch(SQLException ex)
{
System.out.println("DB Error1 : " + ex);


}catch(java.lang.Exception ex)
{
System.out.println("DB Error2 : " + ex);
// ex.printStackTrace();
}

//切断
dbc.oracle_close();

System.out.println("dbc.oracle_close();");
RequestDispatcher rd = sc.getRequestDispatcher("/jsp/kousin.jsp");
rd.forward(request,response);

}catch(Exception e)
{
System.out.println("kousin_servlet-catch = "+e);
e.printStackTrace();
}



}

//SQL文
//Update文(更新)
private String updateSQLForNAMEM(){
StringBuffer sb = new StringBuffer();
sb.append("UPDATE TTGSYAINM SET ");

if(!Name_SQL.equals("")){
sb.append(",FULLNAME='"+Name_SQL+"'");
}
if(!Nyusya_SQL.equals("")){
sb.append(",KI='"+Nyusya_SQL+"'");
}
if(!Umare_SQL.equals("")){
sb.append(",BIRTH='" + Umare_SQL + "'");
}
if(!Sex_SQL.equals("0")){
sb.append(",SEX='" + Sex_SQL + "'");
}
if(!Bsyo1_SQL.equals("0")){
sb.append(",SYOZOKU1='" + Bsyo1_SQL + "'");
}
if(!Bsyo2_SQL.equals("0")){
sb.append(",SYOZOKU2='" + Bsyo2_SQL + "'");
}
if(!Bsyo3_SQL.equals("0")){
sb.append(",SYOZOKU3='" + Bsyo3_SQL + "'");
}

sb.delete(21,22);

sb.append(" WHERE SYAINCD='" + ID_No_SQL + "'");

System.out.println("sb="+sb);

return sb.toString();
}


//Select文(検索)
private String selectSQLForNAMEM(){
StringBuffer sb = new StringBuffer();
sb.append("SELECT *");
sb.append(" FROM TTGSYAINM");
sb.append(" WHERE SYOZOKU1 = '" + Bsyo1_SQL + "'");
if(!ID_No_SQL.equals("")){
sb.append(" AND SYAINCD = '" + ID_No_SQL + "'");
}
if(!Name_SQL.equals("")){
sb.append(" AND FULLNAME = '" + Name_SQL + "'");
}
if(!Nyusya_SQL.equals("")){
sb.append(" AND KI = '" + Nyusya_SQL + "'");
}
if(!Umare_SQL.equals("")){
sb.append(" AND BIRTH = '" + Umare_SQL + "'");
}
if(!Sex_SQL.equals("0")){
sb.append(" AND SEX = '" + Sex_SQL + "'");
}
if(!Bsyo2_SQL.equals("0")){
sb.append(" AND SYOZOKU2 = '" + Bsyo2_SQL + "'");
}
if(!Bsyo3_SQL.equals("0")){
sb.append(" AND SYOZOKU3 = '" + Bsyo3_SQL + "'");
}

sb.append(" AND FULLNAME is not null AND SYOZOKU2 is not null ORDER BY SYAINCD,FULLNAME");

return sb.toString();
}

//登録KEYの取得2
//社員コード
public void setId(String s){
ID_No_SQL = s;
System.out.println("ID_No_SQL = "+ID_No_SQL);
}

//氏名
public void setName(String s){

String tmp;
String new_name = "";
if ((tmp = s) != null) {
try {
new_name = new String(tmp.getBytes("ISO_8859_1"), "Shift_JIS");
}
catch(UnsupportedEncodingException e){
/* エラー処理を記述する */
}
}else{
new_name =" null";
}

Name_SQL = new_name;

System.out.println("Name_SQL = "+Name_SQL);
}

//入社期
public void setNyusya(String s){
Nyusya_SQL = s;
System.out.println("Nyusya_SQL ="+Nyusya_SQL);
}

//生年月日
public void setUmare(String s){
Umare_SQL = s;
System.out.println("Umare_SQL ="+Umare_SQL);
}

//所属1
public void setBsyo1(String s){
Bsyo1_SQL = s;
System.out.println("Bsyo1_SQL ="+Bsyo1_SQL);
}

//所属2
public void setBsyo2(String s){
Bsyo2_SQL = s;
System.out.println("Bsyo2_SQL ="+Bsyo2_SQL);
}

//所属3
public void setBsyo3(String s){
Bsyo3_SQL = s;
System.out.println("Bsyo3_SQL ="+Bsyo3_SQL);
}

//性別
public void setSex(String s){

if(s.equals("1")){
Sex_SQL = "M";
}
else if(s.equals("2")){
Sex_SQL = "F";
}
else{
Sex_SQL = s;
}

System.out.println("Sex_SQL ="+Sex_SQL);

}



//性別(変換)
public String Sex_henkan(String sex){
String s;

if((sex).equals("M")){
s = "男";
}
else if((sex).equals("F")){
s = "女";
}
else{
s = sex;
}

return s;

}

//生年月日(変換)
public Object Birth_henkan(Object birth){

String s = new String (birth.toString());

StringBuffer umare_syousai = new StringBuffer();
umare_syousai.append(s.substring(0, 4));
umare_syousai.append("/");
umare_syousai.append(s.substring(4, 6));
umare_syousai.append("/");
umare_syousai.append(s.substring(6, );
String BirthDay = new String (umare_syousai.toString());

return BirthDay;
}

//所属1(変換)
public String Bsyo1_henkan(String busyo1){

String s;

if((busyo1).equals("01") ){
s = "東日本支店";
}
else if((busyo1).equals("02")){
s = "西日本支店";
}
else if((busyo1).equals("03")){
s = "北海道支店";
}
else{
s = busyo1;
}

return s;
}


//所属2(変換)
public String Bsyo2_henkan(String busyo2){

String s;

if((busyo2).equals("01")){
s = "ソリューション推進部";
}else if((busyo2).equals("02")){
s = "営業部";
}else if((busyo2).equals("03")){
s = "その他";
}else{
s = busyo2;
}

return s;

}


//所属3(変換)
public String Bsyo3_henkan(String busyo3){

String s;

if((busyo3).equals("01")){
s = "アプリケーションビジネス";
}else if((busyo3).equals("02")){
return "エクスチェンジサービス";
}else if((busyo3).equals("03")){
s = "コンテンツビジネス";
}else if((busyo3).equals("04")){
s = "流通ソリューション";
}else if((busyo3).equals("05")){
s = "特定サービス";
}else if((busyo3).equals("06")){
s = "ASPサービス";
}else if((busyo3).equals("07")){
s = "IPソリューション";
}else if((busyo3).equals("08")){
s = "インシュランスサービス";
}else if((busyo3).equals("09")){
s = "ファイナンシャルサービス";
}else if((busyo3).equals("10")){
s = "パブリックサービス";
}else if((busyo3).equals("11")){
s = "モバイルサービス";
}else if((busyo3).equals("12")){
s = "コミュニケーションサービス";
}else{
s = busyo3;
}

return s;
}

}
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-11 15:22
JSPのソースです。

<%@ page import = "mybeans.*" contentType="text/html;charset=Shift_JIS" %>
<jsp:useBean id= "db" scope="request" class="mybeans.DataBean" />


<HTML>
<HEAD>
<TITLE>更 新</TITLE>
</HEAD>

<BODY BGCOLOR="#FAFAD2">


<FORM NAME="DATA" METHOD="POST" ACTION="/examples/servlet/kousin_servlet" >

<TABLE border='0' WIDTH=100%'>

<TR>
<TD COLSPAN=3 ALIGN='left'><A HREF='' > 検索一覧</A></TD>
<TD COLSPAN=4 ALIGN='right'><A HREF=''>メニュー</A></TD>
</TR>

<TR>
<TD COLSPAN=7><HR></TD>
</TR>

<TR>
<TD COLSPAN=6 ALIGN='center'>
<TABLE border="1" bordercolor="#DEB887" bgcolor="#FAF0E6">
<TR>
<TH><FONT SIZE='5'>社員マスター更新</FONT></TH>
</TR>
</TABLE>
</TD>
<TD ALIGN='right'>
<INPUT TYPE="submit" NAME="kousin" VALUE="更新">
</TD>
</TR>



<TBODY>


<TR>
<TD>社員コード <%=request.getParameter("ID_NO")%></TD>
<INPUT TYPE='hidden' NAME='ID_NO' value='<%=request.getParameter("ID_NO")%>'>

<%

String str = new String(request.getParameter("inputName").getBytes("ISO_8859_1"), "Shift_JIS");

%>

<TD>氏名 <INPUT TYPE='text' NAME='name' MAXLENGTH='20' SIZE='20' STYLE="ime-mode:active" VALUE=<%=str%>></TD>

<TD>入社期 <INPUT TYPE='text' NAME='year' MAXLENGTH='2' SIZE='2' STYLE="ime-mode:inactive" VALUE=<%=request.getParameter("KI")%>></TD>
<TD>性別</TD>
<TD>
<SELECT NAME='sex' <%=request.getParameter("inputSex")%>>
<OPTION VALUE='0' SELECTED>
<OPTION VALUE='1'>男
<OPTION VALUE='2'>女
</SELECT>
</TD>
<TD>生年月日<INPUT TYPE='text' NAME='umare' MAXLENGTH='8' SIZE='10' STYLE="ime-mode:inactive" VALUE=<%=request.getParameter("inputBirth")%>></TD>
<TD ALIGN='right'>



</TD>
</TR>
<br>
<TR>
<TD>所属</TD>
<TD>(1)
<SELECT NAME='busyo1' <%=request.getParameter("inputSyo1")%>>
<OPTION VALUE='0' SELECTED>*必 須 項 目*</OPTION>
<OPTION VALUE='01'>東日本統括本部</OPTION>
<OPTION VALUE='02'>西日本支店</OPTION>
<OPTION VALUE='03'>北海道支店</OPTION>
</SELECT>
</TD>
<TD COLSPAN=2>(2)
<SELECT NAME='busyo2' <%=request.getParameter("inputSyo2")%>>
<OPTION VALUE='0' SELECTED>
<OPTION VALUE='01'>ソリューション推進部
<OPTION VALUE='02'>営業部
<OPTION VALUE='03'>その他
</SELECT>
</TD>
<TD COLSPAN=6>(3)
<SELECT NAME='busyo3' <%=request.getParameter("inputSyo3")%>>
<OPTION VALUE='0' SELECTED>
<OPTION VALUE='01' >アプリケーションビジネス
<OPTION VALUE='02' >エクスチェンジサービス
<OPTION VALUE='03' >コンテンツビジネス
<OPTION VALUE='04' >流通ソリューション
<OPTION VALUE='05' >特定サービス
<OPTION VALUE='06' >ASPサービス
<OPTION VALUE='07' >IPソリューション
<OPTION VALUE='08' >インシュランスサービス
<OPTION VALUE='09' >ファイナンシャルサービス
<OPTION VALUE='10'>パブリックサービス
<OPTION VALUE='11'>モバイルサービス
<OPTION VALUE='12'>コミュニケーションサービス
</SELECT>
</TD>
</TR>
</TABLE>



<!-- 初回表示時は出力しない-->
<% if (request.getParameter("kousin")!=null){ %>

<% int i;%>
<% int count = Integer.parseInt(db.getData("COUNT").toString()); %>
<% System.out.println("count"); %>
<% if(count > 0){ %>


<!------------------項目名-------------------------->
<TABLE border="1" width="100%" bordercolor="#DEB887" bgcolor="#FAF0E6" >
<TR>
<TD ALIGN='center' WIDTH='2%'> </TD>
<TD ALIGN='center' WIDTH='10%'>社員コード</TD>
<TD ALIGN='center' WIDTH='10%'>氏名</TD>
<TD ALIGN='center' WIDTH='7%'>入社期</TD>
<TD ALIGN='center' WIDTH='5%'>性別</TD>
<TD ALIGN='center' WIDTH='9%'>生年月日</TD>
<TD ALIGN='center' WIDTH='57%'>所属</TD>
</TR>

</TBODY>

<br>
<P>

<% for(i=0 ; i<count ; i++){ %>
<TR>


<TD ALIGN='center' WIDTH='2%'><INPUT TYPE='checkbox' NAME ='check1' onClick ='func()'></TD>
<TD ALIGN='center' WIDTH='10%'><%=db.getData("SYAINCD"+i)%></TD>
<TD ALIGN='center' WIDTH='10%'><%=db.getData("FULLNAME"+i)%></TD>
<TD ALIGN='center' WIDTH='7%'><%=db.getData("KI"+i)%></TD>
<TD ALIGN='center' WIDTH='5%'><%=db.getData("SEX"+i)%></TD>
<TD ALIGN='center' WIDTH='9%'><%=db.getData("BIRTH"+i)%></TD>
<TD ALIGN='center' WIDTH='57%'><%=db.getData("SYOZOKU1"+i)%>
<%=db.getData("SYOZOKU2"+i)%>
<%=db.getData("SYOZOKU3"+i)%></TD>



</TR>



<% } %>


<% }else{ %>

<TD colspan = '7'> 一致するデータがありません。</TD>
<% } %>



<% }else{ %>



<%}%>


</TABLE>


<SCRIPT language="JavaScript">
<!--
document.DATA.sex.selectedIndex=<%=request.getParameter("inputSex")%>;
document.DATA.busyo1.selectedIndex=<%=request.getParameter("inputSyo1")%>;
document.DATA.busyo2.selectedIndex=<%=request.getParameter("inputSyo2")%>;
document.DATA.busyo3.selectedIndex=<%=request.getParameter("inputSyo3")%>;

-->
</SCRIPT>
</FORM>

</BODY>
</HTML>
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-09-11 15:24
えーと、コードが長くて、よくわからないのですが、nullになっている変数はどれですか?
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-11 15:30
ありがとうございます。初めて一ヶ月の初心者です。言葉足らずですみません。
えっと。Nullになっているのは。
サーブレットのdoPostの中のキャッチで下のようにダンプを取った所、Java.lang〜NullPointerとエラーが出ていました。

何の変数がNullになっているのか僕は解りませんでした。

catch(java.lang.Exception ex){
  System.out.println("DB Error2 : " + ex);
  ex.printStackTrace();
}

宜しくお願いします。
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-11 15:44
ダンプを取ってみたのでそれも書いておきます。

java.lang.NullPointerException
at org.apache.jsp.kousin$jsp._jspService(kousin$jsp.java:104)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer
vlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
81)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDisp
atcher.java:683)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationD
ispatcher.java:431)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDis
patcher.java:355)
at kousin_servlet.doPost(kousin_servlet.java:113)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:247)
GON
常連さん
会議室デビュー日: 2002/09/03
投稿数: 28
お住まい・勤務地: 八王子
投稿日時: 2002-09-11 16:10
とりあえず全部読んでないのですがエラーを見るとJSPには飛んでいるようですね。
JSPでのNullPointerっぽいですね。
全部読んでないから間違っていたらすいません。
これから全部解読してみます。
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-11 16:15
GONさんありがとうございます。
ダンプを解読していただけるんでしょうか?

ダンプはまだつづきがあるのですが・・・

スキルアップ/キャリアアップ(JOB@IT)