こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JSP データベースへの数回の接続

 いつもお世話になっております。

 今私は、JSPからデータベース(Access 2003)へデータを追加・検索をしようとしています。
 データベースにデータを追加するため、データベースを接続する記述及び追加をする記述を書き、データを追加していきます。
 その下の記述にHTMLが入り、HTML文の後に今度はデータベースに検索をかけてデータを取得し、その記述の下に更にHTML文を記述し取り込むといった流れでプログラムを書いております。
■HTML文
■データベース追加文
■HTML文
■データベース検索文
■HTML(データベースからの取得データもいれる)

 しかし、データベースへは、追加はされているのですが、検索の記述の部分がまったく読まれておらず、ジャンプされており、どうしても検索ができません。
 JSPからデータベースへの接続は初めてですので、わからないことも多く、もしかしたらJSPでは数回のデータベースへの接続はできないのかな?と思いながら、最終的にこちらで伺い参りました。
 プログラムが長いため、HTML文を除き、データベースの部分だけ下に記述させていただきます。その記述の中でのこの変数はどこからもってきているのかな?と思われる方もいらっしゃるかと思いますが、しっかり値が入っておりますので心配ございません。

<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.util.*" %>
<%@ page import="javax.servlet.*" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Calendar " %>

<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =null;
con = DriverManager.getConnection("jdbc:odbc:QUIZDB");

Statement sql;
sql = con.createStatement();

Calendar cal = Calendar.getInstance();
Integer nen=cal.get(Calendar.YEAR);
Integer tu=cal.get(Calendar.MONTH)+ 1;
Integer hi=cal.get(Calendar.DATE);

String userName=(String)session.getAttribute("userName");
Integer userId=(Integer)session.getAttribute("userId");
sql.executeUpdate( "INSERT INTO Seiseki(氏名,ID,ジャンル,正解数,クイズ日付)"+"values('"+userName+"','"+userId+"','"+aa+"','"+seikaiten+"','"+nen+"/"+tu+"/"+hi+"')");

sql.close();
%>

<■HTML文がはいります>

<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection db =null;
db = DriverManager.getConnection("jdbc:odbc:QUIZDB");

String sq = "select * from Seiseki where(氏名= '"+userName+"') and (ID = '"+userId+"')";
Statement st;
st = db.createStatement();
ResultSet res;
res = st.executeQuery(sq);
if(res.next()){
   String Name=res.getString(1);

   String Id=(String)res.getString(2);
   Integer id =Integer.parseInt(Id);

String jyanru=res.getString(3);

String seikai=res.getString(4);
int kazu =Integer.parseInt(seikai);

String hizu=res.getString(5);
}
st.close();
%>
<■HTML文が入り、変数を入れて表示させます>


以上となります。どんな小さなことでも構いませんので、お手数ですがアドバイス宜しくお願い申し上げます。

投稿日時 - 2008-01-28 09:06:08

QNo.3720605

すぐに回答ほしいです

質問者が選んだベストアンサー

ためしに、

sql.close();

の下に、

con.close();

を追加してみて下さい。

あと、以下のようにtry~catch文を使えば、自分一人でも何とか出来るようになるかと思われます。

try {

// ここに、SQLの実行などに関する記述を追加。

}catch(Exception e){
e.printStackTrace(); // エラーが起こった時などに、ログがはかれる。
}


今使用されている書籍の目次や索引などに、「アクション」とか「include」、「forward」などの記述がなかったら、もう何冊か必要かなあと。

参考URL:http://www.hellohiro.com/jspdb.htm

投稿日時 - 2008-01-29 07:37:42

お礼

ご回答ありがとうございます。
あなた様のおかげで、問題が解決いたしました。

ずばり、あなた様のご回答通りでした。
ただ、JSPのクラスを再度つくりなおしてから、上記の記述を足して
実行しみましたら、しっかり二度データベースへアクセスされていました。本当にありがとうございます。とても助かりました。

今後とも、アドバイス等よろしくお願い申し上げます。

投稿日時 - 2008-01-29 14:41:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

念のため、
   <■HTML文が入り、変数を入れて表示させます>
に含まれるJSPの部分(式等)を知らせてもらえますか。
--------------------------
たか

投稿日時 - 2008-01-29 00:37:08

お礼

補足を書かず申し訳ありませんでした。
上記の方のアドバイスをもとに、一度試してみたところ問題解決いたしました。親切に聞いてくださりありがとうございます。

あなた様の、知らせてもらえますか、の文からは、とても協力的な方で親切な方だと感じました。

なにぶん私は未熟者ですので、今後もアドバイス等をしてくださると助かります。何卒宜しくお願い申し上げます。

ありがとうございました。

投稿日時 - 2008-01-29 14:48:36

ANo.1

JSPはあくまでもViewテクノロジなので、JSPからこんなことをしないほうがよい(個々のクライアントアクセスのたびにDBコネクションを初期化するなんて!)。もっとちゃんとしたWeb開発の本を読むか、またはちゃんとした会社でちゃんとした訓練を受けてから、まともな構造のWebアプリケーションを書いてください。

投稿日時 - 2008-01-28 11:28:10

お礼

アドバイスありがとうございます。
JSPの参考書を読んでおりましたら、JSPでデータベースへアクセスしておりましたので、私のプログラム上便利だと思い記述しておりました。
私は学生で、まだ全然知識がありません。しかしこのような記述をしたことは大変なさけないことと感じております。
大変失礼いたしました。

しかし、どんな意見、アドバイスでも今の私のためになりますので、あなた様のアドバイスも感謝しております。

ありがとうございました。

投稿日時 - 2008-01-28 21:46:46

あなたにオススメの質問