2010-3-11

昨天那碗牛肉汤喝的,罪过罪过!失眠。。。两点多才睡着估计!momo!一身发热,嗨!杯具呀!看书看到大概一点,后来死活睡不着,只好上QQ聊天,然后有人建议我开窗户,Okay,good idea,聊得困了,睡,忘记关窗户了,这下真悲剧了,半夜醒的时候才知道是冷醒的,momo!感冒八九不离十了! 睡前看了item39,关于make defensive copy的!实用性一般般吧! 当一个类中declare另外一个类的实例时,有个问题就是如果它是final的,看上去是不能改了,可是在外部可以通过这个类实例内部的方法来改变这个实例!所以这种scenario下就要用到defensive copy!比如一个final的Date类,Date本身的setxxx方法是可以改变的!所以应该申明成this.date = new date(outDate.gettime()).这样,无论outDate如何改变,内部的date都不会受影响!而如果直接把outDate赋给date的话,那就完全不同了!dangerous!这也是著名的time of check/time of use攻击!

因为失眠,早上九点多才醒来!鼻子塞了,喉咙稍痛,果然

。。。嗨!造孽呀!起来吃了点东西,一开电脑老爸就说话了,于是视频,说话。身体不舒服也没有什么心情看书,就在网上瞎逛!嗨!青春呀!
中午没精神,不想做饭,又煮面吃!牛肉汤解决了!吃完饭全身乏力,,,嗨,只能睡觉了!睡到两点多起来去学校,跟partner meet,为621的project分工了一下!希望一切顺利!身体感觉还是不好,于是临时叫室友去aquatic center,在跑步机上边看ncaa边跑了二十分钟步,跟乏力,下去器械上锻炼了下肌肉,还是酸酸的!前天练的有点伤!从gym出来去游泳,换完衣服实在是没有力气游了,于是去热水池泡泡按摩了下,然后去最终目的地—干蒸室,创纪录的在里面坐了将近二十分钟,出了n多汗!为了感冒,拼了!!!出来人都有点站不稳了!不过—–出来洗完澡哦感觉就好很多了,看来这种疗法效果还是有的!

回到家还是不想做饭,吃饺子把晚饭打法了!看了个纪录片,老美的乡村风光无限美呀。不知道怎么,有一天下午在南坑睡完午觉起来跟她手牵手绕着整个村子走一圈的情景突然在脑海里浮现。和喜欢的人相偎漫步乡间小道,感觉还是很惬意的。那时候心里还在想,也许几十年后还是这种情景,只是人变老了;可如今正好相反,已是物是人非,人生无常呀!想着想着心里不是滋味,不对!不能让自己陷入这种情绪。赶紧打开虚拟机,开始新的web征尘!前途可是奋斗出来的~看完又十一点多了。Orz!~

主要复习了一下jdbc,用了这么多年jdbc了,驱动那些东西懒得自己写,都是copy过来,没有真正去研究过它的内部实现,好,今天有机会了!

自己总结了一下JDBC的七个基本步骤:


1. 载入JDBC驱动: 使用Class.forName()方法,这样可以在不生成实例的情况下载入,而且是引用在代码编译时并不知道其名称的类!抛出ClassNotFoundException。比如Class.forName(“oracle.jdbc.driver.OracleDriver”)


2. 定义连接URL: 指定数据库服务器的位置,协议是jdbc:协议。比如jdbc:mysql://localhost:3306/test。


3. 建立连接: 将URL,用户名和密码传递给DriverManager类的getConnection方法。Connection con = DriverManager.getConnection ( “jdbc:mysql://localhost:3306/test”, “root”, “6853396”);


4. 创建Statement对象: Statement对象用来向服务器发送查询和命令。它由Connetion的createStatement方法创建。 Statement stmt = connetion.createStatement();


5. 执行查询或更新: 有了Statement对象就可以使用executeQuery或者executeUpdate方法来执行查询和更新。


6. 结果处理: 使用ResultSet的next方法,一个个遍历使用!一般是用getString方法。比如:rs.getString(1) 或者 rs.getString(“fieldName”),前者通过index来获取,记住,从1开始,不是0!后者直接通过列名来获取!当然也可以用getInt等方法。  另外有getMetaData可以获取列的名称,数目和类型等。通过ResultSetMetaData返回结果。有getColumnName,getColumnCount,getColumnType等方法。


7. 关闭连接: connetion.close();

另外还看了一下事务管理的内容,例子:钱从支票账户到储蓄账户,如果先减支票账户钱再加储蓄账户,中间发生故障,则用户损失,。反之,若先加储蓄账户再减支票账户,中间发生故障,则银行损失。要解决这个问题,就必需用到事务管理! 实现的话:在try块中,setAutoCommit(false)来关闭连接的自动提交,并执行查询或者更新。如果发生故障,则在catch块中调用rollback。若事物成功,在try块结尾调用commit。最后在finally中重置自动提交状态。这些都是通过connection的方法。

本来还想再复习复习html各种标签,实在是困了,希望明天感冒全好!momo!该还是622的project了,不然真是没法跟partner们交代了!上床在看会effective! Bless me!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s