
2007年6月4日
CJDBC官網(wǎng)http://c-jdbc.ow2.org/
cjdbc與hibernate的整合
Configuring C-JDBC with Hibernate
C-JDBC just has to be defined as any JDBC driver in Hibernate, leaving the syntax set to the proper database. Here is a configuration example to use Hibernate with a C-JDBC cluster made of Sybase backends:
## C-JDBC
hibernate.dialect net.sf.hibernate.dialect.SybaseDialect
hibernate.connection.driver_class org.objectweb.cjdbc.driver.Driver
hibernate.connection.username user
hibernate.connection.password pass
hibernate.connection.url jdbc:cjdbc://localhost:25322/test
轉(zhuǎn)自:http://lzj0470.javaeye.com/blog/445348
一、前言 |
cjdbc ( http://c-jdbc.objectweb.org/ ) 是一個open source的數(shù)據(jù)庫集群中間件,任何基于jdbc的應用都可以通過它透明地訪問數(shù)據(jù)庫集群,它可以進行各個節(jié)點之間的數(shù)據(jù)復制,并且可以實現(xiàn)各個節(jié)點的查詢負載均衡。通過這樣的軟件,偶們可以方便的實現(xiàn)RAIDb - Redundant Array of Inexpensive Database 廉價數(shù)據(jù)庫冗余陣列。
大型應用隨著用戶量訪問越來越大,增加數(shù)據(jù)庫存儲和做好數(shù)據(jù)庫冗余可以增加系統(tǒng)的可靠性和性能。
下面利用cjdbc,把兩臺對等的 Mysql 做 RAIDb,本文假定你已經(jīng)搭建好兩臺對等的 Mysql環(huán)境并建好一個需要做集群冗余的數(shù)據(jù)庫 clusterdb。 |
|
二、配置環(huán)境 |
Mysql: 5.0.19, 并使用 InnoDB 作為 Mysql 引擎
C-jdbc: 2.0.2
Jdk: 1.5 |
|
三、選擇合適的 C-JDBC RAIDb 機制 |
cjdbc有幾種RAIDb的機制可以選擇,如RAIDb-0,RAIDb-1等等,可以根據(jù)不同的情況選擇不同的RAIDb的機制。各種 RAIDb的機制詳情請查看 cjdbc 的文檔和 Demo。
RAIDb-1有如下功能:
完全鏡像處理機制,每個節(jié)點上都有完整的數(shù)據(jù)庫結(jié)構(gòu),這種方式提供了最好的容錯處理,并且通過設(shè)置合理的Loading Balance策略,可以帶來查詢性能相當好的提高。但是由于對于任何的寫操作(create/update/delete),需要在各個節(jié)點上進行傳播復制,寫操作就會比原來慢一些了,如下圖:

這里選擇 RAIDb-1 做為 cjdbc RAIDb 機制。
|
|
四、給兩臺對等的 Mysql 建表,假設(shè)兩臺 Mysql 的IP分別是 192.168.0.2和192.168.0.3 |
bash> mysql -h192.168.0.2 -uroot
bash> use clusterdb
bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
bash> exit;
bash> mysql -h192.168.0.3 -uroot
bash> use clusterdb
bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
bash> exit; |
|
五、在 Linux 下安裝 C-JDBC Controller |
bash> mkdir -p /usr/local/c-jdbc
bash> cd /usr/local/c-jdbc
bash> tar xvfz c-jdbc-2.0.2-bin.tar.gz
bash> export CJDBC_HOME=/usr/local/c-jdbc
|
|
六、把 Mysql JDBC Driver 放到 C-JDBC Controller 中來 |
這里我們使用 mysql-connector-java-3.1.12-bin.jar 驅(qū)動程序,把它放到
/usr/local/c-jdbc/drivers 中
|
|
七、配置 C-JDBC Controller |
1、在 /usr/local/c-jdbc/config/virtualdatabase 目錄中創(chuàng)建 虛擬數(shù)據(jù)庫配置文件,并把它命名為 mysql-raidb1-distribution.xml,內(nèi)容如下:
<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE C-JDBC PUBLIC "-//ObjectWeb//DTD C-JDBC 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-2.0.2.dtd">
<C-JDBC>
<VirtualDatabase name="myDB">
<Distribution>
</Distribution>
<AuthenticationManager>
<Admin>
<User username="admin" password="c-jdbc"/>
</Admin>
<VirtualUsers>
<VirtualLogin vLogin="boss" vPassword="boss"/>
</VirtualUsers>
</AuthenticationManager>
<DatabaseBackend name="mysqlNode211" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.2/clusterdb" connectionTestStatement="select 1">
<ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
<VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
</ConnectionManager>
</DatabaseBackend>
<DatabaseBackend name="mysqlNode213" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.3/clusterdb" connectionTestStatement="select 1">
<ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
<VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
</ConnectionManager>
</DatabaseBackend>
<RequestManager>
<RequestScheduler>
<RAIDb-1Scheduler level="passThrough"/>
</RequestScheduler>
<LoadBalancer>
<RAIDb-1>
<WaitForCompletion policy="first"/>
<RAIDb-1-LeastPendingRequestsFirst/>
</RAIDb-1>
</LoadBalancer>
</RequestManager>
</VirtualDatabase>
</C-JDBC>
|
2、在 /usr/local/c-jdbc/config/controller 目錄中創(chuàng)建 C-JDBC controller 配置文件,并把它命名為 uud-controller-distributed.xml,內(nèi)容如下:
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE C-JDBC-CONTROLLER PUBLIC "-//ObjectWeb//DTD C-JDBC-CONTROLLER 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-controller-2.0.2.dtd">
<C-JDBC-CONTROLLER>
<Controller port="25323">
<JmxSettings>
<RmiJmxAdaptor port="1091"/>
</JmxSettings>
<VirtualDatabase configFile="mysql-raidb1-distribution.xml" virtualDatabaseName="myDB" autoEnableBackends="true"/>
</Controller>
</C-JDBC-CONTROLLER>
|
3、在 /usr/local/c-jdbc/config/demo 目錄中創(chuàng)建啟動 C-JDBC controller sh,并把它命名為 uud-distributed-raidb1-controller.sh,內(nèi)容如下:
#!/bin/sh
export CJDBC_HOME=/usr/local/c-jdbc
export JAVA_HOME=/opt/jdk1.5
cd $CJDBC_HOME/bin
echo "Waiting for mysql servers to finish start up"
echo "Starting Controller"
./controller.sh -f ../config/controller/uud-controller-distributed.xml &
|
|
|
八、啟動 C-JDBC Controller |
bash> cd /usr/local/c-jdbc/demo
bash> chmod u+rwx uud-distributed-raidb1-controller.sh
bash> ./uud-distributed-raidb1-controller.sh &
如果啟動正常,顯示的信息如下:
Waiting for mysql servers to finish start up
Starting Controller
2006-04-20 10:32:21,126 INFO controller.core.Controller C-JDBC controller (2.0.2)
2006-04-20 10:32:21,189 INFO controller.core.Controller Loading configuration file: ../config/controller/uud-controller-distributed.xml
2006-04-20 10:32:21,278 INFO controller.core.Controller JMX is enabled
2006-04-20 10:32:21,308 INFO controller.core.Controller Starting JMX server on host: 127.0.0.1
2006-04-20 10:32:21,674 INFO backend.DatabaseBackend.mysqlNode211 Adding connection manager for virtual user "boss"
2006-04-20 10:32:21,749 INFO backend.DatabaseBackend.mysqlNode213 Adding connection manager for virtual user "boss"
2006-04-20 10:32:21,809 INFO controller.RequestManager.myDB Request manager will parse requests with the following granularity: NO_PARSING
2006-04-20 10:32:21,814 INFO controller.virtualdatabase.myDB Configuring jgroups using: file:/usr/local/c-jdbc/config/jgroups.xml
-------------------------------------------------------
GMS: address is 127.0.0.1:32773
-------------------------------------------------------
2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB Group myDB connected to /127.0.0.1:32773[/127.0.0.1:32773]
2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB First controller in group myDB
2006-04-20 10:32:26,477 WARN controller.virtualdatabase.myDB No recovery log has been configured, enabling backend without checkpoint.
[1]+ Done ./uud-distributed-raidb1-controller.sh
|
|
|
八、編寫 C-JDBC 客戶端程序 |
1、把 C-JDBC Drivers(/usr/local/c-jdbc/drivers/c-jdbc-driver.jar) 放置到 CLASSPATH 中
2、編寫插入 10 條數(shù)據(jù)到 Mysql 中,程序如下:
/**
* @author 胡榮華
* @Company 世紀龍 21cn
*/
package com.cjdbc.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.DriverManager;
/**
*
*/
public class GenerateSampleData {
public void generate() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 這是 c-jdbc drivers 的 Drivers class,注意不是 mysql 的 Drivers class
Class.forName("org.objectweb.cjdbc.driver.Driver").newInstance();
// 192.168.0.1 是 cjdbc controller 所在的 ip
// myDB 是在 文件 mysql-raidb1-distribution.xml 里定義的 <VirtualDatabase name="myDB">
// user=boss&password=boss 是在 文件 mysql-raidb1-distribution.xml 里定義的
// <VirtualUsers>
// <VirtualLogin vLogin="boss" vPassword="boss"/>
// </VirtualUsers>
String url = "jdbc:cjdbc://192.168.0.1:25323/myDB?user=boss&password=boss";
conn = DriverManager.getConnection(url);
try{
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("insert into user values ('', ?)");
int numOfTestRecords = 10;
System.out.println("Update Record Start.");
for (int i=0;i<numOfTestRecords;i++) {
String newkey = i + "-" + i;
pstmt.setString(1, "hua_" + newkey);
pstmt.executeUpdate();
}
conn.commit();
System.out.println("Update Record Success.");
}
catch(Exception ex){
conn.rollback();
ex.printStackTrace();
}
finally{
try {
if( pstmt != null )
pstmt.close();
if( conn != null)
conn.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GenerateSampleData g = new GenerateSampleData();
g.generate();
}
}
|
3、程序執(zhí)行完畢后,分別到 Mysql Node 192.168.0.2 和 192.168.0.3 查詢,看看是否已同步了數(shù)據(jù),如果兩個 Mysql Node 都有相同的數(shù)據(jù),說明 C-JDBC 環(huán)境搭建成功。
|
|
posted @
2010-03-25 20:23 Dong 閱讀(403) |
評論 (0) |
編輯 收藏
最近做了一個日志管理系統(tǒng)
個人覺得采用了一套非常非常創(chuàng)新或者變態(tài)的開發(fā)方式,就像題目說的那樣,使用web的方法開發(fā)桌面應用程序,當然所有的技術(shù)都是基于java的。
總結(jié)一下在整個項目中使用到的技術(shù)
1、底層服務(wù)器的開發(fā)socket通信、http報文解析、反射機制(這些技術(shù)其實就是開發(fā)了一款小型的服務(wù)器,讓我們的web代碼能夠在本地運行起來,之所以選擇自己開發(fā)服務(wù)器的原因是,tomcat對于我們這個小桌面程序來說還是太大了點,如果作為桌面啟動,用戶不可能等待程序啟動這么長的時間,我給這個服務(wù)器起了個名字叫做jnet)
2、SWT,包括的瀏覽器控件和窗口等。
3、使用installanywhere來打包程序,方便發(fā)布
4、前臺展現(xiàn)數(shù)據(jù)使用了ext2.2
5、擴展自己開發(fā)的服務(wù)器jnet,開發(fā)出自己的“action”,應該來說還是符合MVC的
數(shù)據(jù)庫使用的是access,采用jdbc的方式訪問,你知道,如果在桌面軟件上使用hibernate...
好了,不說廢話
先貼出成品的效果圖
1、桌面圖標

2、登錄界面

3、登錄效果圖

4、主界面

是不是覺得還不錯呢?JAVA也可以揚眉吐氣開發(fā)出這樣的桌面系統(tǒng),可惜的是因為使用到了SWT,所以整個項目并不能跨平臺,放到linux系統(tǒng)下去運行。
好了先理一理,發(fā)一張項目的原理圖

看圖說話,我們整個項目的構(gòu)架,就是這個樣子的,采用SWT封裝了IE作為前臺展現(xiàn),后臺使用自己開發(fā)的服務(wù)器作為后臺來處理數(shù)據(jù),中間數(shù)據(jù)通信方式當然就只能是http了
所以中心思想就是,我開發(fā)了個服務(wù)器,這個服務(wù)器能夠讓用戶擴展自己的類,自己的方法,然后用戶就可以根據(jù)自己的需要來書寫自己的系統(tǒng),最最最重要的就是,讓我們這些寫慣了J2EE的人能夠使用已經(jīng)形成的思維來編寫桌面系統(tǒng),我們可以不需要再去學swing和swt,可以使用html的方式來做前臺的布局,因為老實說我每次寫桌面程序的時候,總會把代碼弄得一團糟,在web系統(tǒng)上容易規(guī)規(guī)矩矩的寫出分層的代碼,桌面系統(tǒng)...布局就讓我頭大(我的意思是當你跑出去接私活干的時候,不用再學一套東西,呵呵)。
好了,這個帖子只是一個簡單的介紹,整個系統(tǒng)具體的實現(xiàn)方式,會在后續(xù)的帖子中一步步解析,大家有什么意見或者建議可以給我留言,謝謝!
posted @
2009-03-19 15:16 Dong 閱讀(4365) |
評論 (23) |
編輯 收藏
開發(fā)的時候有時候會碰到這樣的情況,我們在寫程序的時候并不知道需要調(diào)用某個對象的哪個方法,只有程序運行后,我們才能夠知道。或許我們需要根據(jù)客戶端傳過來的某個String參數(shù)的值來判斷我們應該執(zhí)行哪個方法。在這種情況下JAVA的反射執(zhí)行就可以幫上忙了。下面是我做的一個簡單的測試代碼,提供給大家做個參考。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


/** *//**
* @author Dong
* 測試JAVA reflect機制
*/

public class TestRef
{

/** *//**
* @param args
*/

public static void main(String[] args)
{
TestBean test = new TestBean();
Method[] methods = test.getClass().getMethods();
test.setAbc("---");

for(int i=0;i<methods.length;i++)
{

if(methods[i].getName().equalsIgnoreCase("getabc"))
{

try
{
System.out.println(methods[i].invoke(test));

} catch (IllegalArgumentException e)
{
e.printStackTrace();

} catch (IllegalAccessException e)
{
e.printStackTrace();

} catch (InvocationTargetException e)
{
e.printStackTrace();
}
}
}
}
}

posted @
2008-06-05 16:36 Dong 閱讀(10204) |
評論 (7) |
編輯 收藏
(String[])ArrayList.toArray(new String[0]);
posted @
2008-06-02 11:25 Dong 閱讀(802) |
評論 (0) |
編輯 收藏
XML里是無法直接正常輸出&等特殊字符的,可用&轉(zhuǎn)義表示!
posted @
2008-05-21 09:03 Dong 閱讀(484) |
評論 (0) |
編輯 收藏
1、數(shù)字格式化
<fmt:formatNumber value="33.33333" pattern="#.0"></fmt:formatNumber>-->輸出33.3
pattern中符號的約束規(guī)定
0 一個數(shù)位
# 一個數(shù)位,前導零和追尾零不顯示
. 小數(shù)點分割位置
, 組分隔符的位置
- 負數(shù)前綴
% 用100乘,并顯示百分號
其他任何符號 在輸出字符串中包括指定符號
2、日期格式化
<fmt:formatDate value="${vo.lateCompleteDate}" type="both" pattern="yy-MM-dd"/>
posted @
2008-05-20 09:29 Dong 閱讀(1762) |
評論 (0) |
編輯 收藏
HashMap<String,String> testMap = new HashMap<String,String>();
for (Map.Entry<String, String> entry : testMap .entrySet()) {
entry.getKey();
entry.getValue();
}
posted @
2008-05-19 17:09 Dong 閱讀(322) |
評論 (0) |
編輯 收藏
ApplicationContext ctx = new ClassPathXmlApplicationContext("application-config.xml");
Map<String,String> bureauMap = ((DictionaryService)ctx.getBean("dictionaryService")).getBureauMap();
posted @
2008-05-19 16:45 Dong 閱讀(268) |
評論 (0) |
編輯 收藏
今天在調(diào)試一個Servlet程序的時候,報了以下錯誤!
java.lang.IllegalStateException: Cannot forward after response has been committed
根據(jù)字面理解的話,意識是在response已經(jīng)提交后程序不能再一次的跳轉(zhuǎn)!
研究代碼以后發(fā)現(xiàn),是因為前面已經(jīng)執(zhí)行過一次request.request.getRequestDispatcher().forward()
但是后面的request.request.getRequestDispatcher().forward()依然被執(zhí)行到了!
那么很有理由相信request.request.getRequestDispatcher().forward()跳轉(zhuǎn)本身是不會返回什么,也不會終止程序體的執(zhí)行!
程序體后面該執(zhí)行的還是會執(zhí)行!
posted @
2008-04-17 10:28 Dong 閱讀(7750) |
評論 (1) |
編輯 收藏
<Resource name="jdbc/dong" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/dong">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>colorful</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/dong</value>
</parameter>
</ResourceParams>

使用如上配置的時候一直報這個
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'錯誤
在網(wǎng)絡(luò)上尋覓后發(fā)現(xiàn)是因為Tomcat版本引起的,改成如下問題就消失了
<Resource
name="jdbc/dong"
type="javax.sql.DataSource"
password="colorful"
driverClassName="org.gjt.mm.mysql.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://localhost:3306/dong"
maxActive="4"/>
posted @
2008-02-24 13:47 Dong 閱讀(2691) |
評論 (1) |
編輯 收藏
1、 解決Action過多問題
通過DispatchAction的方式
建立一個繼承自DispatchAction的Action
此類Action允許我們在表單中帶有參數(shù),根據(jù)參數(shù)執(zhí)行Action中的不同方法,以此實現(xiàn)Action的多用
步驟
① 建立一個繼承自DispatchAction的Action規(guī)定方法名稱
② 在表單頁面中添加一個隱藏域值,假設(shè)為codi value=”insert”
③ 在Struts-config.xml的相應Form中action項目中設(shè)置parameter參數(shù)值為codi
那么當表單提交的時候,Action中的insert()方法就會被執(zhí)行,可以通過改隱藏域中的值的方式來改變Action要執(zhí)行的方法
2、 解決ActionForm過多的問題
通過動態(tài)ActionForm的方式,即DynaActionForm
步驟
① 在Struts-config.xml
<form-beans>
<form-bean name=”abcForm” type=”org.apache.struts.action.DynaActionForm”>
<form-property name=”userid” type=”java.long.String”></form-property>
</form-bean>
</form-beans>
② 在Struts-config.xml
更改相應的action中的attribute和name為abcForm
這樣就配置好了一個動態(tài)的ActionForm
3、 解決動態(tài)ActionForm的驗證問題
通過動態(tài)驗證ActonForm的方式,即DynaValidatorForm
步驟
① 在Struts-config.xml
同2的第一步,但是type需要改成org.apache.struts.action.DynaValidatorForm
② 配置一個validation.xml文件
<form-validation>
<formset>
<form name="abcForm">
<field property="userid" depends="required">
<arg key="err.userid" resource="true"/>
</field>
</form>
</formset>
</form-validation>
③ 在Struts資源文件中配置err.userid、以及errors.required
④ 在Struts-config.xml配置相應的action,添加validate=”true”添加驗證支持
⑤ 添加struts Plugin插件
設(shè)置plugin class為org.apache.struts.validator.ValidatorPlugIn
添加propertys
Propertyà pathnames
Valueà /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml
這樣一個驗證框架就配置好了!
posted @
2008-02-12 13:47 Dong 閱讀(3489) |
評論 (6) |
編輯 收藏
讀Excel:
Workbook workbook = null;
try
{
workbook = Workbook.getWorkbook(new File(path));
}
catch(Exception e)
{
System.out.println(e);
}
Sheet sheet = workbook.getSheet(0);
Cell cell=sheet.getCell(i,j);//讀第i列,第j行表格的值
System.out.println(cell.getContents());
對于循環(huán)讀出可以使用
sheet.getRows();方法得到行數(shù)
sheet.getColumns();方法得到列數(shù)
寫Excel:
Workbook wb = Workbook.getWorkbook(new File(path));
WritableCellFormat wcf = new WritableCellFormat();
book = Workbook.createWorkbook(new File(path, wb);
sheet = book.getSheet(0);
jxl.write.Label name = new jxl.write.Label(i,j,"abc",wcf);//在第i列,第j行寫入"abc"值,風格為wcf,如果寫入的是數(shù)字則使用jxl.write.Number
sheet.addCell(name);
try
{
book.write();
book.close();
}
catch(WriteException e){}
catch(IOException e){}
單元格風格:
設(shè)置邊框—
WritableCellFormat wcf = new WritableCellFormat();
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf.setBorder(Border.RIGHT,BorderLineStyle.THIN);
wcf.setBorder(Border.LEFT,BorderLineStyle.THIN);
wcf.setBorder(Border.BOTTOM,BorderLineStyle.THIN);
合并單元格-
sheet.mergeCells(0,1,0,2)
合并(0,1)、(0,2)兩個單元格
設(shè)置字體-
WritableFont wf = new WritableFont(WritableFont.ARIAL,12, WritableFont.BOLD, false);
WritableCellFormat wcf = new WritableCellFormat(wf);
以及其它各種單元格樣式,如設(shè)置背景顏色
都可以通過設(shè)置WritableCellFormat來設(shè)置
還有一點需要說明一下,JXL組件對于公式的支持似乎比Apache的poi好
posted @
2008-02-01 16:16 Dong 閱讀(4979) |
評論 (2) |
編輯 收藏
原來弄過QuaQua的東西,但是一直不能把JFrame和JDialog變成Ox mac的樣式
原因是,如果系統(tǒng)并不是蘋果的系統(tǒng)就需要顯示的加載JFrame和JDialog的樣式
System.setProperty("Quaqua.tabLayoutPolicy","wrap");
if(!System.getProperty("os.name").toLowerCase().startsWith("mac"))

{
try

{
Methods.invokeStatic(JFrame.class, "setDefaultLookAndFeelDecorated", Boolean.TYPE, Boolean.TRUE);
Methods.invokeStatic(JDialog.class, "setDefaultLookAndFeelDecorated", Boolean.TYPE, Boolean.TRUE);
}
catch(NoSuchMethodException e)

{
e.printStackTrace();
}
}
try

{
UIManager.setLookAndFeel("ch.randelshofer.quaqua.QuaquaLookAndFeel");
}

catch(Exception e)
{}
posted @
2008-01-26 13:01 Dong 閱讀(2960) |
評論 (6) |
編輯 收藏
Junit主要是用來對我們的程序代碼進行白盒測試的一個組件。
首先我們需要得到Junit.jar的包,可以到www.junit.org下載得到。
下載以后將我們的Junit.jar包添加到工程里面,那么OK,就可以開始對我們的程序進行測試了。
對一個文件進行測試的時候需要自己制作一個類并繼承TestCase,如:
package cn.colorful.junit;
import junit.framework.Assert;
import junit.framework.TestCase;
import cn.colorful.sample.*;
public class TestSample extends TestCase {
private Sample sam = null;
protected void setUp() throws Exception {
sam = new Sample();
}
protected void tearDown() throws Exception {
sam = null;
}
public void testSample() {
Assert.assertNotNull(sam);
Assert.assertEquals("ab", sam.getName("a", "b"));
Assert.assertEquals("dong", sam.getName("do", "ng"));
}}
其中程序的運行過程是TestCase的構(gòu)造方法、setUp方法(對程序中使用的一些資源進行分配)、運行測試、tearDown()(去處一些使用到的資源)
這樣程序會自動判斷Sample類中的getName方法返回的值是不是符合我們的要求,使用Junit測試的運行方式,程序會調(diào)用Assert類中的靜態(tài)方法對測試程序的返回值和期望值等情況進行判斷、還有一些判斷對象是否為空的方法,當出現(xiàn)綠色的時候代表程序是正常運行的
當書寫了很多測試類后,可以條使用TestSuite類對測試類進行打包測試,如:
package cn.colorful.junit;
import junit.framework.Test;
import junit.framework.TestSuite;
public class TestPackage{
public static Test suite()
{
TestSuite tes = new TestSuite("Test for cn.colorful.sample");
tes.addTestSuite(TestSample.class);
tes.addTestSuite(TestSampleTwo.class);
return tes ;
}
}
程序需要實現(xiàn)suite()方法,并且返回出一個TestSuite對象。
posted @
2007-12-25 16:12 Dong 閱讀(1255) |
評論 (2) |
編輯 收藏
1、實現(xiàn)自定義Taglib的類需要實現(xiàn)javax.servlet.jsp.tagext.IterationTag或者
javax.servlet.jsp.tagext.TagSupport、javax.servlet.jsp.tagext.BodyTag接口,目前J2EE提供了兩
個分別實現(xiàn)了這兩個接口的類,我們只需要直接繼承就可以,它們分別為BodyTagSupport、TagSupport
繼承兩個類中的一個就可以完成一個屬于自己的Taglib類
package cn.dong;
import java.io.IOException;
import cn.dong.Person ;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
public class TagServer extends TagSupport {
String name ;
public void setName(String name) {
this.name = name;
}
public int doStartTag() throws JspException {
Person per = new Person() ;
try {
pageContext.getOut().println("Userid:"+name) ;
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY ;
}
}
2、寫tld文件
tld文件本身是xml標準文檔的一種,可以通過tld文件配置出Taglib的各種標記所對應的類實現(xiàn)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>//標簽描述
<jspversion>1.1</jspversion>
<shortname>mytag</shortname>
<uri></uri>
<tag>
<name>hello</name>//標簽方法名
<tagclass>cn.dong.TagServer</tagclass>//指向的類
<bodycontent>empty</bodycontent>
<info>Tag with Parameter</info>
<attribute>//定義傳遞的屬性值
<name>name</name>//屬性名
<required>true</required>//屬性值是否必須傳輸
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
這樣一個自定義標記就寫好了,但是要使用它我們還需要在項目中配置
3、項目部署文件web.xml
<taglib>
<taglib-uri>hello</taglib-uri>
<taglib-location>/WEB-INF/Web.tld</taglib-location>
</taglib>
4、在JSP頁面中調(diào)用Taglib
<%@ taglib uri="hello" prefix="show" %>
這樣我們就完成了所有配置
在頁面中使用類似<show:hello name="dong"/>就可以看到我們配置的Taglib起的作用了
posted @
2007-12-19 11:07 Dong 閱讀(1081) |
評論 (3) |
編輯 收藏
我對DAO的理解就是對數(shù)據(jù)庫的訪問封裝在一個接口里,當用戶需要訪問數(shù)據(jù)庫的時候只需要簡單的對調(diào)用接口,而不需要和數(shù)據(jù)庫有直接的接觸。
下面介紹一個簡單的DAO對數(shù)據(jù)庫訪問的建立:
首先我們需要建立
1、一個DAO接口:UserDAO.java在里面定義數(shù)據(jù)庫操作的所有方法
2、一個實現(xiàn)了DAO接口的類、UserDAOImpl.java,完成了對DAO的實現(xiàn)并且將取得的數(shù)據(jù)存放到VO類中。
3、一個數(shù)據(jù)庫訪問的基礎(chǔ)類、DataBaseConnection.java里面封裝了對數(shù)據(jù)庫的連接Connection,外部訪問這個類的方法可以返回一個Connection接口的實現(xiàn)
4、一個VO類,UserVO.java,里面包含了所有需要返回的出來的數(shù)據(jù)、利用set方法和get方法對類對象進行基本的設(shè)置
5、一個Factory類,封裝了具體實現(xiàn)了UserDAO接口的UserDAOImpl類對象,調(diào)用Factory類的時候直接返回一個UserDAO的對象
這樣的話一個DAO設(shè)計就完成了
這個時候當我們需要對數(shù)據(jù)庫進行訪問的時候只需要聲明一個UserDAO接口然后實例化一個工廠類實現(xiàn)UserDAO接口,這樣我們就可以遍歷VO類得到我們要的數(shù)據(jù)。
posted @
2007-12-16 16:30 Dong 閱讀(1139) |
評論 (1) |
編輯 收藏
Filter Servlet中傳遞的request和response對象分別是ServletRequest和ServletResponse接口的對象,而不是一般Servlet中的HttpServletRequest和HttpServletResponse接口的對象,ServletRequest是HttpServletRequest的父接口,很多方法是沒有的,比如說request.getSession() ;所以如果想在Filter中讀取session對象必須對request做一定的向下轉(zhuǎn)型。
而實現(xiàn)HttpSessionListener 的Listener Servlet中的傳遞的對象是HttpSessionEvent的對象,想在其中實現(xiàn)對Application對象的訪問的話:arg0.getSession().getServletContext().setAttribute();
另:今天把MySQL裝到電腦上,利用Servlet連接了一下,老是報ClassNotFound的錯誤,原因是MySQL的JDBC驅(qū)動只有一個mysql-connector-java-5.0.8-bin.jar,另外一個不能夠拷到lib目錄下。
posted @
2007-12-13 01:02 Dong 閱讀(575) |
評論 (0) |
編輯 收藏
Struts 使用 Model 2 架構(gòu)。Struts 的ActionServlet 控制導航流。其他Struts 類,比如
Action, 用來訪問業(yè)務(wù)邏輯類。當 ActionServlet 從容器接收到一個請求,它使用URI (或者
路徑“path”) 來決定那個Action 將用來處理請求。一個 Action可以校驗輸入,并且訪問業(yè)務(wù)
層以從數(shù)據(jù)庫或其他數(shù)據(jù)服務(wù)中檢索信息。
為校驗輸入或者使用輸入來更新數(shù)據(jù)庫, Action 需要知道什么指被提交上來。并不是
強制每個Action 從請求中抓取這些值,而是由 ActionServlet 將輸入綁定到JavaBean中。
輸入 bean是Struts ActionForm c類的子類。ActionServlet 通過查找請求的路徑可以決定使用
哪個ActionForm,Action 也是通過同樣的方法選取的。ActionForm 擴展
org.apache.struts.action.ActionForm類。每個都必須以HTTP 響應進行應答。 通
常, Struts
Action 并不自行加工響應信息,而是將請求轉(zhuǎn)發(fā)到其他資源,比如JSP 頁面。Struts 提
供一個ActionForward 類,用來將一個頁面的路徑存儲為邏輯名稱。當完成業(yè)務(wù)邏輯后,
Action 選擇并向Servlet返回一個ActionForward。Servlet 然后使用存儲在ActionForward 對
象中的路徑來調(diào)用頁面完成響應。
Struts 將這些細節(jié)都綁定在一個ActionMapping 對象中。每個ActionMapping 相對于一
個特定的路徑。當某個路徑被請求時,Servlet 就查詢ActionMapping 對象。ActionMapping
對象告訴servlet,哪個Actions, ActionForms, 和 ActionForwards 將被使用。
所有這些細節(jié),關(guān)于Action, ActionForm, ActionForward, ActionMapping,以及其
他一些東西,都在struts-config.xml 文件中定義。 ActionServlet 在啟動時讀取這個配置文件,
并創(chuàng)建一個配置對象數(shù)據(jù)庫。在運行時,Struts 應用根據(jù)文件創(chuàng)建的配置對象,而不是文件
本身
posted @
2007-12-08 10:52 Dong 閱讀(253) |
評論 (0) |
編輯 收藏
<head>
<title>無標題文檔</title>
<style type="text/css">
<!--


.hidecontent
{display:none;}
-->
</style>
<script language="javascript">
function switchTag(content)


{
// alert(tag);
// alert(content);
for(i=1; i <6; i++)


{

if ("content"+i==content)


{
document.getElementById(content).className="";

}else
{
document.getElementById("content"+i).className="hidecontent";
}
document.getElementById("content").className=content;
}
}
</script>
</head>

<body>
<div id="container">
<ul>
<li><a href="#" onmouseover="switchTag('content1');this.blur();"><span>標題一</span></a></li>
<li><a href="#" onmouseover="switchTag('content2');this.blur();"><span>標題二</span></a></li>
<li><a href="#" onmouseover="switchTag('content3');this.blur();"><span>標題三</span></a></li>
<li><a href="#" onmouseover="switchTag('content4');this.blur();"><span>標題四</span></a></li>
<li><a href="#" onmouseover="switchTag('content5');this.blur();"><span>標題五</span></a></li>
</ul>
</div>
<div id="content" class="content1">

<div id="content1" >標題一中的東西</div>
<div id="content2" class="hidecontent">標題二中的東西</div>
<div id="content3" class="hidecontent">標題三中的東西</div>
<div id="content4" class="hidecontent">標題四中的東西</div>
<div id="content5" class="hidecontent">標題五中的東西</div>

</div>
</body>
</html>

只是一個簡單的實現(xiàn)方法,具體的樣式美觀方面的東西可以自己修改。
posted @
2007-11-11 11:39 Dong 閱讀(1517) |
評論 (4) |
編輯 收藏
最近開發(fā)個后臺系統(tǒng),使用到了eWebEditor,原先并沒有使用過相關(guān)方面的在線編輯器。所以一用起來問題一大堆!都不知道用什么編輯器好,研究了FCKEditor等一些國外的編輯器后還是覺得應該支持國貨!
選頂了編輯器后之后還算順利,但是沒過多久就出現(xiàn)了另外一個問題,使用eWebEditor編輯后并保存到數(shù)據(jù)庫中的字符串是以HTML源碼的形式!這樣上傳和前臺顯示是都沒有問題的。但是后臺中有個修改新聞的功能,當我將HTML形式的代碼傳遞給eWebEditor的時候,驚喜就出現(xiàn)了!!編輯器顯然不買我的帳~~~沒反應???
下面的就是調(diào)用編輯器的JS代碼,其中value中的content值代表Html源碼!!然后eWebEditor就不能顯示出來,也不報錯,就是在頁面中空了一塊,哪位仁兄知道解決辦法,麻煩告訴一下,Thanks!!!!!!
<script language=javascript>

document.write ("<INPUT type='hidden' name='content1' value='<%=content%>'>");
document.write ("<IFRAME ID='eWebEditor1' src='ewebeditor.htm?id=content1&style=" + URLParams["style"] + "' frameborder='0' scrolling='no' width='580' height='300'></IFRAME>");

setTimeout("setValue();",1000);

</script>
經(jīng)過一夜奮戰(zhàn),以及對于問題的研究。終于找到解決方法了,步驟如下:
1、講content的內(nèi)容進行Html編譯,Server.HTMLEncode(content)
2、第二個問題將隱藏的文本框改成文本域,就可以了
posted @
2007-11-08 23:59 Dong 閱讀(951) |
評論 (2) |
編輯 收藏
硬盤中出現(xiàn)了兩個病毒程序SVOHOST.EXE 和AUTORUN.INF文件。
1)打開任務(wù)管理器將SVOHOST.EXE結(jié)束任務(wù)
2)運行 cmd
進入出現(xiàn)問題的盤符,如e:
輸入:dir/a
看看有沒有SVOHOST.EXE 和AUTORUN.INF
如果有
則輸入:attrib -a -s -h -r sxs.exe
attrib -a -s -h -r autorun.inf
分別執(zhí)行(目的是取消這兩個文件的隱藏屬性)
3)然后 del sxs.exe
del autorun.inf
(目的是刪除文件)
4)運行 regedit
搜索 sxs.exe
在注冊表中找到后直接刪除所有的sxs.exe文件
5)最后運行msconfig 在啟動項中把SVOHOST.EXE去掉
posted @
2007-08-25 12:58 Dong 閱讀(1805) |
評論 (3) |
編輯 收藏
FusionCharts是一個能幫你創(chuàng)建其引人注目的動態(tài)圖像效果的Macromedia Flash控件。充分利用Macromedia Flash所具有的流暢功能來創(chuàng)建簡潔的、交互式的和引人注目的動態(tài)圖像。
技術(shù)細節(jié)
設(shè)想所有的圖形組成不需要任何的安裝,你可以在你的能想到的語言環(huán)境中進行工作,并能在多數(shù)的瀏覽器中運行,建立漂亮的、栩栩如生的效果。假設(shè)你的數(shù)據(jù)在有限的時間、空間、WEB內(nèi)不停的發(fā)生改變。FusionCharts剛好幫助你實現(xiàn)所有想像出來的事物。
現(xiàn)在Flash的應用確實越來越廣泛,無論動畫、導航以及一些復雜的組件,都可以使用Flash技術(shù)很好的解決。Flash的前景我是非常看好的。FusionCharts就是其中一個非常好的代表!!應該來說應用起來也是非常方便的。而且功能強大、生成的圖表動態(tài)、而且美觀。
這個就是FusionCharts免費版本生成的一張圖表

