wasw100's Blog
2012/02/23

Google AD

2009年12月26日

java中try catch finally的执行顺序

直接贴代码

package com.wasw100.test;

public class CatchTest {
	public static void main(String[] args) {
		System.out.println(test());
	}

	public static String test() {
		int i = 0;
		TestData td = new TestData();
		try {
			i=1;
			td.setS("1");
			System.out.println("try块执行 \ti:"+i+" s:"+td.getS());
			Integer.parseInt("a");
			return "正常返回\ti:"+i+" s:"+td.getS();
		} catch (Exception e) {
			i=2;
			td.setS("2");
			System.out.println("catch块执行\ti:"+i+" s:"+td.getS());
			return "catch块返回\ti:"+i+" s:"+td.getS();
		} finally {
			i=3;
			td.setS("3");
			System.out.println("finally块执行\ti:"+i+" s:"+td.getS());
			// return "finally块返回";
		}
	}
}

class TestData{

	private String s;

	public String getS() {
		return s;
	}

	public void setS(String s) {
		this.s = s;
	}

}

执行结果:
try块执行 	i:1 s:1
catch块执行	i:2 s:2
finally块执行	i:3 s:3
catch块返回	i:2 s:2

执行顺序很好理解,但是返回的i、s的值为什么是2,不是3?

一个很不错的解释:http://www.javaeye.com/topic/79092?page=2#284368

总结:

try或者catch执行后,如果有return语句,那么先把返回值copy到栈顶,例如上面的例子会把  “catch块返回\ti:”+i+” s:”+td.getS() 得到的字符串的引用copy到栈顶,也就是说return已经执行,但是还没返回(在MyEclipse的debug模式下可以看的很清楚) 然后执行finally,执行完finally,再把栈顶的值返回。如果返回的是一个对象的引用的话,那么将是finally执行后的值

因为字符串是一个在java中有特殊的对待,所以和普通对象有所不同,字符串是放到字符串常量池的,而换成一个普通对象作为返回值就能够看出来了。

java中的字符串可以看http://b0r0j0.blogbus.com/logs/8213193.html

–EOF–

2009年12月23日

TortoiseSVN的安装和简单使用

下载安装TortoiseSVN:http://cdnetworks-kr-2.dl.sourceforge.net/project/tortoisesvn/Application/1.6.5/TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi

1.下载项目

新建一个目录,进入目录,在空白处右击,点击SVN Checkout…

第一个文本框(URL of repository)填写svn的地址,其余默认,如果还没有用户,首先就是输入用户名密码

2.清除原来的用户

想修改用户,首先就是清除原来的用户

右击空白处-》 TortoiseSVN-》settings

选择左侧的saved data, 点右侧界面Authentication data的clear按钮

新用户的创建将按第一个步骤就可以了

3.update,commit

都很简单了,都在对应的目录下点击右键就可以了

4.上传工程
右击工程->import

相关文章: 用MyEclipse和googlecode的svn控制自己的代码

–EOF–

2009年12月22日

mysql更改引擎 (InnoDB,MyISAM)

mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。

查看当前数据库的所支持的数据库引擎以及默认数据库引擎

show engines;

更改方式1:修改配置文件my.ini

我将my-small.ini另存为my.ini,在[mysqld]最后添加为上default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB

更改方式2:在建表的时候指定或者建完表修改

--建表的时候指定
create table mytbl(
	id int primary key,
	name varchar(50)
)type=MyISAM;

--建完表后修改
alter table mytbl2 type = InnoDB;

--查看修改结果(mytest为表所在的database名字)
show table status from mytest;

相关文章:绿色版MySQL的安装和使用

参考文章:Mysql支持事务的InnoDB

–EOF–

2009年12月20日

hsqldb时间使用总结

官方文档:http://hsqldb.org/doc/guide/guide.html

可以查看有关时间的函数(可以搜索datediff,马上就可以转到时间函数那块)

hsqldb中时间可以使用now、CURRENT_TIMESTAMP这样的函数表示,也可以使用字符串,类似'yyyy-MM-dd','yyyy-MM-dd HH:mm:ss.SSS'这样的字符串

例如建一张表,插入一条数据

create table user(
	id INTEGER primary key,
	birthday DATETIME default 'now'
);

插入时间插入可以使用默认值now(无需填写)、或者sql语句中使用函数now(),curdate()之类的 、或者使用'yyyy-MM-dd','yyyy-MM-dd HH:mm:ss.SSS'这样的字符串。

insert into user(id) values(1);
insert into user values(2,now());
insert into user values(3,'2009-12-20');
insert into user values(4,'2009-12-20 20:01:02');
insert into user values(5,'2009-12-20 20:01:02.123');

结果:

1	2009-12-20 23:17:06.211
2	2009-12-20 23:17:06.211
3	2009-12-20 00:00:00.0
4	2009-12-20 20:01:02.0
5	2009-12-20 20:01:02.123

当你向hsqldb中插入某个时间,就可以结合DateFormat、Calendar等类组合出字符串了

–EOF–

2009年12月18日

用Swing显示时间比实际的晚8小时解决方法

参考文章:http://blog.csdn.net/subchen/archive/2008/04/18/2303402.aspx

在main中调用:
System.setProperty(“user. timezone”, “GMT+8″);
不起作用

