dポイントプレゼントキャンペーン実施中!

こんばんわ。
教えて頂きたいのですが、以下のjspを記述しましたが番号・名前・電話番号の項目表示のみで肝心のテーブル内容が表示されません。

何が原因かわからず困っています。
教えて下さい!お願い致します。

<%@page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%>
<%@page import="java.sql.*"%>
<%!
// サーブレットのinitメソッドに相当
public void jspInit() {
try {
// JDBCドライバをロード
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
%>

<html>
<head><title>テーブル_JSP版</title></head>

<body>
<P>データベース一覧</P>
<table border='1'><tr><th>番号</th><th>名前</th><th>電話番号</th></tr>

<%
// データベースへのアクセス開始
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
// データベースに接続するConnectionオブジェクトの取得
con = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Name","ID","PW");
// データベース操作を行うためのStatementオブジェクトの取得
stmt = con.createStatement();
// SQL()を実行して、結果を得る
rs = stmt.executeQuery(
"SELECT 番号, 名前, 電話番号 FROM Table");

// 得られた結果をレコードごとに表示
while (rs.next()) {
%>
<tr>
<%-- レコードのCUSTOMER_NUMフィールドを表示 --%>
<td><%= rs.getString("番号")%></td>
<%-- レコードのNAMEフィールドを表示 --%>
<td><%= rs.getString("名前")%></td>
<%-- レコードのPHONEフィールドを表示 --%>
<td><%= rs.getString("電話番号")%></td>
</tr>
<%
}

} catch (Exception e) {
e.printStackTrace();
} finally {
// データベースとの接続をクローズ
try { rs.close(); } catch (Exception e) {}
try { stmt.close(); } catch (Exception e) {}
try { con.close(); } catch (Exception e) {}
}
%>

</table>
</body>
</html>

A 回答 (12件中1~10件)

>ホスト に TCP/IP 接続できませんでした。


>java.net.ConnectException: Connection refused: connect

のエラーということはSQLServerへの接続が上手くいっていないようです。
プログラムの動き的には
>con = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Name","ID","PW");
上記の行で例外が発生し50行目のcatchで例外が拾われていると思われます。
まずは、この接続設定が本当に正しいか確認してください。

接続設定が正しいとするとSQLServer側の問題かもしれません。
このメッセージで検索したところ、参考URLのページが該当しましのたでご一読ください。

ここからはプログラム側の話でなく、SQLServer側の話になりますので
もし解決に至らないようであればSQLServerのカテゴリで質問した方が良いと思います。
※ARIA9はSQLServerは素人です・・・・

参考URL:http://www.javaroad.jp/bbs/answer.jsp?q_id=20061 …
    • good
    • 0
この回答へのお礼

ARIA9さま

ありがとうございます☆

SQLServerの1433ポートは空いていたので
localhostの部分をSQLServerのIPアドレス+1433で繋がりました!

本当にありがとうございます♪
感謝致します!

最後に1点だけよろしいでしょうか?

SQL構文に日本語が入ると文字化けでエラーになるのですが
これは"jdbc:sqlserver://localhost;DatabaseName=Name","ID","PW");
の部分に何か記述が必要なのでしょうか?

この部分だけお願いします!

お礼日時:2007/04/13 19:04

定かであありませんが


pageEncoding="Shift_JIS"を
pageEncoding="Windows-31J"

または上記を省略した上で
contentType="text/html; charset=Shift_JIS"を
contentType="text/html; charset=Windows31-J"
に変更すれば可能性はあると
思います。

参考URL:http://www.atmarkit.co.jp/fjava/rensai3/mojibake …

この回答への補足

fortranxpさま

ありがとうございます!
月曜日になりますがさっそくチャレンジしてみます☆

補足日時:2007/04/14 21:04
    • good
    • 0
この回答へのお礼

fortranxpさま

pageEncoding="Windows-31J"でしっかり表示されました!

長くご丁寧にご教授頂きまして本当にありがとうございます☆

感謝いたします♪

お礼日時:2007/04/16 20:46

No.1です



>SQL構文に日本語が入ると文字化けでエラーになるのですが
>これは"jdbc:sqlserver://localhost;DatabaseName=Name","ID","PW");
>の部分に何か記述が必要なのでしょうか?