http://www.fusioncharts.com/LiveDemos.asp
http://www.sstc.org.cn/Components/DetailView.aspx?id=d0e65bb6-4192-4c17-a940-200640703d5b&typename=basic
posted @
2007-08-23 16:04 Dong 閱讀(1175) |
評論 (1) |
編輯 收藏
server.xml中的<host></host>中寫入
<Context path="" docBase="E:\myweb" debug="0" reloadable="true" crossContext="true" />
//科學計數(shù)法的轉(zhuǎn)換//
DecimalFormat df = newDecimalFormat("####.000");
df.format(要格式的值);
/***************//
DecimalFormat format = (DecimalFormat) NumberFormat.getPercentInstance();
format.applyPattern("#####0");
String temp = format.format(Double.MAX_VALUE);
System.out.println(temp);
posted @
2007-07-31 12:26 Dong 閱讀(219) |
評論 (0) |
編輯 收藏
MapXtreme Java,是目前用于Internet或企業(yè)Intranet唯一的100%純Java地圖服務(wù)器。MapInfo MapXtreme Java與J2EE兼容,為開發(fā)人員開發(fā)應用提供了無與倫比的靈活性。MapXtreme Java向應用開發(fā)商提供了一個高度可視化的、直觀的組件,方便他們將地圖功能集成到任何Web應用中。MapXtreme Java幫助用戶在企業(yè)內(nèi)部輕松實現(xiàn)信息共享,更好地向顧客提供服務(wù),做出商業(yè)決策,更有效地管理資產(chǎn)和運營。
可擴展性
MapXtreme Java使用智能Java線程,可同時為多個客戶端服務(wù),這樣降低了每個客戶端的內(nèi)存消耗,并當增加CPU(或者集群)后保證性能成比例提高。它可以適于處理高強度的使用需求。
多平臺
MapXtreme Java 可以在異構(gòu)硬件環(huán)境下運行(Linux,UNIX,NT等)。 Map Xtreme Java 向所有PC或UNIX工作站的web瀏覽器發(fā)送地圖,而無需專用插件。
編寫一次,隨處運行
無論未來選擇何種硬件和軟件平臺,Map Xtreme Java 應用(代碼)都可以方便地被移植和重用,節(jié)約了開發(fā)時間和成本。
快速應用開發(fā)與部署
Map Xtreme Java版附帶有Java Beans,可加快應用開發(fā)。因為它可以用于可視化的Internet開發(fā)環(huán)境 (IDEs),例如Borland JBuilder、Oracle Jdeveloper或Sun ONE Studio,開發(fā)商可以采用標準的拖放、設(shè)置屬性機制,將對象添加到應用中。
靈活性
MapXtreme Java支持大量的網(wǎng)絡(luò)開發(fā),包括瘦、中和胖的web瀏覽器客戶端。
測試環(huán)境
操作系統(tǒng)
Solaris 8&9 HP UX11
Red Hat Linux Advanced Server 2.1
Windows 2000 Server Edition
Windows Server 2003 Enterprise Edition
應用服務(wù)器
Tomcat 4.1.18
Weblogic7
WebSphere 5.X (需提供J2SE 1.4)
Sun ONE 7
Oracle IAS
數(shù)據(jù)庫Oracle 8i Spatial (8.1.7) \ Oracle 9i2 Spatial \Oracle 9i2 Locato \SQL Server 2000 w/SpatialWare 4.6 \Informix 9.3w/SpatialWare 4.5
系統(tǒng)要求
MapXtreme Java版的目的是允許在任何支持Java虛擬機的平臺上開發(fā)地圖應用。下面是實施地圖應用的必要條件:
支持Sun servlet 2.3的servlet容器
與1.4.1 02或更高版本的虛擬機相兼容的Java 2 平臺
安裝在服務(wù)器上的視頻卡。對Sun Solaris來說,可以是視頻卡,也可以是虛擬框架緩沖(如Java 2D增強圖形功能所需)
9MB(針對服務(wù)器文件)-760MB(全部安裝)的硬驅(qū)空間(安裝需要40MB)
地圖數(shù)據(jù)需要的135MB的硬盤空間
256MB內(nèi)存
地址:http://www.mapinfo.com.cn
posted @
2007-07-30 12:11 Dong 閱讀(409) |
評論 (0) |
編輯 收藏
java2word 是一個在java程序中調(diào)用 MS Office Word 文檔的組件(類庫)。該組件提供了一組簡單的接口,以便java程序調(diào)用他的服務(wù)操作Word 文檔。
這些服務(wù)包括:
打開文檔、新建文檔、
查找文字、替換文字,
插入文字、插入圖片、插入表格,
在書簽處插入文字、插入圖片、插入表格等。
填充數(shù)據(jù)到表格中
讀取表格數(shù)據(jù)
在線文檔:http://www.heavenlake.com/java2word/doc
下載地址:http://dev.heavenlake.com:81/developer/listthreads?forum=8
posted @
2007-07-26 15:35 Dong 閱讀(7089) |
評論 (3) |
編輯 收藏
{InstallAnywhere 6 Enterprise}\resource\installer_vms下放著可用的vm,任意選擇一個,把其文件后綴改為zip文件解壓,可得到兩個文件:vm.properties和vm.zip,解壓vm.zip可以得到vm文件夾,其下就是java的jre中的所有內(nèi)容,如果你的JRE是缺省安裝的話可以到C:\Program Files\Java\j2re1.4.2下對照,一目了然,一模一樣,只是在壓縮了C:\Program Files\Java\j2re1.4.2這個文件下的所有內(nèi)容后得到vm.zip,添加一個vm.properties,其內(nèi)容為:
vm.platform=windows
vm.platform.flavor=win32
vm.name=Sun JRE 1.4.2_06 I18N Win32
vm.exe.path=bin\\java.exe
然后再次壓縮vm.zip和vm.properties得到了InstallAnywhere所需要的vm包.
posted @
2007-07-19 13:49 Dong 閱讀(327) |
評論 (0) |
編輯 收藏

