1. JSP フォーラムのデモテーブルの構造: - テーブル名: mybbslist
- フィールド データ型 説明
- BBSID自動番号付け
- RootID Int ルート投稿ID。ルート投稿の場合は、 RootID = ID
- FID Int 親投稿ID、前の投稿のID。ルート投稿の場合は、 FID = 0
- DEPTH Int ルートレベル= 0 、その他は応答の深さに応じて増加します
- BBS件名 文字 トピック
-
2. JSP フォーラムのテーブルを作成します。 - テーブル mybbslist を作成 (
- フォーラムID int(20) が null ではない、
- bbsID int auto_increment 主キー、
- rootid int(20) が null ではない、
- fid int(20) が null ではない、
- 深さ int(20) が null ではない、
- ユーザーID int(20) が null ではない、
- bbsUser varchar(24) が null ではない、
- bbsSubject varchar(100) が null ではありません。
- bbsコンテンツテキスト、
- bbsTime varchar(30)、
- bbsRead int(20)、
- bbs返信int(20),
- INDEX フォーラムID (フォーラムID))
-
3. JSP フォーラム: MYSQL データベースに接続するための Bean - パッケージ netzero;
- java.sql.* をインポートします。
- パブリッククラス mydb
- {
- 文字列driverName = "org.gjt.mm.mysql.Driver" ;
- 接続conn = null ;
- ステートメントstmt = null ;
- 結果セットrs = null ;
- 文字列connURL = "jdbc:mysql://localhost/mybbs?user=root&password=how&useUnicode=true&characterEncode=8859_1" ;
- //文字列connURL = "jdbc:mysql://localhost/netzerobbs?user=root&password=how" ;
- パブリック mydb()
- {
- 試す
- {
- クラス.forName(ドライバー名);
- }
- キャッチ (java.lang.ClassNotFoundException e)
- {
- System.err.println("netzero(文字列): " + e.getMessage());
- }
- }
-
- パブリックResultSet executeQuery(String sql)はSQLExceptionをスローします
- {
- conn = DriverManager.getConnection (connURL);
- stmt = conn.createStatement ();
- rs = stmt.executeQuery (sql);
- rs を返します。
- }
-
- パブリックブール値 closeConn()
- {
- 試す
- {
- rs!=nullの場合、rs.close();
- stmt!=null の場合、 stmt.close();
- conn!=null の場合、conn.close();
- true を返します。
- }
- キャッチ ( SQLException ex )
- {
- System.err.println("closeConn: " + ex.getMessage());
- false を返します。
- }
- }
-
- }
-
4. JSP フォーラム JavaScript/" target="_blank">フォーラムを表示する JSP プログラム - ﹤jsp:useBean id = "mybbs" スコープ= "セッション" クラス= "netzero.mydb" /﹥
- ﹤%@ ページのコンテンツタイプ= "text/html; charset=gb2312" %﹥
- ﹤%@ ページのインポート= "java.io.*" %﹥
- ﹤%@ ページのインポート= "java.sql.*" %﹥
- ﹤%
- int 行数;
- out.print("フォーラムのツリー構造を表示");
- out.print("﹤br﹥﹤br﹥");
- 試す {
- 文字列sql = "select * from mybbslist order by rootid desc,depth,fid,bbsid" ;
- 結果セットrs = mybbs.executeQuery (sql);
- rs.next() の場合
- {
- rs.last();
- rs.getRow ()は、行数を返します。
- out.print("フォーラムツリーにあります");
- out.print(intRowCount);
- out.print("リーフノード");
- rs.first();
- 整数j = 0 ;
- 深さ= 0 ;
- out.print("﹤ul﹥");
- while(j﹤intRowCount)
- {
- int rs rsDepth =rs.getInt("深さ");
- if (rsDepth﹤Depth)
- {
- for(int i = 1 ; i < 深さ + 1; i i = i + 1)
- {
- out.print("﹤/ul﹥");
- }
- }
- rs rsDepth =rs.getInt("深さ");
- if (rsDepth > 深さ)
- {
- out.print("﹤ul﹥");
- }
- out.print("﹤li﹥");
-
- 文字列bbssubject = rs .getString("bbssubject");
- out.print(bbssubject);
- out.print("﹤/li﹥");
- 深さ= rs.getInt ("深さ");
- j j =j+1;
- rs.next();
- }
- out.print("﹤/ul﹥");
- }
- それ以外
- {
- out.print("データベースにレコードがありません");
- }
- }キャッチ(SQLException E){
- out.println("SQLException: " + E.getMessage());
- out.println("SQLState: " + E.getSQLState());
- out.println("ベンダーエラー: " + E.getErrorCode());
- }
- %﹥
- ﹤% //mysql接続を閉じる
- 試す {
- if(!mybbs.closeConn());
- } catch (例外例) {
- System.err.println("closeConn: " + ex.getMessage());
- }
- %﹥
上記は実装した JSP フォーラムの具体的なアルゴリズムとツリー構造です。参考になれば幸いです。 |