改为

TimeZone.setDefault(TimeZone.getTimeZone("ETC/GMT-8"));

时间显示正确

–EOF–

2009年12月17日

PL SQL Developer和精简版Oracle客户端安装

用自己的xp连接远程的oracke10g,单独安装个oracle太浪费了。

安装了精简版oracle居然成功了。

步骤:

1.下载oracle精简版:
From: http://x.gd2.xdowns.com:8080/088/oracle9i310.rar
To: C:\Documents and Settings\Administrator\桌面\oracle9i310.rar
Size: 12.2 MB (12,710,213 bytes)
Transferred: 12.2 MB (12,710,213 bytes)

安装后也只有33.4M

2 .安装(D:\Oracle)

3.配置,下面是一个配置文件的参考

打开D:\Oracle\ora90\network\ADMIN下的tnsnames.ora

ORCL_192.168.0.19 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.19)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = orcl)
      (SERVER = DEDICATED)
    )
  )

可能出现的问题:

无法连接远程服务器 报无法处理服务名 的提示

解决方法:

在Path环境变量中找到D:\Oracle\ora90\BIN\; 把位置放在前面,使用sql plus连接ORCL_192.168.0.19成功

在pl sql developer中也能成功

–EOF–

2009年12月7日

用java判断数据库某个表是否存在

ResultSet rs = conn.getMetaData().getTables(null, null, "carpark".toUpperCase(), null);
while(rs.next()){
    System.out.println(rs.getObject(3).toString());
}

主要就是用到getTable方法

前两个参数没研究,直接用null就可以,感兴趣的可以去查查api

第三个参数是表名:null 和“%”都表示所有的表,其中是区分大小写的,必须是大写才可以

第四个参数:types – 要包括的表类型所组成的列表,必须取自从 getTableTypes() 返回的表类型列表;null 表示返回所有类

例如:new String[]{“TABLE”,”VIEW”}

只有在hsqldb中测试通过,其他数据库没有测试

–EOF–

2009年11月21日

用MyEclipse和googlecode 的svn控制自己的代码

因为经常在公司和自己电脑上写程序,可以尝试用googlecode控制一下自己的代码

具体可以参考网上的这篇博文,很详细

http://blog.sina.com.cn/s/blog_5d31611a0100fkml.html

总结一下 ,希望对打算使用googlecode的人有所帮助(假设MyEclipse的svn和gmail都有):

1.打开http://code.google.com/hosting/ ,点击下面那个Create a new project的超级链接

创建成功后访问自己的项目主页:http://code.google.com/p/项目名称,例:http://code.google.com/p/usc/(上文那个博主的一个项目)

2. 点击右侧的星星,点亮后可以获取svn的密码(setting),用户名就是你的gmail地址,这样svn服务器就建立好了

3. MyEclipse切换到svn模式下(右上角,可以选java、debug之类的那个,现在选svn)

右击-》new-》Repository Location,输入https://项目名称.googlecode.com/svn/

注意是googlecode.com 不是google.com

用户名为你的Gmail邮箱全名(包括@gmail.com),密码为刚刚在创建项目时候Setting里面的密码(不是你的Gmail 邮箱密码)

4.新建一个工程,右击工程名,team-》Share Project……就可以把你的工程上传到svn上了

补充:第二步中可能获取不了svn密码,页面不返回,可以换下浏览器(opera有时不行,换下ie,ff就好了),实在不行,就用代理登录,然后获取密码,保存好,以便以后使用

–EOF–

2009年11月12日

MyEclipse中Resin因为out of memory自动关闭的解决

1.方法1

Window-》preferences-》java-》installed JREs

选中您的虚拟机,点edit

在Default VM Aguments中加如下参数:

-Xms128M -Xmx512M

 

2.方法二

在配置resin路径的时候,点jdk,在Java VM arguments中填写:

-Xms512m -Xmx1024m

 

建议使用第二种方法

 

原因:MyEclipse默认分给Resin的内存太小造成的,这样就可以解决了。

 

 

–EOF–

2009年10月26日

把sql脚本导入powerdesigner

前几天研究wordpress的数据库设计,直接看sql导出的sql语句不直观,于是使用了powerdesigner的导入sql脚本功能,这样分析数据库的设计就更直观了。

1.安装wordpress后,程序就自动创建好了表(这个功能很人性化),我们要做的就是把创建表的sql语句导出,使用mysqldump命令导出

D:\>mysqldump -uroot -proot wpblog > wpblog.sql

D:\>

那么在D盘就生成了wordpress的数据库脚本,然后删掉注释和插入数据的语句(注释和插入数据挨着,所以删除很简单),不删除一些数据,powerdesigner可能会没响应

2.打开powerdesigner,选择File –> Reverse Engineer –> Database……

Model name随便写,我填的是wpblog,DBMS选MySQL 5.0

然后确定

在Selection选项卡中选:Using scripts files:添加刚才的导出的sql脚本(wpblog.sql)

Options选项卡中的File Encoding 选择:UTF8+QuickDetect

然后确定,一切OK

看来用powerdesigner设计数据库,导出SQL(右击空白处–>Properties–>Preview),用sql脚本看数据库的设计真的很方便。

–EOF–

返回顶部