俊星的BLOG

#

我的JAVA工具之网络传输对象

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;

public class Tet {
    
public static void main(String[] args) {
        
new Server().start();
        
new Client().start();
    }

}


class TestVO implements Serializable {
    
private String name;
    
private int id;

    
public TestVO(int id, String name) {
        
super();
        
this.id = id;
        
this.name = name;
    }


    
public String toString() {
        
return "id:" + id + " name:" + name;
    }

}


class Client extends Thread {
    
public void run() {
        
try {
            Socket client 
= new Socket("localhost"8888);
            ObjectInputStream ois 
= new ObjectInputStream(client.getInputStream());
            TestVO vo 
= (TestVO) ois.readObject();
            System.out.println(
"client read:" + vo);
            ois.close();
            client.close();
        }
 catch (Exception e) {
            
// TODO: handle exception
            e.printStackTrace();
        }

    }

}


class Server extends Thread {
    
public void run() {
        
try {
            ServerSocket ss 
= new ServerSocket(8888);
            Socket server 
= ss.accept();
            ObjectOutputStream oos 
= new ObjectOutputStream(server.getOutputStream());
            TestVO vo 
= new TestVO(1"good job");
            oos.writeObject(vo);
            System.out.println(
"server write:" + vo);
            oos.close();
            server.close();
            ss.close();
        }
 catch (Exception e) {
            
// TODO: handle exception
        }

    }

}

输出:
server write:id:1 name:good job
client read:id:
1 name:good job

posted @ 2009-05-19 21:40 俊星 阅读(561) | 评论 (0)编辑 收藏