usertable表是用戶信息表,其中userid為用戶賬號,每個賬號都有所屬于的城市.
logintable是用戶操作的一張表,兩張表通過userid相連,也就是說logintable中的每條數(shù)據(jù)通過userid標識出來
現(xiàn)在想統(tǒng)計出各個城市的紀錄條數(shù),還有合格次數(shù)
比如杭州擁有dong和jack兩個賬號,dong和jack在logintable有兩個紀錄,所以得到2,合格一次.
現(xiàn)在是想通過一個最簡單的方法,輸出每個城市的情況,如下
杭州 2 1
上海 2 1
posted @
2007-07-18 13:34 Dong 閱讀(268) |
評論 (1) |
編輯 收藏
摘要: 原來在某個網(wǎng)站發(fā)現(xiàn)過一個很好用的可編輯下拉,這兩天因為需要使用再次的去找那個.卻怎么也找不到了,在一番baidu,google終于還是沒有找到.但是無心插柳,發(fā)現(xiàn)了一個更加不錯的,所以貼出來.同時為了保持下拉不被影響,可以將原來的輸入提示下拉去掉,代碼為autocomplete="off"
<!DOCTYPE HTML PUBLIC "-//W3C...
閱讀全文
posted @
2007-07-16 10:09 Dong 閱讀(404) |
評論 (0) |
編輯 收藏
這幾天真的是徹底成了一個美工了

