- - PR -
クライアント(VB)サーバ(JAVA)について
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-11-09 23:06
サーバーのOS:AS400
クライアントのOS:WondowsXP クライアントからSQLをサーバーになげて サーバー側でSQLを受け取りDB検索を行い、結果をクライアントに返す ようにしたいのですが・・・。 SQLの結果は、サーバーのコンソール上に表示させると要求通りなのですが、 クライアントの画面に表示させることができません。 SQLをJAVAで認識できているので、文字コードの関係ないとは思うのですが、 その逆は無理なのかもしれませんね。 一応、両方のPGMを抜粋して載せてみますので、 どなたか意見を頂けると幸いです。 因みにクライアントがJAVAの場合は、意図した通り結果が返されます。 したがって、変更するとしたらクライアントのVBのプログラムを 変更する方向で考えています。 よろしくお願い致します。 *** サーバー(JAVA) *** //JDBCによるDB検索 public void execute() { try { // JDBCドライバのロード Class.forName("com.ibm.as400.access.AS400JDBCDriver"); // DB接続の作成 con = DriverManager.getConnection(url + system, user,password); // SQLコンテナの作成 Statement stmt = con.createStatement(); // SQL文の実行 ResultSet rs = stmt.executeQuery(in.readLine()); //方法1:表中のデータを特定のフィールドのみ取得する while(rs.next()) { item1 = rs.getString("IICONO"); item2 = rs.getString("IISUCL"); item3 = rs.getString("IIBUYE"); System.out.println("IICONO : " + item1 + " IISUCL:" + item2 + " IIBUYE:" + item3); result = "IICONO :" + item1 + " IISUCL:" + item2 + " IIBUYE:" + item3; //クライアントの画面に表示する場合 out.println(result); out.flush(); } *** クライアント(VB) *** Private Sub cmdSend_Click() Dim lngRet As Long '戻り値 Dim strSend As String '送信データ Dim strErrMsg As String 'エラーメッセージ Dim strRecv As String * 100 '受信データ Dim strRecvBuf As String '受信バッファ '送信 cmdSend.Enabled = False strErrMsg = "" strSend = txtSend.Text lngRet = send(mlngSock, ByVal strSend, Len(strSend), 0) If lngRet = SOCKET_ERROR Then strErrMsg = "send:" & strWSAErrorGet(WSAGetLastError()) closesocket mlngSock lngRet = WSACleanup() GoTo exitSend: End If '受信 strRecvBuf = "" Do While True DoEvents lngRet = recv(mlngSock, ByVal strRecv, 2000, 1) If (lngRet > 0) Then strRecvBuf = strRecvBuf & Left$(strRecv, lngRet) Exit Do ElseIf lngRet = SOCKET_ERROR Then If WSAGetLastError() > 0 Then strRecvBuf = "" strErrMsg = "send:" & strWSAErrorGet(WSAGetLastError()) closesocket mlngSock lngRet = WSACleanup() GoTo exitSend: Else Exit Do End If Else Exit Do End If Loop lstRecv.AddItem strRecvBuf cmdSend.Enabled = True exitSend: On Error Resume Next If strErrMsg <> "" Then MsgBox strErrMsg, vbOKOnly + vbExclamation, App.Title cmdConnect.Enabled = True End If Exit Sub End Sub | ||||
|
投稿日時: 2003-11-09 23:54
コードからはよくわかりませんが、Struts の Action に書かれたロジックをソケットプログラミングで呼び出すようなイメージでしょうか?それとも CGI でプロセスをキックしているのでしょうか?
VB はちとわかりませんが、切り分けのために DB を触らないシンプルなプログラムで試してみてはいかがでしょうか? #本質的には Java は関係なく、「VB からソケットより読み出した文字列を表示できない」、という問題のようにも見えます。 また、Statement/ResultSet/Connection オブジェクトを明示的にクローズすることをお勧めいたします。 #Connection オブジェクトは省略されている finally ブロックでクローズされているのかもしれませんが。 [ メッセージ編集済み 編集者: インギ 編集日時 2003-11-10 01:08 ] | ||||
|
投稿日時: 2003-11-10 09:29
文字コードを変更しても、何も表示されないのでしょうか?JAVAの時は表示されているのに、JAVAでないときに表示されないなんて、疑問です・・・・。データがクライアントにいっているようなので、何かしら表示されるような気もするのですが・・・。
| ||||
|
投稿日時: 2003-11-10 10:24
インギさん、begoodさん、ご意見有難うございます。
インギさんへ Struts の Action に書かれたロジックをソケットプログラミングで呼び出すようなイメージでしょうか?それとも CGI でプロセスをキックしているのでしょうか? この質問に関しては、まだまだ勉強不足で、質問の意味がよく分かりません。 申し訳ないです。 とりあえずは、DBを触らないシンプルなプログラムを試す方向で頑張ってみます。 Statement/ResultSet/Connection オブジェクトを明示的にクローズするのは、このロジックの記載したロジックの直後で行っています。 区切りの悪いところで切ってしまって、誤解を招いてしまいますよね・・・。 ご指摘有難うございます。 begoodさんへ 文字コードを変更するというのは、ロジック上のことでしょうか? それともクライアント側の画面を表示する場合に操作上で キーボードを使ってなにか行う必要があるのでしょうか? 今まで汎用系ばかりで、この1,2ヶ月でJAVAやVBやスレッドなどを 触ることになったので、見当違いな質問をしているかもしれませんが、 ご指摘よろしくお願いします。 | ||||
|
投稿日時: 2003-11-10 12:28
ロジック上でです。クライアント側で、キーボードやビューアー等で文字コード等を変更してみてもいいかとは思われますが、どこかで、データが文字コードによって完全にこけてしまっていた場合、あまり原因を探るのには良くないので・・・。VB側でなんかしら、文字コードをいじることできませんか?
| ||||
|
投稿日時: 2003-11-11 10:46
begoodさん、ご意見有難うございました。 就職の方もおめでとうございます。 その後、VB側で文字コードを変換して表示するように四苦八苦してみましたが、 まだまだ時間がかかりそうです。 この方法でもできるとは思うのですが、私のプログラミング能力が低くて・・・。 で、上司とも話し合った結果、 JAVA側でunicode→ShiftJisに変換してから結果を返す方法を探ることにしました。 ネット上で、逆のパターンのサンプルはよく見つけるのですが、 このパターンの文字コード変換サンプルはなかなか見つかりません。 どなたかご存知の方ご教授願います。 | ||||
|
投稿日時: 2003-11-11 11:42
逆のパターンとは、String#String(byte[] bytes, String charsetName) を使っていると思います。ということは、この逆は変換後のchar-set名を与えてbyte配列を取り出すということは予想できると思います。 この予想を元にAPIリファレンスのStringのページを探すと、String#getByte(String charsetName)というのが見つかると思います。 この2つのメソッドを使用することで、変換ルールさえ存在すれば、Unicodeを介した文字コード変換を実行することが可能になります。 文字コード変換に関して1つ注意点があります。 間発環境のバージョンが書かれていないため、どのバージョンを使用しているのかは分からないですが、1.4.0 -> 1.4.1でShift-JISの扱い方が変わったので、注意が必要です。 詳しくはこのへんが参考になるかな | ||||
|
投稿日時: 2003-11-11 12:16
かずくんさん、丁寧に説明して頂き有難うございます。
この説明ですんなり出来るかどうかは微妙ですが、挑戦はしてみます。
ちなみに、バージョン1.3です。多分、影響ないと思いますけど・・・。 | ||||
