米粒儿's profile-Rice Zone-PhotosBlogListsMore Tools Help
Photo 1 of 6
More albums (1)

-Rice Zone-

No Nicotine! No Alcohol!No Sex! Welcome to Hell!

开业大吉

  Broadcasting : Quiet Inside 2 - AndyTubman

二〇〇六年八月十日
PunkRice`s Blog has opened!

点此处留言
April 12

数据库表 to XML文件

既然是日志...啥都不说了 继续
首先说明下...这几段程序都是需要Jdom和mssqljdbc包的
AppConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<AppConfig>
 <DbConfig>
  <dbDriver>com.microsoft.jdbc.sqlserver.SQLServerDriver</dbDriver>
  <dbUrl>jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs</dbUrl>
  <dbUserName>sa</dbUserName>
  <dbUserPwd></dbUserPwd>
 </DbConfig>
 <XMLConfig>
  <table>employee</table>
  <cols>*</cols>
  <xmlpath>employee.xml</xmlpath>
 </XMLConfig>
</AppConfig>
---------------------------------------------------------------
ConDB.java
package aptech.xml;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.jdom.JDOMException;
public class ConDB {

    private static String driver;
    private static String url;
    private static String dbUser;
    private static String dbPwd;
    public ConDB() {
    }
    // 返回Connection对象
    public static Connection getConnection() throws JDOMException, IOException {
 Connection con = null;
 try {
     new ConfigApp().configDb();
     Class.forName(driver);
     con = DriverManager.getConnection(url, dbUser, dbPwd);
 } catch (ClassNotFoundException ex) {
     ex.printStackTrace();
 } catch (SQLException ex) {
     ex.printStackTrace();
 }
 return con;
    }
   
   
    public static String getDbPwd() {
 return dbPwd;
    }
    public static void setDbPwd(String dbPwdi) {
 dbPwd = dbPwdi;
    }
    public static String getDbUser() {
 return dbUser;
    }
    public static void setDbUser(String dbUseri) {
 dbUser = dbUseri;
    }
    public static String getDriver() {
 return driver;
    }
    public static void setDriver(String driveri) {
 driver = driveri;
    }
    public static String getUrl() {
 return url;
    }
    public static void setUrl(String urli) {
 url = urli;
    }
}
---------------------------------------------------------------
ConfigApp.java
package aptech.xml;
import java.io.IOException;
import java.util.Hashtable;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class ConfigApp {
    Element root;
    public ConfigApp() throws JDOMException, IOException {
 SAXBuilder builder = new SAXBuilder();
 Document doc = builder.build("AppConfig.xml");
 root = doc.getRootElement();
    }
    public void configDb() {
 String dbUser, dbPwd, url, driver;
 Element dbconfig = root.getChild("DbConfig");
 dbUser = dbconfig.getChildText("dbUserName");
 dbPwd = dbconfig.getChildText("dbUserPwd");
 url = dbconfig.getChildText("dbUrl");
 driver = dbconfig.getChildText("dbDriver");
 // 配置数据库Connection
 ConDB.setDriver(driver);
 ConDB.setUrl(url);
 ConDB.setDbUser(dbUser);
 ConDB.setDbPwd(dbPwd);
    }
    public Hashtable getXMLconfig() throws JDOMException, IOException {
 Hashtable<String, String> ht = new Hashtable<String, String>();
 Element xmlconfig = root.getChild("XMLConfig");
 ht.put("table",xmlconfig.getChildText("table"));
 ht.put("cols",xmlconfig.getChildText("cols"));
 ht.put("xmlpath",xmlconfig.getChildText("xmlpath"));
 return ht;
    }
}
 
------------------------------------------------------------------
DataBaseToXML.java
package aptech.xml;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class DataBaseToXML {
    /**
     * @throws IOException
     * @throws JDOMException
     * @throws IOException
     * @throws JDOMException
     * @throws SQLException
     * @throws SQLException
     */   
    String xmlfile;
   
    public void BuildXML() throws JDOMException, IOException, SQLException {
 Connection con = ConDB.getConnection();
 String table,cols;
 table = new ConfigApp().getXMLconfig().get("table").toString();
 cols = new ConfigApp().getXMLconfig().get("cols").toString();
 String sql = "select "+cols+" from "+table;
 PreparedStatement pstm = con.prepareStatement(sql);
 ResultSet rs = pstm.executeQuery();
 ResultSetMetaData rsmd = rs.getMetaData();
 int colsCount = rsmd.getColumnCount();
 Element root = new Element(table); 
 while(rs.next()) {
     Element row = new Element("row");
     root.addContent(row);
     for(int i = 1;i<=colsCount;i++) {
  String colName = rsmd.getColumnName(i);
  String colVal = rs.getString(i);
  Element col = new Element(colName);
  row.addContent(col);
  col.setText(colVal);
     }   
 }
 Document doc = new Document(root);
 
 Format format = Format.getCompactFormat();
        format.setEncoding("gb2312"); //设置xml文件的字符为gb2312
        format.setIndent("    "); //设置xml文件的缩进为4个空格
        XMLOutputter XMLOut = new XMLOutputter(format);//元素后换行一层元素缩四格
        xmlfile = new ConfigApp().getXMLconfig().get("xmlpath").toString();
       
        XMLOut.output(doc, new FileOutputStream(xmlfile)); 
 
    }
    public static void main(String[] args) throws JDOMException, IOException, SQLException {
 
 DataBaseToXML toXML = new DataBaseToXML();
 
 try {
     toXML.BuildXML();
     System.out.println("数据已成功写入到"+ toXML.xmlfile);
 } catch (JDOMException e) {
     e.printStackTrace();
 } catch (IOException e) {
     System.out.println("xml文件写入错误!"+e.getMessage());
 } catch (SQLException e) {   
     System.out.println("数据库链接错误!"+e.getMessage());
 } catch (Exception e) {
     e.printStackTrace();
 }
    }
}
-------------------------------------------------------------------
此程序通过在AppConfig.xml中配置数据库链接信息、所要提取解析表、列、目标xml文件实现数据库到xml的自动转换。
有需要的兄弟拿去吧,大米的地盘不收税!
April 11

我决定一不做二不休|在线列表实现

国际惯例,首先是
web.xml
<listener>
  <listener-class>accp.bbs.listeners.SessionCounter</listener-class>
 </listener>
 <session-config>
  <session-timeout>1</session-timeout>
</session-config>
--------------------------------没词儿了---------------------------
accp.bbs.listeners.SessionCounter
package accp.bbs.listeners;
import java.util.Hashtable;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import accp.bbs.beans.UserBean;
public class SessionCounter implements HttpSessionListener {
 
    //静态变量 用于存储<sessionid,当前session>
    static Hashtable<String, HttpSession> ht = new Hashtable<String, HttpSession>();
    //静态变量 用于存储<sessionid,当前登录用户>
    static Hashtable<String, UserBean> htonline = new Hashtable<String, UserBean>();
   
    //实现HttpSessionListener接口 有新session被创建时系统调用
    public void sessionCreated(HttpSessionEvent arg0) {
 HttpSession session = arg0.getSession();
 ht.put(session.getId(), session);
 // System.out.println("create session :" + session.getId());
 // System.out.println("当前在线:" + ht.size());
    }
    // 登录serlvet调用
    public void createSession(HttpSession session) {
 UserBean user = (UserBean) session.getAttribute("user");
 // String username = user.getUsername();
 if (!htonline.values().contains(user)) {
     htonline.put(session.getId(), user);
     // System.out.println("用户:"
     // + username
     // + "登录");
 }
    }
    //实现HttpSessionListener接口 session超时 被系统销毁时系统调用
    public void sessionDestroyed(HttpSessionEvent arg0) {
 HttpSession session = arg0.getSession();
 //System.out.println("destory session :" + session.getId());
 ht.remove(session.getId());
 htonline.remove(session.getId());
 // System.out.println("当前在线:" + ht.size());
    }
    // 登出servlet调用
    public void destroySession(HttpSession session) {
 UserBean user = (UserBean) session.getAttribute("user");
 if (htonline.values().contains(user)) {
     // System.out.println("用户:"
     // + user.getUsername()
     // + "登出");
     htonline.remove(session.getId());
     session.invalidate();
 }
    }
   
    //静态方法 返回当前session数量
    public static int sessionCount() {
 return ht.size();
    }
   
    //静态方法 返回当前登录用户数量
    public static int userCount() {
 return htonline.size();
    }
   
    //静态方法 返回当前登录用户集合
    public static UserBean[] getUsers() {
 UserBean users[] = new UserBean[userCount()];
 for (int i = 0; i < userCount(); i++) {
     users[i] = (UserBean) htonline.values().toArray()[i];
 }
 return users;
    }
}
--------------------------------------------------------------------
test.jsp
<%@page contentType="text/html; charset=GBK"
 import="accp.bbs.listeners.*"%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld"%>
<html>
 <head>
  <title>index</title>
 </head>
 <body bgcolor="#ffffff">
  当前在线:
  <%=SessionCounter.sessionCount()%>
  人
  <br />
  其中会员:
  <%=SessionCounter.userCount()%>
  人
  <br />
  在线列表:
  <br />
  <c:forEach items="<%=SessionCounter.getUsers()%>" var="user">
   ${user.username }&nbsp;&nbsp;
  </c:forEach>
 </body>
</html>
 
哦...还有登录、cookies和权限过滤器..算了 太多
 

JSP|XML|JDOM|Servlet

最近做项目,琢磨了个很有用的东西。来跟大家分享下!
我知道没人看...就当个人日记了...以后自己看
走着:
首先是web.xml
 <servlet>
    <description>服务器启动时运行Servlet以加载xml文件</description>
    <servlet-name>ConfigServlet</servlet-name>
    <servlet-class>accp.bbs.xml.ConfigServlet</servlet-class>
    <init-param>
     <param-name>configXML</param-name>
     <param-value>/WEB-INF/XML/accp_bbs.xml</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
 --------------------------------无敌分割线-----------------------------

accp.bbs.xml.ConfigServlet

package accp.bbs.xml;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import accp.bbs.db.ConDB;


public class ConfigServlet extends HttpServlet {

    public ConfigServlet() {
 super();
    }

    public void destroy() {
 super.destroy();
    }

    public void init() throws ServletException {
 try{
       initConfigXML();
     }catch(Exception e){
       e.printStackTrace();
     }
    }
   
    protected void initConfigXML() throws JDOMException, IOException{ 
 
 //从web.xml读取<init-param>元素值
 String configfile = getServletConfig().getInitParameter("configXML");
 //将<init-param>值指向的xml文件写入服务器内存
 InputStream input = getServletContext().getResourceAsStream(configfile);
 
 //jdom解析xml文件
 String dbUser,dbPwd,url,driver;
 SAXBuilder builder = new SAXBuilder();
 Document doc = builder.build(input);
 Element root = doc.getRootElement();
 dbUser = root.getChildText("dbUserName");
 dbPwd = root.getChildText("dbUserPwd");
 url = root.getChildText("dbUrl");
 driver = root.getChildText("dbDriver"); 
 //配置数据库Connection
 ConDB.setDriver(driver);
 ConDB.setUrl(url);
 ConDB.setDbUser(dbUser);
 ConDB.setDbPwd(dbPwd);
    }
}

----------------------------无敌分割线二号----------------------------

/WEB-INF/XML/accp_bbs.xml

<?xml version="1.0" encoding="UTF-8"?>
<accp_bbs>
 <dbDriver>com.microsoft.jdbc.sqlserver.SQLServerDriver</dbDriver>
 <dbUrl>jdbc:microsoft:sqlserver://localhost:1433;databasename=bbsDB</dbUrl>
 <dbUserName>accpbbs</dbUserName>
 <dbUserPwd>accpbbs</dbUserPwd>
</accp_bbs>

---------------------------无敌分割线终结版?-------------------------

accp.bbs.db.ConDB

package accp.bbs.db;

import java.sql.*;

public class ConDB {
 
    private static String driver ;

    private static String url;

    private static String dbUser;

    private static String dbPwd;

    public ConDB() {

    }

    // 返回Connection对象
 public static Connection getConnection() {
 Connection con = null;
 try {
     Class.forName(driver);
     con = DriverManager.getConnection(url, dbUser, dbPwd);
 } catch (ClassNotFoundException ex) {
     ex.printStackTrace();
 } catch (SQLException ex) {
     ex.printStackTrace();
 }
 return con;
 }

    public static void setDbPwd(String dbPwdi) {
 dbPwd = dbPwdi;
    }

    public static void setDbUser(String dbUseri) {
 dbUser = dbUseri;
    }

    public static void setDriver(String driveri) {
 driver = driveri;
    }

    public static void setUrl(String urli) {
 url = urli;
    }
}

---------------------------无敌分割线终结版---------------------------

我不信有人能看完...仅希望对以后的我有所帮助

---完

September 20

I`am alive...

只想告诉大家我还活着...
凤凰岭游记夭折了
后边的故事大家可根据第一章关键词随意想象,因为我也记不大清了
好了 我还得赶回到同学的问题世界里奔波 就这样吧反正也没几个人看
GL
August 22

记凤凰岭之行(贰)

上集提要:我、豆猫、小麦、高粱、小Q、贱蔡、贱蔡他媳妇儿一行七人在621胜利会师,进食后向大觉寺进发...
 
伴随着与我们探讨烤玉米奥秘的老太太,我们到了大觉寺山门,购置了6张20元1张10元
的门票(豆猫提心吊胆的使用道具"过期的人大学生证")后,我们站在了寺内,本该清幽
静雅的寺庙被周围的人来人往冲洗成另一番景象,而我第一反应就是——“厕所在哪?

排尽了污浊的浮华世俗,第一个引起我们关注的是住在“放生池”中的百十来之王八(也
有人说那是乌龟),不知为什么我怎么也不能停止为此池估价的行为,看来方才如厕时间
应该再长些。
 
To be continued...