米粒儿's profile-Rice Zone-PhotosBlogListsMore ![]() | Help |
|
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 } </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 javax.servlet.ServletException; import org.jdom.Document; import accp.bbs.db.ConDB;
public ConfigServlet() { public void destroy() { public void init() throws ServletException { ----------------------------无敌分割线二号---------------------------- /WEB-INF/XML/accp_bbs.xml <?xml version="1.0" encoding="UTF-8"?> ---------------------------无敌分割线终结版?------------------------- accp.bbs.db.ConDB package accp.bbs.db; import java.sql.*; public class ConDB { private static String url; private static String dbUser; private static String dbPwd; public ConDB() { } // 返回Connection对象 public static void setDbPwd(String dbPwdi) { public static void setDbUser(String dbUseri) { public static void setDriver(String driveri) { public static void setUrl(String urli) { ---------------------------无敌分割线终结版--------------------------- 我不信有人能看完...仅希望对以后的我有所帮助 ---完 |
|
|