趣味JAVA之九九乘法口诀表

    public static void main(String[] args) {
        
// i:行数 j:列数
        
// 方式一:嵌套循环
        for (int i = 1; i <= 9; i++{
            
for (int j = 1; j <= i; j++{
                System.out.print(i 
+ "X" + j + "=" + i * j + " ");
            }

            System.out.println();
        }


        System.out.println();
        
// 方式二:单循环
        for (int i = 1, j = 1; i <= 9; j++{
            System.out.print(i 
+ "X" + j + "=" + i * j + " ");
            
if (i == j) {
                System.out.println();
                i
++;
                j 
= 0;
            }

        }

    }

输出如下:
1X1=1 
2X1
=2 2X2=4 
3X1
=3 3X2=6 3X3=9 
4X1
=4 4X2=8 4X3=12 4X4=16 
5X1
=5 5X2=10 5X3=15 5X4=20 5X5=25 
6X1
=6 6X2=12 6X3=18 6X4=24 6X5=30 6X6=36 
7X1
=7 7X2=14 7X3=21 7X4=28 7X5=35 7X6=42 7X7=49 
8X1
=8 8X2=16 8X3=24 8X4=32 8X5=40 8X6=48 8X7=56 8X8=64 
9X1
=9 9X2=18 9X3=27 9X4=36 9X5=45 9X6=54 9X7=63 9X8=72 9X9=81 

1X1
=1 
2X1
=2 2X2=4 
3X1
=3 3X2=6 3X3=9 
4X1
=4 4X2=8 4X3=12 4X4=16 
5X1
=5 5X2=10 5X3=15 5X4=20 5X5=25 
6X1
=6 6X2=12 6X3=18 6X4=24 6X5=30 6X6=36 
7X1
=7 7X2=14 7X3=21 7X4=28 7X5=35 7X6=42 7X7=49 
8X1
=8 8X2=16 8X3=24 8X4=32 8X5=40 8X6=48 8X7=56 8X8=64 
9X1
=9 9X2=18 9X3=27 9X4=36 9X5=45 9X6=54 9X7=63 9X8=72 9X9=81 

posted @ 2009-05-19 21:14 俊星 阅读(678) | 评论 (0)编辑 收藏

我的JAVA工具之目录结构输出

1、代码:
package test;

import java.io.File;

public class DMain {
    
static int level = 0;

    
/** 文件目录迭代输出 */
    
static void pathPrint1(String root) {
        File path 
= new File(root);
        
if (path.isDirectory()) {
            System.out.println(getMultiStr(
" ", level) + (path.isDirectory() ? "<dir>" : ""+ path.getName());
            level
++;
            File[] files 
= path.listFiles();
            
for (File f : files) {
                
if (f.isDirectory()) {
                    pathPrint1(f.getAbsolutePath());
                } 
else {
                    System.out.println(getMultiStr(
" ", level) + f.getName());
                }
            }
            level
--;
        }
    }

    
static String getMultiStr(String str, int num) {
        String s 
= "";
        
for (int i = 0; i < num; i++) {
            s 
+= str;
        }
        
return s;
    }

    
/** 以树形结构输出目录 */
    
static void printTree(String root, String init) {
        File path 
= new File(root);
        
if (path.isDirectory()) {
            File[] files 
= path.listFiles();
            
for (int i = 0, length = files.length; i < length; i++) {
                File f 
= files[i];
                System.out.println(init 
+ "|" + getMultiStr("-"4+ f.getName());
                
if (f.isDirectory()) {
                    printTree(f.getAbsolutePath(), init 
+ (i == length - 1 ? " " : "|"+ getMultiStr(" "4));
                }
            }
        }
    }

    
public static void main(String[] args) {
        String s 
= "D:\\My Documents\\discuz!\\Discuz_7[1].0.0_SC_GBK\\upload\\forumdata";
        pathPrint1(s);
        System.out.println(
"------------------------");
        System.out.println(
"ROOT");
        printTree(s,
"");

    }

}

2、得到的输出:
<dir>forumdata
 <dir>cache
  index.htm
 index.htm
 <dir>logs
  index.htm
 <dir>templates
  index.htm
 <dir>threadcaches
  index.htm
------------------------
ROOT
|----cache
|    |----index.htm
|----index.htm
|----logs
|    |----index.htm
|----templates
|    |----index.htm
|----threadcaches
     |----index.htm


posted @ 2009-05-18 20:18 俊星 阅读(190) | 评论 (0)编辑 收藏

Web4J之试用

     摘要: Web4J是一个比较新潮的Web框架,具体信息可以参考官网的相关说明:http://www.web4j.com/,下面是我的简单试用 1、数据库准备(MySQL): 创建一个数据库和一个单表: create database test4j; use test4j; create table tbl_log(   ...  阅读全文

posted @ 2009-05-16 18:57 俊星 阅读(907) | 评论 (0)编辑 收藏

ORACLE Autonomous Transactions(自治事务)试用

ORACLE自治事务是一个不错的功能,关键字是AUTONOMOUS_TRANSACTION,下面是我试用:
1、测试:
创建一个测试表:
CREATE TABLE TBL_TEST(
  TEST_ID 
NUMBER NOT NULL,
  TEST_DESC 
VARCHAR2(100NOT NULL
);

新增两条记录(注意没有进行提交):
INSERT INTO TBL_TEST VALUES(1,'DESC 1');
INSERT INTO TBL_TEST VALUES(2,'DESC 2');

通过自治事务添加6两条记录:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
 
FOR i IN 3..8 LOOP
  
INSERT INTO TBL_TEST VALUES(i,'DESC '||i);
 
END LOOP;
 
COMMIT;
END;
/

查看执行结果如下:
SQL> SELECT * FROM TBL_TEST;
 
   TEST_ID TEST_DESC
---------- --------------------------------------------------------------------------------
         
1 DESC 1
         
2 DESC 2
         
3 DESC 3
         
4 DESC 4
         
5 DESC 5
         
6 DESC 6
         
7 DESC 7
         
8 DESC 8
 
8 rows selected

回滚后再次查看结果(通过结果可以看到采用自治事务的新增没有被回滚掉):
SQL> ROLLBACK;
 
Rollback complete
SQL> SELECT * FROM TBL_TEST
;
 
   TEST_ID TEST_DESC
---------- --------------------------------------------------------------------------------
         
3 DESC 3
         
4 DESC 4
         
5 DESC 5
         
6 DESC 6
         
7 DESC 7
         
8 DESC 8
 
6 rows selected

2、应用自治事务实现日志记录:
创建一个日志表:
CREATE TABLE TBL_LOG(
  LOG_ID 
NUMBER(10PRIMARY KEY,
  LOG_MSG 
VARCHAR2(4000NOT NULL,
  LOG_TIME DATE 
NOT NULL
);

创建一个序列:
CREATE SEQUENCE SEQ_TBL_LOG;

创建一个记录日志的存储过程:
CREATE OR REPLACE PROCEDURE DO_LOG(P_MSG IN VARCHAR2AS 
 PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  
INSERT INTO TBL_LOG VALUES(SEQ_TBL_LOG.NEXTVAL,P_MSG,SYSDATE);
  
COMMIT;
END;
/

测试上面的存储过程:
BEGIN
  
INSERT INTO TBL_TEST VALUES (100,'DESC 100');
  
-- test the do_log
  INSERT INTO TBL_TEST VALUES (101,NULL);
EXCEPTION
  
WHEN OTHERS THEN
    DO_LOG(P_MSG 
=>SQLERRM);
    
ROLLBACK;
END;
/

查看运行结果:
SQL> SELECT * FROM TBL_TEST WHERE TEST_ID>=100;
 
   TEST_ID TEST_DESC
---------- --------------------------------------------------------------------------------
SQL> SELECT * FROM TBL_LOG
;
 
     LOG_ID LOG_MSG                                                                          LOG_TIME
----------- -------------------------------------------------------------------------------- -----------
          
1 ORA-01400: 无法将 NULL 插入 ("FWMS4ZH_TEST"."TBL_TEST"."TEST_DESC")              2009-5-15 2

posted @ 2009-05-15 20:19 俊星 阅读(238) | 评论 (0)编辑 收藏

仅列出标题
共10页: First 上一页 2 3 4 5 6 7 8 9 10 下一页