SAK 図書館
JAVA Servlet、JSP + Oracle9i 編1 - JDBC 接続、問い合わせ、レコード参照
■J2SDK1.4.1 でのシフトJIS の扱い変更に伴う問題
・JDBC で Oracle9i の文字データをアクセスすると記号文字「〜」、「−」
関係が ? になる。次のコード回避した。
s = rs.getString(fld);
s = new String(s.getBytes("SJIS"), "MS932");
但し、UNIX-Tomcat + Windows-Oracle の組み合わせでは、getBytes を
使用すると逆におかしくなる。
UNIX-Tomcat + Windows-Oracle、Windows-Tomcat + Windows-Oracle 共通で
処理するには、次のように「〜」だけ特別な変換をするしかないのかも。
s = rs.getString(fld);
s = s.replace('\u301c', '\uff5e');
・charset= も以前の SJIS、Shift_JIS、iso-2022-jp は MS932 に
しないと記号文字関係が ? になる。
詳しくは、
JAVA Servlet、JSP 基礎編12 - Tomcat4.1.24、J2SDK1.4.1_02、web.xml
を参照下さい。
■JDBC 接続、問い合わせ、レコード参照(Servlet)
・JDBC 接続では、Oracle や PostgreSQL アクセスが同等にコードできる。
// test.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
import java.sql.*;
public class test extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
String drv = "oracle.jdbc.OracleDriver";
String dsn = "jdbc:oracle:thin:@localhost:1521:sak";
String sql = "select * from テストm";
Connection cn = null;
Statement st = null;
ResultSet rs = null;
// コンテンツタイプ指定
res.setContentType("text/html; charset=SJIS");
// HTML ヘッダ出力
PrintWriter rw = res.getWriter();
rw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">");
rw.println("<HTML>");
rw.println("<HEAD>");
rw.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">");
rw.println("<TITLE>JAVA Servlet - Oracle9i JDBC Test</TITLE>");
rw.println("</HEAD>");
rw.println("<BODY>");
rw.println("<P>JAVA Servlet - Oracle9i JDBC Test</P>");
// Oracle9i JDBC ドライバロード
try {
Class.forName(drv);
} catch (Exception e) {
rw.println("<P>JDBC ドライバロードエラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC 接続
try {
cn = DriverManager.getConnection(dsn, "sak", "sak");
} catch (Exception e) {
rw.println("<P>JDBC 接続エラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC 問い合わせ SQL 作成
try {
st = cn.createStatement();
} catch (Exception e) {
rw.println("<P>JDBC 問い合わせ SQL 作成エラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC レコードセットオープン
try {
rs = st.executeQuery(sql);
} catch (Exception e) {
rw.println("<P>JDBC レコードセットオープンエラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC レコードセットリード
try {
while (rs.next()) {
rw.println("<P>" + rs.getString(1) + "</P>");
}
} catch (Exception e) {
rw.println("<P>JDBC レコードセットリードエラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC レコードセットクローズ
try {
rs.close();
} catch (Exception e) {}
// Oracle9i JDBC ステートメントクローズ
try {
st.close();
} catch (Exception e) {}
// Oracle9i JDBC 接続クローズ
try {
cn.close();
} catch (Exception e) {}
// HTML テイル出力
rw.println("</BODY>");
rw.println("</HTML>");
}
}
■JDBC 接続、問い合わせ、レコード参照(JSP)
<%@ page import="java.util.*,java.sql.*;" contentType="text/html; charset=Shift_JIS"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>JAVA Server Page(JSP) - Oracle9i JDBC Test</TITLE>
</HEAD>
<BODY>
<P>JAVA Server Page(JSP) - Oracle9i JDBC Test</P>
<%
String drv = "oracle.jdbc.OracleDriver";
String dsn = "jdbc:oracle:thin:@localhost:1521:sak";
String sql = "select * from テストm";
Connection cn = null;
Statement st = null;
ResultSet rs = null;
// Oracle9i JDBC ドライバロード
try {
Class.forName(drv);
} catch (Exception e) {
out.println("<P>JDBC ドライバロードエラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC 接続
try {
cn = DriverManager.getConnection(dsn, "sak", "sak");
} catch (Exception e) {
out.println("<P>JDBC 接続エラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC 問い合わせ SQL 作成
try {
st = cn.createStatement();
} catch (Exception e) {
out.println("<P>JDBC 問い合わせ SQL 作成エラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC レコードセットオープン
try {
rs = st.executeQuery(sql);
} catch (Exception e) {
out.println("<P>JDBC レコードセットオープンエラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC レコードセットリード
try {
while (rs.next()) {
out.println("<P>" + rs.getString(1) + "</P>");
}
} catch (Exception e) {
out.println("<P>JDBC レコードセットリードエラー<BR>" + e.toString() + "</P>");
}
// Oracle9i JDBC レコードセットクローズ
try {
rs.close();
} catch (Exception e) {}
// Oracle9i JDBC ステートメントクローズ
try {
st.close();
} catch (Exception e) {}
// Oracle9i JDBC 接続クローズ
try {
cn.close();
} catch (Exception e) {}
%>
</BODY>
</HTML>
■JAVA Servlet、JSP + Oracle9i 編資料
■JAVA Servlet、JSP + PostgreSQL 編資料
■JAVA Servlet、JSP 基礎編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料