posted @
2007-07-09 17:12 Dong 閱讀(149) |
評論 (0) |
編輯 收藏
經(jīng)過幾天的努力,新版本的網(wǎng)站樣式終于搞定了,可能有點不完全。但是個人感覺還是不錯的。
posted @
2007-06-28 13:54 Dong 閱讀(175) |
評論 (0) |
編輯 收藏
解決方法:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt,將“UncheckedValue”的值改為0,即顯示文件擴展名,改為1則是不顯示。
posted @
2007-06-26 10:59 Dong 閱讀(1734) |
評論 (0) |
編輯 收藏
閑來無事,決定實現(xiàn)我前段時間的一個想法。寫一個五子棋程序,這樣的一個程序,本身來說是沒什么什么難度的。但是在寫的過程中卻真的是遇到了不少的麻煩~!
/* 到目前最新發(fā)現(xiàn)的問題是UDP嚴重的丟包現(xiàn)象,本程序是基于一個UDP網(wǎng)絡(luò)傳輸?shù)摹T趯懙臅r候顯然沒有考慮到UDP的保障機制,原因是我一直覺得UDP應該不會有問題,或者說我覺得簡直會流暢的跟TCP一樣。事實證明我錯了,把五子棋的客戶端放到同學的電腦上后,通信真的是相當?shù)睦щy~邀請進入游戲都沒有成功過。*/
發(fā)現(xiàn)原來程序不能成功運行的原因是因為自己在寫的時候出了一些錯誤,才會導致雙方不能成功的游戲以及通信!~還在這里責怪UDP機制,呵呵,特地將上方文字“注釋”掉。警戒一下,不過程序終于是跑起來了。看來以后寫程序出錯后應該先找程序本身有沒有問題了,不過第一個游戲終于走上了歷史舞臺。值得慶祝!!
看來要寫好一個好程序真的有很多東西要照顧到,比如過如果退出游戲沒有System.exit的話,系統(tǒng)會繼續(xù)為程序保留資源,也就是說原先使用的端口也就不會釋放開,下面的通信也會造成不便。漫漫長路啊~~
界面是模仿QQ游戲中的五子棋
Download the game (使用于公網(wǎng))
posted @
2007-06-08 13:16 Dong 閱讀(353) |
評論 (0) |
編輯 收藏
今天剛結(jié)束看完了這本在一個星期前買的僅僅有180多頁的書,只是買了第一冊。
坦白說我也沒有任何的文筆可言,原本也沒有想過也寫個關(guān)于本書的讀后感,但是總覺得不應該忘記了,雁過留聲,起碼不可以忘記書中說的那些最重要的思想,不然看了也沒有什么效果。所以就有了這篇文章。
買這本書的原因主要是無意中看到了作者的一個演講,感覺還不錯。作者擁有兩個父親,一個窮爸爸、一個富爸爸,窮爸爸為親生父親,代表了我們這個時代最普通的族群,努力工作努力提高工資。不去或者說很少投資,財務(wù)狀況基本上是長期處于負債的。而富爸爸則是一位對財富很有看法的人,擁有著很高的財商,當然最后也成為了夏威儀最有錢的幾個人之一。本書最主要的思想之一是教導人們?nèi)ベ徺I資產(chǎn)而不是負債。所謂的資產(chǎn)就是能夠為我們帶來收益的東西,比如說股票、基金、以及各種投資。而傳統(tǒng)意義上的汽車、房子都不算資產(chǎn)而是負債,因為如果你購買了汽車或者房子,本身會增加你的支出。傳統(tǒng)的理財是減少開銷,而書中所說的理財是讓我們怎么去獲得收益。
其實本書只能說是對于理財以及財商的一個啟蒙教育,只是將你推到了理財?shù)拈T前。以后需要有很多的品質(zhì)以及能力去建立,還有許多努力要做,但是重點是去嘗試,而不是害怕失敗。就像書中說的一樣:勝利是不害怕失敗。
posted @
2007-06-04 23:20 Dong 閱讀(220) |
評論 (0) |
編輯 收藏