SAK 図書館
JAVA Servlet、JSP + PostgreSQL 編1 - JDBC 接続、問い合わせ、レコード参照
■J2SDK1.4.1 でのシフトJIS の扱い変更に伴う問題 ・JDBC で Oracle9i の文字データをアクセスすると記号文字「〜」、「−」 関係が ? になる。次のコード回避した。 PostgreSQL では時間がなく検証していないので注意のこと。 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 接続では、PostgreSQL や Oracle アクセスが同等にコードできる。 // 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 = "org.postgresql.Driver"; String dsn = "jdbc:postgresql://localhost:5432/sak?user=sak&password=sak"; String sql = "select * from testm"; 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 - PostgreSQL JDBC Test</TITLE>"); rw.println("</HEAD>"); rw.println("<BODY>"); rw.println("<P>JAVA Servlet - PostgreSQL JDBC Test</P>"); // PostgreSQL JDBC ドライバロード try { Class.forName(drv); } catch (Exception e) { rw.println("<P>JDBC ドライバロードエラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC 接続 try { cn = DriverManager.getConnection(dsn); } catch (Exception e) { rw.println("<P>JDBC 接続エラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC 問い合わせ SQL 作成 try { st = cn.createStatement(); } catch (Exception e) { rw.println("<P>JDBC 問い合わせ SQL 作成エラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC レコードセットオープン try { rs = st.executeQuery(sql); } catch (Exception e) { rw.println("<P>JDBC レコードセットオープンエラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC レコードセットリード try { while (rs.next()) { rw.println("<P>" + rs.getString(1) + "</P>"); } } catch (Exception e) { rw.println("<P>JDBC レコードセットリードエラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC レコードセットクローズ try { rs.close(); } catch (Exception e) {} // PostgreSQL JDBC ステートメントクローズ try { st.close(); } catch (Exception e) {} // PostgreSQL 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) - PostgreSQL JDBC Test</TITLE> </HEAD> <BODY> <P>JAVA Server Page(JSP) - PostgreSQL JDBC Test</P> <% String drv = "org.postgresql.Driver"; String dsn = "jdbc:postgresql://localhost:5432/sak?user=sak&password=sak"; String sql = "select * from testm"; Connection cn = null; Statement st = null; ResultSet rs = null; // PostgreSQL JDBC ドライバロード try { Class.forName(drv); } catch (Exception e) { out.println("<P>JDBC ドライバロードエラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC 接続 try { cn = DriverManager.getConnection(dsn); } catch (Exception e) { out.println("<P>JDBC 接続エラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC 問い合わせ SQL 作成 try { st = cn.createStatement(); } catch (Exception e) { out.println("<P>JDBC 問い合わせ SQL 作成エラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC レコードセットオープン try { rs = st.executeQuery(sql); } catch (Exception e) { out.println("<P>JDBC レコードセットオープンエラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC レコードセットリード try { while (rs.next()) { out.println("<P>" + rs.getString(1) + "</P>"); } } catch (Exception e) { out.println("<P>JDBC レコードセットリードエラー<BR>" + e.toString() + "</P>"); } // PostgreSQL JDBC レコードセットクローズ try { rs.close(); } catch (Exception e) {} // PostgreSQL JDBC ステートメントクローズ try { st.close(); } catch (Exception e) {} // PostgreSQL JDBC 接続クローズ try { cn.close(); } catch (Exception e) {} %> </BODY> </HTML> ■JAVA Servlet、JSP + PostgreSQL 編資料
■JAVA Servlet、JSP + Oracle9i 編資料
■JAVA Servlet、JSP 基礎編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料