米粒儿's profile-Rice Zone-PhotosBlogListsMore Tools Help

Blog


    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;
        }
    }

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

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

    ---完