﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-负人博客-随笔分类-JAVA技术</title><link>http://www.blogjava.net/cader/category/12828.html</link><description>要想负多生孩子少种树</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:51:01 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:51:01 GMT</pubDate><ttl>60</ttl><item><title>JSP中的上传下载</title><link>http://www.blogjava.net/cader/archive/2006/07/10/57528.html</link><dc:creator>负人博客</dc:creator><author>负人博客</author><pubDate>Mon, 10 Jul 2006 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/cader/archive/2006/07/10/57528.html</guid><wfw:comment>http://www.blogjava.net/cader/comments/57528.html</wfw:comment><comments>http://www.blogjava.net/cader/archive/2006/07/10/57528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cader/comments/commentRss/57528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cader/services/trackbacks/57528.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#006400">
						<strong>一    文件上传</strong>
				</font>
				<br />        文件上传的实现可以采用三方包commons-fileupload.jar，具体使用情况可参考：<br />        <a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=8025&amp;tstart=0&amp;quint=true">http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=8025&amp;tstart=0&amp;quint=true</a><br /><br /><font color="#006400"><strong>二    文件下</strong></font><font color="#000000">载<br />         很多时候需要从jsp（或xslt的查询结果）导出到excel或word，一个简单的方法是采用jsp实现，具体实现方式（以导出到excel为例）       <br />first.jsp(此jsp用来显示查询结果，上面有一个按钮，点击下载):<br />&lt;script language="javascript"&gt;<br />  function doExport(){<br />   document.all.form1.action="export.jsp";<br />    var str = document.getElementById("table1").outerHTML;<br />   document.all.excelText.value= str;<br />   document.all.form1.submit();<br />  }<br />&lt;script&gt;<br /> &lt;form name="form1" method="post" action=""&gt;<br />    &lt;input type="hidden" name="excelText" id="excelText" &gt;<br />   &lt;input name="exportBtn" type="button" onclick="doExport()" class="button" value="导出"&gt;<br />&lt;/form&gt;<br /><br /> &lt;table width="100%" id="table1" border="1" cellpadding="2" cellspacing="1" bordercolordark="#FFFFFF"&gt;<br />                            .............................这里面是具体需要导出去的数据<br />&lt;/table&gt;<br />export.jsp(执行导出操作)<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=GB2312"%&gt;<br />&lt;%<br /> String fileName="fileName";//随便定义，也可不定义<br /> response.setContentType( "Application;charset=GB2312");<br /> response.setHeader("Content-disposition","attachment;filename=\"" + fileName + "\";");<br /> java.io.PrintWriter bos = response.getWriter();<br /> String html = request.getParameter("excelText");<br /> bos.write(html);<br /> bos.close();<br />%&gt;<br />到此，文件导出操作完成，点击“导出”按钮即可出现保存对话框。<br />在做的过程中偶然碰到了一个问题，点击一次导出，可以顺利保存，点击第二次时出现脚本错误。<br />解决方法是在doExport()方法中指定document.all.form1.target = "_blank";这样可以顺利保存，但打开了一个新窗口。<br /><br /><br />另见：<br /><a href="http://gocom.primeton.com/modules/newbb/item6387_6387.htm?PHPSESSID=954fcc1380ffdda1e535081d4c049529">http://gocom.primeton.com/modules/newbb/item6387_6387.htm?PHPSESSID=954fcc1380ffdda1e535081d4c049529</a><br />  <br /> </font></p>