これについてもエラー内容がわかれば記述して頂けませんでしょうか。
ただ、エラーが起きるといわれてもわかりません。

文字化けということですが、具体的になにが文字化けするのでしょう。

例えば、記述されている下記SQLが
SELECT 番号, 名前, 電話番号 FROM Table
下記のように(?かどうかはわかりませんが)化けるためSQLエラーになるということでしょうか?
SELECT ????, ????, ???????? FROM Table

もし、こういうことでしたらjspのjavaEncodingとプログラムの文字コードが一致していないためだと思います。

ちょっと文字化けするとだけ書かれても判りかねますので
もう少し情報を頂けませんか?

この回答への補足

ARIA9さま

度々申し訳ありません。
文字化けのエラーは解消されました。

SQL接続が成功した後に変えたプログラムの記述に誤りがありました・・・

エラーは出ないのですが<table border='1'>から始まる項目に「電話番号(1)」があるとしますとそれが「電話番号@」とかになります。

これはしょうがないのでしょうか?
度々で申し訳ありませんがご教授下さいませ。

補足日時:2007/04/13 23:36
    • good
    • 0
この回答へのお礼

ARIA9さま

この度はご丁寧にご教授頂きました事、とても感謝致します!

勉強不足ですのでこれからまだまだ頑張りたいと思います☆

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

お礼日時:2007/04/16 20:48
    • good
    • 0
この回答へのお礼

fortranxpさま

ありがとうございます☆
URL参考になりました!

SQLServerのIPアドレスをlocalhostに記述した所、表示されました。

助かりました!
ほんとうにありがとうございました♪

お礼日時:2007/04/13 19:07

No.1です



>エラーはTomcatのLogにて確認致しました。
ExceptionのprintStackTraceメソッドは標準出力となりますので
通常、Tomcatで定義しているログには残りません。

なお、その画面は残念ながらコンパイルエラーになっています。

>out.write(e.get.Message());
getの後ろのピリオドは不要です。

>C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\wl_jsp\org\apache\jsp\test_005fJdbcCustomerTable_jsp.java:19: シンボルを解決できません。
>シンボル: 変数 out
>場所 : org.apache.jsp.test_005fJdbcCustomerTable_jsp の クラス
>out.write(e.get.Message());

追加する場所を間違えています。
51行目のe.printStackTrace()の下に追加してください。

