List的排序是經常遇到的問題,一般都是用一個實現了Comparator接口的類實現。
          .比如我有一個Person類,
          它的實例對象存儲在ArrayList數組中,現在要把ArrayList數組中的Person對象按照年齡排序.
          其實這種情況經常遇到.
          下面給出源代碼:

          1:Person.java文件:-------------------------------
          public class Person{
          ?String name;
          ?int age;
          ?
          ?public Person(String name,int age){
          ? this.name = name;
          ? this.age = age;
          ?
          ?}

          ?public int getAge() {
          ? return age;
          ?}

          ?public void setAge(int age) {
          ? this.age = age;
          ?}

          ?public String getName() {
          ? return name;
          ?}

          ?public void setName(String name) {
          ? this.name = name;
          ?}

          }


          2:Mycomparator.java-------------------------------
          //實現Comparator接口,也就是定義排序規則,你幾乎可以定義任何規則
          import java.util.*;
          public class Mycomparator implements Comparator{

          ?public int compare(Object o1,Object o2) {
          ? Person p1=(Person)o1;
          ? Person p2=(Person)o2;?
          ? if(p1.age<p2.age)
          ?? return 1;
          ? else
          ?? return 0;
          ?}

          }

          3:ListSort.java------------------------------------

          import java.util.ArrayList;
          import java.util.Collections;
          import java.util.Comparator;

          public class ListSort {
          ?public static void main(String[] args){
          ? ArrayList list = new ArrayList();
          ? list.add(new Person("lcl",28));
          ? list.add(new Person("fx",23));
          ? list.add(new Person("wqx",29));
          ? Comparator comp = new Mycomparator();
          ? Collections.sort(list,comp);?
          ? for(int i = 0;i<list.size();i++){
          ?? Person p = (Person)list.get(i);
          ?? System.out.println(p.getName());
          ? }?
          ?
          ?}

          }

          posted @ 2006-07-06 18:18 負人博客 閱讀(1210) | 評論 (0)編輯 收藏

          一:取得數據庫連接
          ?? 1.用DriverManager取數據庫連接
          ?? ?例子
          ??? ??String className,url,uid,pwd;
          ??? ??className = "oracle.jdbc.driver.OracleDriver";
          ?? ? ?url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;
          ??? ??uid = "system";
          ??? ??pwd = "manager";
          ???? ?Class.forName(className);
          ??Connection cn = DriverManager.getConnection(url,uid,pwd);
          ?? 2.通過JNDI取得數據庫連接
          ?用jndi(java的命名和目錄服務)方式
          ? ?例子
          ??? ??String jndi = "jdbc/db";
          ??? ??Context ctx = (Context) new InitialContext().lookup("java:comp/env");
          ??? ??DataSource ds = (DataSource) ctx.lookup(jndi);
          ??? ??Connection cn = ds.getConnection();
          二:執行sql語句
          ?1.用Statement來執行sql語句
          ?? ??String sql;
          ?? ??Statement sm = cn.createStatement();
          ?? ??sm.executeQuery(sql); // 執行數據查詢語句(select)
          ?? ??sm.executeUpdate(sql); // 執行數據更新語句(delete、update、insert、drop等)statement.close();
          ? ?2.用PreparedStatement來執行sql語句
          ?? ??String sql;
          ?? ??sql? = "insert into user (id,name) values (?,?)";
          ?? ??PreparedStatement ps = cn.prepareStatement(sql);
          ?? ??ps.setInt(1,xxx);
          ?? ??ps.setString(2,xxx);
          ? ??...
          ?? ??ResultSet rs = ps.executeQuery(); // 查詢
          ?? ??int c = ps.executeUpdate(); // 更新
          三:處理執行結果
          ? ?查詢語句,返回記錄集ResultSet
          ? ?更新語句,返回數字,表示該更新影響的記錄數
          ? ?ResultSet的方法
          ? ??1、next(),將游標往后移動一行,如果成功返回true;否則返回false
          ? ??2、getInt("id")或getSting("name"),返回當前游標下某個字段的值
          四:釋放連接
          ? cn.close();
          ? 一般,先關閉ResultSet,然后關閉Statement(或者PreparedStatement);最后關閉Connection


          可滾動、更新的記錄集
          ?1、創建可滾動、更新的Statement
          ? Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);
          ? 該Statement取得的ResultSet就是可滾動的
          ?2、創建PreparedStatement時指定參數
          ? PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

          ? ResultSet.absolute(9000);?
          批量更新
          ?1、Statement
          ? Statement sm = cn.createStatement();
          ? sm.addBatch(sql1);
          ? sm.addBatch(sql2);
          ? ...
          ? sm.executeBatch()
          ? 一個Statement對象,可以執行多個sql語句以后,批量更新。這多個語句可以是delete、update、insert等或兼有
          ?2、PreparedStatement
          ? PreparedStatement ps = cn.preparedStatement(sql);
          ? {
          ?? ps.setXXX(1,xxx);
          ?? ...
          ?? ps.addBatch();
          ? }
          ? ps.executeBatch();
          ? 一個PreparedStatement,可以把一個sql語句,變換參數多次執行,一次更新。

          ?
          事務的處理
          ?1、關閉Connection的自動提交
          ? cn.setAutoCommit(false);
          ?2、執行一系列sql語句
          ? 要點:執行每一個新的sql語句前,上一次執行sql語句的Statement(或者PreparedStatemet)必須先close
          ?Statement sm ;
          ?sm = cn.createStatement(insert into user...);
          ?sm.executeUpdate();
          ?sm.close();

          ?sm = cn.createStatement("insert into corp...);
          ?sm.executeUpdate();
          ?sm.close();

          ?3、提交
          ? cn.commit();
          ?4、如果發生異常,那么回滾
          ? cn.rollback();

          posted @ 2006-07-06 18:15 負人博客 閱讀(1254) | 評論 (0)編輯 收藏

          1 Properties類直接讀取屬性文件
          ?
          public class Test {
          ?public static void main(String[] args) {
          ??InputStream is = Test.class.getResourceAsStream("nojar.properties");
          ??if (is == null)
          ???System.out.println("文件找不到");
          ??Properties prop = new Properties();
          ??try {
          ???prop.load(is);
          ??} catch(Exception e) {
          ???e.printStackTrace();
          ??}
          ??System.out.println(prop.getProperty("test"));
          ?}
          }
          2 通過ResourceBundle讀取屬性文件

          public class Test {
          ?public static void main(String[] args) {
          ??ResourceBundle rb = ResourceBundle.getBundle("test");
          ??System.out.println(rb.getString("test"));
          ?}
          }

          posted @ 2006-07-06 18:13 負人博客 閱讀(385) | 評論 (0)編輯 收藏

          對于protected關鍵字經常在使用中弄混,特寫一小例進行測試
          Protected方法或屬性例子:


          Package com.first;

          Public class Test1 {
          ?Protected String a;
          Protected void test() {
          ? System.out.println(“it is a test”);
          }
          }
          package com.second;
          import com.first.*;
          public class Test2 extends Test1 {
          ?Test1 test1 = new Test1();
          Test2 test2 = new Test2();
          test1.a = “test”;//錯誤
          test2.a = “test”; //正確
          test1.test();//錯誤
          test2.test();//正確
          }
          ///原因,protected定義的東西在不同包內不能訪問,只有繼承的子類可以訪問

          posted @ 2006-07-06 18:13 負人博客 閱讀(321) | 評論 (0)編輯 收藏

          由于公司的項目需要這幾天一直在研究jasperreport和ireport,到現在已經研究了一段時間了,在學習過程中遇到了一些問題同時也學到了一些技巧,特做小文以享于他人.
          1。工具簡介
          ????? jasperreport和ireport都是開源軟件,可以免費下載。
          ireport使jasperreport的一個可視化設計工具,里面集成了一些畫圖工具和數據庫的操作,用ireport做出來的是一個jrxml文件也可以在里面直接編輯此文件(比較麻煩)。經過運行編譯后生成jasper文件,這個文件是我們需要的東西,將來我們做報表讀取的就是這個文件。工具的其他一些東西像下載地址之類的網上到處都是,在此就不細說了。下面我就把我這段時間遇到的問題在這做一個總結。
          2。用ireport遇到的一些問題
          ??????(1)解決里面的中文問題:
          ????????????? 在pdf里面不能顯示中文
          ????????????? 解決方案:
          ???????????????? 1。將itextasian.jar下載下來(google一搜就有)放到? ireport目錄底下的lib文件夾下即可。有人還說要再放一個itext.jar到
          lib目錄下,但是在我的應用過程中發現不放此文件也可以。
          ???????????????? 2。將每個文本域屬性當中的PDF font name改為STSong-Light并且將PDF encoding里面的設置改為UniGB-UCS2-H (Chinese Simplified),此時應該差不多了。
          ???????(2)?解決IE里面的斜線問題
          ????????????用ireport畫的斜線無法在IE里面顯示(因為html本身無法支持斜線)
          ??????????? 解決方案:將需要顯示斜線的地方做成圖片,然后利用image控件加載圖片即可
          ????????? (3)解決IE里面無法顯示的問題
          ???????????????? 在ireport里面畫出的圖表無法在ie里面顯示
          ???????????????? 解決方案:在Ireport里面畫圖的時候不要用直線工具,里面的線全部用static text文本框的border畫出。也就是說,里面的圖表全部都是用文本框堆積成的。切記:圖表里面的所有元素都不能交叉,如果有一點交叉或重疊,在IE里面都是顯示不全的。
          3。應用時常見的幾種方式:
          ?????? 由于html自身的局限性,以及html顯示的問題,現在在網絡上傳輸的打印很多都采用pdf格式輸出。jasperreport對pdf做了很好的支持!
          ?????? 個人根據需要可以改寫jasperreport的代碼,以使之更好的為自己服務。
          ???? 1.可以把數據放到map中傳遞到pdf打印頁面(一般適合類似票據打印)???
          ??????? Map parameters = new HashMap();//參數

          ??????? 通過把map輸出到ireport模板中,得到要打印的票據

          ???? 2.可以把結果集放到collection中,這樣想打印什么都可以了!

          ???? 3.剩下的就是寫sql了,通過map把參數傳遞過去,利用參數就可以寫要查詢的結果集了。

          注:在ireport通過查詢語句取結果集的時候發現定義的參數順序和ireport生成模板的順序不一致,這樣在sql中如果條件是(a,b,c)結果它把參數的順序寫成了(b,c,a)或者什么的。不知道這是不是ireport的bug。

          posted @ 2006-07-06 17:34 負人博客 閱讀(1961) | 評論 (0)編輯 收藏

          ???? 在我們的日常開發中,經常需要通過輸出一些信息進行程序的調試,如果到處都用system.out.println()則在項目發布之后要逐一刪除,而log4j提供了一種新的調試輸出機制以解決輸出的問題。log4j的原理是使用一個配置文件log4j.properties進行管理,在調試的時候可以把輸出級別調低,項目正式發布之后把級別調高,這樣以前的一些輸出就可以屏蔽了,不用到程序當中再進行逐一刪除。關于log4j的介紹網上很多,隨便google一下就可以順利的使用log4j了。在這里介紹一下log4j和common-logging的聯合使用,因為在很多框架當中都是結合了common-logging和log4j的應用。像spring之類的框架里面存在很多debug輸出,用common-logging可以很容易的打印輸出,以用于了解spring的運行機制!
          ?? 使用介紹:
          ?? 1.下載jar包:
          ?????? log4j-1.2.9.jar和commons-logging.jar
          ?? 2.在web目錄的classes下面添加兩個文件:commons-logging.properties和log4j.properties??????
          ????? log4j.properties(例子):
          ????????? ##LOGGERS##
          ???? ???? #define a logger
          ????????? log4j.rootLogger=INFO,console,file
          ????????? #log4j.rootLogger=DEBUG,console,file
          ????????? ##APPENDERS##
          ???????? #define an appender named console,which is set to be a ConsoleAppender
          ???????? log4j.appender.console=org.apache.log4j.ConsoleAppender
          ???????? #define an appender named file,which is set to be a RollingFileAppender
          ??? ???? log4j.appender.file=org.apache.log4j.RollingFileAppender
          ???????? log4j.appender.file.File=log-wst.txt
          ????? ?? ##LAYOUTS##
          ????? ?? #assign a SimpleLayout to console appender
          ???????? log4j.appender.console.layout=org.apache.log4j.SimpleLayout
          ???????? #assign a PatternLayout to file appender
          ???????? log4j.appender.file.layout=org.apache.log4j.PatternLayout
          ???????? log4j.appender.file.layout.ConversionPattern=%p - %m%n
          ?????
          ????? commons-logging.properties(例子)
          ????????? ##
          ????????? org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
          ?? 3.應用實例:
          ???? package com.wes.test;
          ???? import org.apache.commons.logging.Log;
          ???? import org.apache.commons.logging.LogFactory;
          ??? public abstract class BaseClass{
          ???????? /** 用于日志輸出 */
          ???????? protected Log log = LogFactory.getLog(this.getClass());
          ??? }
          ??? 這樣在子類中可以直接調用log輸出即可:
          ?? public class?DerivedClass extends BaseClass {
          ???????? pulbic void test() {
          ?????????????//如果log4j.properties文件配置的級別<=info則可以正常輸出(info/debug)?
          ??????????? log.info("這是info級別的輸出");???
          ?????????????//如果log4j.properties文件的級別為debug則可以正常輸出(debug)?
          ??????????? log.debug("這是debug級別的輸出");
          ???????? }
          ?? }

          ?

          posted @ 2006-07-06 17:31 負人博客 閱讀(2932) | 評論 (0)編輯 收藏

          僅列出標題
          共3頁: 上一頁 1 2 3 

          posts - 26, comments - 5, trackbacks - 0, articles - 8

          Copyright © 負人博客

          主站蜘蛛池模板: 开阳县| 松江区| 新巴尔虎左旗| 云浮市| 屯留县| 南投市| 如东县| 炉霍县| 墨玉县| 开原市| 神农架林区| 双桥区| 娱乐| 巨野县| 临武县| 河池市| 申扎县| 得荣县| 淳化县| 纳雍县| 略阳县| 永福县| 寻乌县| 固镇县| 兴隆县| 洛南县| 泰安市| 瑞安市| 屯门区| 武山县| 镇坪县| 文水县| 稻城县| 介休市| 昆明市| 吉隆县| 清水河县| 长泰县| 成都市| 宝鸡市| 海原县|