<img src ="http://www.blogjava.net/cader/aggbug/57528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cader/" target="_blank">负人博客</a> 2006-07-10 16:40 <a href="http://www.blogjava.net/cader/archive/2006/07/10/57528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Comparator接口</title><link>http://www.blogjava.net/cader/archive/2006/07/06/57009.html</link><dc:creator>负人博客</dc:creator><author>负人博客</author><pubDate>Thu, 06 Jul 2006 10:18:00 GMT</pubDate><guid>http://www.blogjava.net/cader/archive/2006/07/06/57009.html</guid><wfw:comment>http://www.blogjava.net/cader/comments/57009.html</wfw:comment><comments>http://www.blogjava.net/cader/archive/2006/07/06/57009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cader/comments/commentRss/57009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cader/services/trackbacks/57009.html</trackback:ping><description><![CDATA[
		<p>List的排序是经常遇到的问题，一般都是用一个实现了Comparator接口的类实现。<br />.比如我有一个Person类,<br />它的实例对象存储在ArrayList数组中,现在要把ArrayList数组中的Person对象按照年龄排序.<br />其实这种情况经常遇到.<br />下面给出源代码:</p>
		<p>1:Person.java文件:-------------------------------<br />public class Person{<br /> String name;<br /> int age;<br /> <br /> public Person(String name,int age){<br />  this.name = name;<br />  this.age = age;<br />  <br /> }</p>
		<p> public int getAge() {<br />  return age;<br /> }</p>
		<p> public void setAge(int age) {<br />  this.age = age;<br /> }</p>
		<p> public String getName() {<br />  return name;<br /> }</p>
		<p> public void setName(String name) {<br />  this.name = name;<br /> }</p>
		<p>}</p>
		<p>
				<br />2:Mycomparator.java-------------------------------<br />//实现Comparator接口,也就是定义排序规则,你几乎可以定义任何规则<br />import java.util.*;<br />public class Mycomparator implements Comparator{</p>
		<p> public int compare(Object o1,Object o2) {<br />  Person p1=(Person)o1;<br />  Person p2=(Person)o2;  <br />  if(p1.age&lt;p2.age)<br />   return 1;<br />  else<br />   return 0;<br /> }</p>
		<p>}</p>
		<p>3:ListSort.java------------------------------------</p>
		<p>import java.util.ArrayList;<br />import java.util.Collections;<br />import java.util.Comparator;</p>
		<p>public class ListSort {<br /> public static void main(String[] args){<br />  ArrayList list = new ArrayList();<br />  list.add(new Person("lcl",28));<br />  list.add(new Person("fx",23));<br />  list.add(new Person("wqx",29));<br />  Comparator comp = new Mycomparator();<br />  Collections.sort(list,comp);  <br />  for(int i = 0;i&lt;list.size();i++){<br />   Person p = (Person)list.get(i);<br />   System.out.println(p.getName());<br />  }  <br />  <br /> }</p>
		<p>}</p>