それがわかるように
} finally { ←を明示しておいたのですが・・・
ちょっとわかりにくかったかもしれませんね。
最初から行番号を提示すれば良かったです。すいません。

この回答への補足

ARIA9さま

教えて頂いている立場なのに・・・
こちらこそ分からず申し訳ありませんでした。

おっしゃる通り記述した所、このメッセージがブラウザに表示されました。

ホスト に TCP/IP 接続できませんでした。
java.net.ConnectException: Connection refused: connect

宜しくお願い致します。

補足日時:2007/04/13 15:46
    • good
    • 0

No.1です



<table border='1'><tr><th>番号</th><th>名前</th><th>電話番号</th></tr>
→ ここがループ内の処理になりますので、少なくともwhileループ内には到達していません。
</table>

やはりtry{}catch(){}の途中で例外があがっているように思います。
例外が出ていないというのは何をもって確認しました?
Exceptionのスタックトレースがコンソールにでていないことは確認しましたか?

ためしに

catch (Exception e) {
e.printStackTrace();
} finally {

のe.printStackTrace();の下に

out.write(e.getMessage());

を追加してみてください。
これで例外が発生していればブラウザ上にエラーメッセージが表示されますので
そちらの内容を回答に補足してください。

この回答への補足

ARIA9さま

ありがとうございます。

エラーはTomcatのLogにて確認致しました。


おっしゃる通り記述した所、以下のエラーがでました。

2007-04-13 12:56:15 StandardWrapperValve[jsp]: サーブレット jsp のServlet.service()が例外を投げました
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません

JSPファイル: /test_JdbcCustomerTable.jsp の中の3行目でエラーが発生しました
生成されたサーブレットのエラーです:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\wl_jsp\org\apache\jsp\test_005fJdbcCustomerTable_jsp.java:19: シンボルを解決できません。
シンボル: 変数 get
場所 : java.lang.Exception の クラス
out.write(e.get.Message());
^


JSPファイル: /test_JdbcCustomerTable.jsp の中の3行目でエラーが発生しました
生成されたサーブレットのエラーです:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\wl_jsp\org\apache\jsp\test_005fJdbcCustomerTable_jsp.java:19: シンボルを解決できません。
シンボル: 変数 out
場所 : org.apache.jsp.test_005fJdbcCustomerTable_jsp の クラス
out.write(e.get.Message());
^
エラー 2 個

お手数をお掛けしまして申し訳ありませんがお願いいたします。

補足日時:2007/04/13 12:59
    • good
    • 0
この回答へのお礼

何度もすみません。
Tomcatのstdout.logというテキストに以下のメッセージがありました。

関係ありますでしょうか?

com.microsoft.sqlserver.jdbc.SQLServerException: ホスト に TCP/IP 接続できませんでした。

宜しくお願い致します。

お礼日時:2007/04/13 14:22

jspInit(){}


をはずしたらどうなりますか?
そもそもこれはJSP変換後サーブレットに

なったときに現れるメソッドみたいで
JSPを初期化してしまうみたいです。

この回答への補足

fortranxpさま

ありがとうございます☆

なるほど!そうなのですか?
明日、試してみます♪

ありがとうございます!!

補足日時:2007/04/12 20:57
    • good
    • 0
この回答へのお礼

fortranxpさま

jspInit(){}を外してみましたが同じ結果でした。。。

お礼日時:2007/04/13 09:56

No.1です



>ちなみにaccessでODBCリンクしたmdbを見にいく場合は
>パスを指定する必要があるのでしょうか?

とのことですが、プログラムを見る限りJDBCは直接SQLServerに繋ぎにいっていますよね。
ということは少なくともプログラム側でmdbにアクセスする必要はまったくないと思うのですが。

プログラム側からmdbを経由する必要があるとすると
SQLServer←ODBCリンク←mdb←ODBC設定しておいてODBC-JDBCブリッジドライバ←プログラムからコールになったと思いますが・・・

この回答への補足

ARIA9さま

ご回答ありがとうございます☆
なるほど!

明日、もう1度チャレンジしてみます。
ありがとうございます♪

補足日時:2007/04/12 20:55
    • good
    • 0
この回答へのお礼

ARIA9さま

お世話になっております。
ブラウザ表示中にソースを見たらこんな感じでした。

これってテーブル内容表示まで行ってないのでしょうか?
宜しくお願い致します。

<html>
<head><title>テーブル_JSP版</title></head>

<body>
<P>データベース一覧</P>
<table border='1'><tr><th>番号</th><th>名前</th><th>電話番号</th></tr>



</table>
</body>
</html>

お礼日時:2007/04/13 09:55

SQLserver2000 JDBCドライバーを


WEB-INF\libに配置してますか?

http://www.microsoft.com/japan/msdn/sqlserver/do …

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/do …

この回答への補足

fortranxpさま

ありがとうございます☆

SQLserver2005なのでマイクロソフトのHPより
ダウンロードして配備されております。

よろしくお願い致します。

補足日時:2007/04/12 17:07
    • good
    • 0

No.1です



>もう1点ご教授頂きたいのですが、これはODBCを通じて直接SQLServerへ見に行っているのでしょうか?

すいません。SQLServerは詳しくないので詳細はわかりかねます。
要は、そもそもDBのテーブルにレコードが無ければ
無いものは取れないわけで、Java側の問題かどうか切り分けるために、
JavaからではなくDBの中身を確認した方が良いんではないかということです。

なのでaccessでODBC接続を使用してSQLServerに接続するのでも構いませんし、
質問者様が普段使われているツールがあるのでしたらそれでも構いません。

この回答への補足

ARIA9さま

ありがとうございます☆
確かめた所、確かにテーブルにレコードはあるのですが・・・

一度、問題を切り分けて調べてみたいと思います。
ちなみにaccessでODBCリンクしたmdbを見にいく場合は
パスを指定する必要があるのでしょうか?
記述の場所が分からないので申し訳ありません。

何度もすみません。

補足日時:2007/04/12 17:02
    • good
    • 0

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