米粒儿'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) { ---------------------------无敌分割线终结版--------------------------- 我不信有人能看完...仅希望对以后的我有所帮助 ---完 September 20 I`am alive...只想告诉大家我还活着...
凤凰岭游记夭折了
后边的故事大家可根据第一章关键词随意想象,因为我也记不大清了
好了 我还得赶回到同学的问题世界里奔波 就这样吧反正也没几个人看
GL August 22 记凤凰岭之行(贰)上集提要:我、豆猫、小麦、高粱、小Q、贱蔡、贱蔡他媳妇儿一行七人在621胜利会师,进食后向大觉寺进发...
伴随着与我们探讨烤玉米奥秘的老太太,我们到了大觉寺山门,购置了6张20元1张10元
的门票(豆猫提心吊胆的使用道具"过期的人大学生证")后,我们站在了寺内,本该清幽
静雅的寺庙被周围的人来人往冲洗成另一番景象,而我第一反应就是——“厕所在哪?
”
排尽了污浊的浮华世俗,第一个引起我们关注的是住在“放生池”中的百十来之王八(也 有人说那是乌龟),不知为什么我怎么也不能停止为此池估价的行为,看来方才如厕时间
应该再长些。
To be continued... 记凤凰岭之行坐在电脑前,马克思累了我不累,毛泽东困了我不困,周恩来睡了我不睡,我是个不知疲倦的程序员。
刚刚兴致勃勃的写完因凤凰岭之旅搁浅的代码,看了豆猫的博客就怎么也困不起来了。 那些注定只能闭口不谈的事儿只能默默祈祷,她能像我一样,不去思考。 我想,现在唯一能使我不去思考并尽快找回久违的睡意的事儿就是把令我们个个疲惫不堪的凤凰岭之行记录下来。 Aug 19 2006 关键词:酷热、酒精、大觉寺、路没完没了的路、车耳营村儿、聚福庄、小姐、麻将大 叔、红烧苍蝇、杀人游戏、噪音、梦
一大早儿收拾了自己和行李耐着高温与暴晒与豆猫携手来到了久违的621,那儿除了温二门 口夸张的电子宣传栏一切都还是老样子 —— 如行尸走肉般游荡在街上的人来人往
与621众相约在原六子儿烤串吃临行前最后的午餐,就差跟丫娶一媳妇儿的小麦(年度悲情人 物),原来他很行的高粱与让他觉得不很行的小Q,621淫娃贱蔡与代号贱蔡他媳妇儿的厦
门小姑娘已悉数到场,于是,凤凰岭特别行动小分队在此会师了
酒足饭饱,我们朝直达大觉寺的原903车站进发了,怕到了山里买不到正宗小蒙古与便宜
软红河我在所里烟酒专卖备齐了弹药。
在车站晒了近半个小时后我们终于扛不住了,向苦口婆心劝我们打车的我看着眼熟的黑
司机投降了,兵分两路向大觉寺进发,路上与司机交谈得知另一小队的我看着眼熟眼熟
司机同志乃高里掌人士,冥冥之中感觉到此高里掌人士与我家非亲即友,好不后悔搭错
了车。
大家还没纳过闷,车已抵达目的地,操,这么近?!?
To be continued...
“听说经常坐在电脑前会由于受辐射的原因而导致携带Y染色体的精子大量死亡,所以生女孩的概率很大,这么说我们做程序员的岂不是都要绝后了?!!!
PS:这可不是空穴来风啊,偶MM是建筑师,她说他们设计院里的男同事基本都生了女儿,生儿子的概率只有2%,偶好怕怕的说!!! ” Java论坛里看到的...我赶紧睡了先
August 15 javax.swing.JTextArea读取与存储文件JTextArea中存在着两个非常方便的方法,void read(Reader in, Object desc)与void write(Writer out),通过这两个方法,可以很方便
的通过JTextArea对象对文件进行读取和存储,并保证不会发生恼人的换行符变"黑方块"问题,使用时只需注意这两个方法都抛出IOException,
您要做的仅仅是勤快点接着try...catch一下或者干脆抛给操作系统即可。
下面举个例子以方便理解: …… /* * editor为框架类的对象 * openedFile为静态File类对象 */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("打开")) { try { JFileChooser chooser = new JFileChooser(); /* 秀出令人兴奋的文件选择窗口,点击确定返回一个整数 */ int num = chooser.showOpenDialog(editor); /* * ok,上边返回的整数派上用场了 JFileChooser.APPROVE_OPTION常量存储着确定按钮对应的整数 */ if (num == JFileChooser.APPROVE_OPTION) { openedFile = chooser.getSelectedFile(); // 找到被选文件信息 } /* * FileReader的爷爷是抽象类Reader 也许写成Reader fr=new * FileReader(xxx)更容易理解下面的read(fr,null); */ FileReader fr = new FileReader(openedFile); /* * 别问我为啥第二个参数为null,源代码中属性名字面解释为"目标文档描述" * getTxa()为找到框架类中JTextArea的方法 */ editor.getTxa().read(fr, null); fr.close(); } catch (FileNotFoundException fnfe) { // FileReader抛出的异常 JOptionPane.showMessageDialog(editor, fnfe.getMessage()); } catch (IOException ioe) { // read方法抛出的异常 JOptionPane.showMessageDialog(editor, ioe.getMessage()); } }
/* * 下边就不难理解了吧?*/ if (e.getActionCommand().equals("保存")) { try { FileWriter fw = new FileWriter(openedFile); editor.getTxa().write(fw); fw.close(); JOptionPane.showMessageDialog(editor, "文件已保存!"); } catch (IOException e1) { JOptionPane.showMessageDialog(editor, e1.getMessage()); } } if (e.getActionCommand().equals("关闭")) { System.exit(0); } } } …… August 14 First Love Letter
August 12 Core Java 2 书评(我没闹)Core Java 2分为Volume I与Volume II两卷,都属于近700页的“贵”“重”品,但其内容之翔实,叙述层次之清晰使之成为有一定面向对象基础者初学Java之不2选择(Thinking in Java 不很适合初学者参考)。 虽然网友普遍评论此书翻译质量不佳,译者也在书序中提到水平有限、时间仓促望批评指正(实际上没有文献敢不这么写的),但还是推荐大家购买中文版,您英文水平再牛叉面对一个个专有名词与叙述复杂逻辑的复杂语句能不冒汗?毕竟对母语的理解与纠错能力还是每个人类都最擅长的。 Volume I : Fundamentals(基础知识) 第7版针对上6个版本中所有代码向 JDK 5.0进行了全面更新,并极力展示泛型集合、for each循环等等一些令人兴奋的JDK 5.0特性。 此书前言中一段话说得很真诚也很有助于读者最快速的了解此书能为自己带来什么,废话不多说,现摘抄如下:(如果你只对我的文字感兴趣,靠,锚不能用。跳过略浅颜色的字吧) …… 和本书的前几版一样,我们仍然把读者群定位在那些打算将Java应用到实际项目中的严谨的程序设计人员。我们仍然确保本书不会出现令人沮丧的文字以及莫名其妙的字符。本书假设读者是一名具有程序设计语言坚实背景知识的程序设计人员。 …… 我们假定读者想要: * 编写实际的代码来解决实际问题。 * 不希望本书中全部是玩具是样例。 在本书中,我们用大量的例子代码演示所讨论的每一种语言和库的特性。我们有意识用简单的实力程序以突出重点,然而,它们中的大部分既不是赝品也没有偷工减料。(翻译确实不太…)它们将成为读者自己编写代码的良好开端。 我们假定读者想要: 我就是被这些话的诚意所吸引才斥巨资添置此书的…希望你也能被此打动(声明:我与机械工业出版社、PEARSON Education、本书作者、译者无任何干系)进入到令人愉快的Java世界中。 说点我发现的书中比较有意思的地方吧,如果这样还不能打动你的话。 * P30 第3章在展示第一个Hello World程序(业内标准…指用一门语言在屏幕上输出Hello World!字样,通常是学习一门语言第一个看到的程序,通常不超过3行代码)时,甚至书中所有包括Hello World字样的程序,作者都是这样写的: Public class FirstSample{ Public static void main(String[] args){ System.out.println(“We will not use ‘Hello World!’”);//is this so cute? } }
妈的翻半天没找着,但绝对还有类似Kuso程序,先玩会儿去 累了 未完待续… Blog究竟是干嘛的Blog究竟是干嘛的? 现在大家都在用博客做什么? 出了名写博客的不管会不会写字儿全在做秀,都是在拼了命为自己的人气加分,而对名人来讲人气又与金钱成正比,所以可以认为他们开博是一种投资肉体投资口水投资,当然这种投资风险及成本是很低的。我确信我不需要做这种勾当。 没出名会写字儿的与Blog就像是干柴烈火,老实说我很羡慕他们。 我是属于没出名又不会写字儿那种,那我该用键盘在TextArea中敲点什么,拼字儿的活咱是说什么也干不了的,贴画儿也算了,没条件。唯一剩下的,就是其最原始的个人日记功能了,不需要太多天花乱坠的词儿与条例清晰的脉络连接,一篇篇真真切切的生活感悟与学习笔记是我最希望与大家分享的。 好。 现在,我只想好好地说说话,跟你们分享我的成就和失败。 我们都是一个个有七情六欲的人,说点真话,学点真东西,无碍我们真正的享乐生活。 August 11 Ok ok, 我承认我妥协了(留言板)
|
|
|