<img src ="http://www.blogjava.net/cader/aggbug/57009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cader/" target="_blank">负人博客</a> 2006-07-06 18:18 <a href="http://www.blogjava.net/cader/archive/2006/07/06/57009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java直连数据库小结</title><link>http://www.blogjava.net/cader/archive/2006/07/06/57008.html</link><dc:creator>负人博客</dc:creator><author>负人博客</author><pubDate>Thu, 06 Jul 2006 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/cader/archive/2006/07/06/57008.html</guid><wfw:comment>http://www.blogjava.net/cader/comments/57008.html</wfw:comment><comments>http://www.blogjava.net/cader/archive/2006/07/06/57008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cader/comments/commentRss/57008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cader/services/trackbacks/57008.html</trackback:ping><description><![CDATA[
		<p>一：取得数据库连接<br />   1.用DriverManager取数据库连接<br />    例子<br />      String className,url,uid,pwd;<br />      className = "oracle.jdbc.driver.OracleDriver";<br />      url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;<br />      uid = "system";<br />      pwd = "manager";<br />      Class.forName(className);<br />  Connection cn = DriverManager.getConnection(url,uid,pwd);<br />   2.通过JNDI取得数据库连接<br /> 用jndi(java的命名和目录服务)方式<br />   例子<br />      String jndi = "jdbc/db";<br />      Context ctx = (Context) new InitialContext().lookup("java:comp/env");<br />      DataSource ds = (DataSource) ctx.lookup(jndi);<br />      Connection cn = ds.getConnection();<br />二:执行sql语句<br /> 1.用Statement来执行sql语句<br />     String sql;<br />     Statement sm = cn.createStatement();<br />     sm.executeQuery(sql); // 执行数据查询语句（select）<br />     sm.executeUpdate(sql); // 执行数据更新语句（delete、update、insert、drop等）statement.close();<br />   2.用PreparedStatement来执行sql语句<br />     String sql;<br />     sql  = "insert into user (id,name) values (?,?)";<br />     PreparedStatement ps = cn.prepareStatement(sql);<br />     ps.setInt(1,xxx);<br />     ps.setString(2,xxx);<br />    ...<br />     ResultSet rs = ps.executeQuery(); // 查询<br />     int c = ps.executeUpdate(); // 更新<br />三:处理执行结果<br />   查询语句，返回记录集ResultSet<br />   更新语句，返回数字，表示该更新影响的记录数<br />   ResultSet的方法<br />    1、next()，将游标往后移动一行，如果成功返回true；否则返回false<br />    2、getInt("id")或getSting("name")，返回当前游标下某个字段的值<br />四:释放连接<br />  cn.close();<br />  一般，先关闭ResultSet，然后关闭Statement（或者PreparedStatement）；最后关闭Connection</p>
		<p>
				<br />可滚动、更新的记录集<br /> 1、创建可滚动、更新的Statement<br />  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);<br />  该Statement取得的ResultSet就是可滚动的<br /> 2、创建PreparedStatement时指定参数<br />  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);</p>
		<p>  ResultSet.absolute(9000);  <br />批量更新<br /> 1、Statement<br />  Statement sm = cn.createStatement();<br />  sm.addBatch(sql1);<br />  sm.addBatch(sql2);<br />  ...<br />  sm.executeBatch()<br />  一个Statement对象，可以执行多个sql语句以后，批量更新。这多个语句可以是delete、update、insert等或兼有<br /> 2、PreparedStatement<br />  PreparedStatement ps = cn.preparedStatement(sql);<br />  {<br />   ps.setXXX(1,xxx);<br />   ...<br />   ps.addBatch();<br />  }<br />  ps.executeBatch();<br />  一个PreparedStatement，可以把一个sql语句，变换参数多次执行，一次更新。</p>
		<p>  <br />事务的处理<br /> 1、关闭Connection的自动提交<br />  cn.setAutoCommit(false);<br /> 2、执行一系列sql语句<br />  要点：执行每一个新的sql语句前，上一次执行sql语句的Statement（或者PreparedStatemet）必须先close<br /> Statement sm ;<br /> sm = cn.createStatement(insert into user...);<br /> sm.executeUpdate();<br /> sm.close();</p>
		<p> sm = cn.createStatement("insert into corp...);<br /> sm.executeUpdate();<br /> sm.close();</p>
		<p> 3、提交<br />  cn.commit();<br /> 4、如果发生异常，那么回滚<br />  cn.rollback();<br /></p>
<img src ="http://www.blogjava.net/cader/aggbug/57008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cader/" target="_blank">负人博客</a> 2006-07-06 18:15 <a href="http://www.blogjava.net/cader/archive/2006/07/06/57008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解protected</title><link>http://www.blogjava.net/cader/archive/2006/07/06/57005.html</link><dc:creator>负人博客</dc:creator><author>负人博客</author><pubDate>Thu, 06 Jul 2006 10:13:00 GMT</pubDate><guid>http://www.blogjava.net/cader/archive/2006/07/06/57005.html</guid><wfw:comment>http://www.blogjava.net/cader/comments/57005.html</wfw:comment><comments>http://www.blogjava.net/cader/archive/2006/07/06/57005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cader/comments/commentRss/57005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cader/services/trackbacks/57005.html</trackback:ping><description><![CDATA[
		<p>对于protected关键字经常在使用中弄混，特写一小例进行测试<br />Protected方法或属性例子：</p>
		<p>
				<br />Package com.first;</p>
		<p>Public class Test1 {<br /> Protected String a;<br />Protected void test() {<br />  System.out.println(“it is a test”);<br />}<br />}<br />package com.second;<br />import com.first.*;<br />public class Test2 extends Test1 {<br /> Test1 test1 = new Test1();<br />Test2 test2 = new Test2();<br />test1.a = “test”;//错误<br />test2.a = “test”; //正确<br />test1.test();//错误<br />test2.test();//正确<br />}<br />///原因，protected定义的东西在不同包内不能访问，只有继承的子类可以访问</p>
<img src ="http://www.blogjava.net/cader/aggbug/57005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cader/" target="_blank">负人博客</a> 2006-07-06 18:13 <a href="http://www.blogjava.net/cader/archive/2006/07/06/57005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>属性文件的读取二法</title><link>http://www.blogjava.net/cader/archive/2006/07/06/57006.html</link><dc:creator>负人博客</dc:creator><author>负人博客</author><pubDate>Thu, 06 Jul 2006 10:13:00 GMT</pubDate><guid>http://www.blogjava.net/cader/archive/2006/07/06/57006.html</guid><wfw:comment>http://www.blogjava.net/cader/comments/57006.html</wfw:comment><comments>http://www.blogjava.net/cader/archive/2006/07/06/57006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cader/comments/commentRss/57006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cader/services/trackbacks/57006.html</trackback:ping><description><![CDATA[
		<p>1 Properties类直接读取属性文件<br /> <br />public class Test {<br /> public static void main(String[] args) {<br />  InputStream is = Test.class.getResourceAsStream("nojar.properties");<br />  if (is == null) <br />   System.out.println("文件找不到");<br />  Properties prop = new Properties();<br />  try {<br />   prop.load(is);<br />  } catch(Exception e) {<br />   e.printStackTrace();<br />  }<br />  System.out.println(prop.getProperty("test"));<br /> }<br />}<br />2 通过ResourceBundle读取属性文件</p>
		<p>public class Test {<br /> public static void main(String[] args) {<br />  ResourceBundle rb = ResourceBundle.getBundle("test");<br />  System.out.println(rb.getString("test"));<br /> }<br />}</p>
<img src ="http://www.blogjava.net/cader/aggbug/57006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cader/" target="_blank">负人博客</a> 2006-07-06 18:13 <a href="http://www.blogjava.net/cader/archive/2006/07/06/57006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>