posts - 5,  comments - 0,  trackbacks - 0
            2010年5月15日
          今天在用IBATIS幫別人寫個(gè)程序的時(shí)候突然出現(xiàn)了一個(gè)很怪異的錯(cuò)誤
          com.ibatis.common.jdbc.exception.NestedSQLException:   
          --- The error occurred in ./map/Guest.xml.  
          --- The error occurred while applying a result map.  
          --- Check the Guest.listGuest.  
          --- Check the result mapping for the 'password' property.  
          --- Cause: java.sql.SQLException: Column 'userpwd' not found.


          at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
          at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
          at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:567)
          at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:541)
          at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
          at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:94)
          at com.zhxingchen.guestbook.dao.impl.BaseDAOImpl.queryAll(BaseDAOImpl.java:36)
          at com.zhxingchen.guestbook.dao.impl.GuestDAOImpl.queryGuestByProperty(GuestDAOImpl.java:68)
          at com.zhxingchen.guestbook.dao.impl.TestGuestDAO.testQueryByProperty(TestGuestDAO.java:55)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
          at java.lang.reflect.Method.invoke(Unknown Source)
          at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
          at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
          at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
          at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
          at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
          at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
          at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
          at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
          at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
          at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
          at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
          at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
          at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
          at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
          at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
          at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
          Caused by: java.sql.SQLException: Column 'userpwd' not found.


          at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:983)
          at com.mysql.jdbc.ResultSet.getString(ResultSet.java:4826)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
          at java.lang.reflect.Method.invoke(Unknown Source)
          at com.ibatis.common.jdbc.logging.ResultSetLogProxy.invoke(ResultSetLogProxy.java:47)
          at $Proxy7.getString(Unknown Source)
          at com.ibatis.sqlmap.engine.type.StringTypeHandler.getResult(StringTypeHandler.java:35)
          at com.ibatis.sqlmap.engine.mapping.result.ResultMap.getPrimitiveResultMappingValue(ResultMap.java:619)
          at com.ibatis.sqlmap.engine.mapping.result.ResultMap.getResults(ResultMap.java:345)
          at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleResults(SqlExecutor.java:384)
          at com.ibatis.sqlmap.engine.execution.SqlExecutor.handleMultipleResults(SqlExecutor.java:300)
          at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:189)
          at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221)
          at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)
          ... 28 more
              出現(xiàn)這個(gè)錯(cuò)誤的當(dāng)頭我就懵了,我怎么也想不明白數(shù)據(jù)庫(kù)里面怎么會(huì)沒有userpwd這個(gè)字段,我反復(fù)的對(duì)照都感覺數(shù)據(jù)庫(kù)里是有的啊,最后終于讓我找出了問題所在,等知道后我就暈了,一個(gè)很簡(jiǎn)單的映射錯(cuò)誤,我居然反復(fù)了看了3個(gè)小時(shí),可能是熬夜了思維停滯了吧!
          以下是SQLMap.xml的兩段段代碼:第一段是定義了一個(gè)resultMap,第二段是利用這個(gè)resultMap返回
          <resultMap id="listGuest" class="guest"> <result property="id"/> <result property="userName"/> <result property="password" column="userpwd"/> <result property="realName"/> <result property="gender"/> <result property="age"/> <result property="email"/> <result property="qq"/> </resultMap>
          <statement id="queryGuestByProperty" parameterClass="guest" resultMap="listGuest"> SELECT ID as id, USERNAME as userName, USERPWD as password, USERREALNAME as realName, USERSSEX as gender, USERAGE as age, USEREMAIL as email, USERQQ as qq FROM GUEST <dynamic prepend="WHERE"> <isNotNull prepend="AND" property="password"> USERNAME=#userName# </isNotNull>
          ...............
          也許不仔細(xì)看還真看不出來(lái),其實(shí)USERPWD在取出來(lái)的時(shí)候就已經(jīng)轉(zhuǎn)換成password了,難怪在resultMap中始終找不到userpwd,這樣要是能找到才怪!~
          改的話很容易,我傾向于改resultMap文件,將password后面的 column="userpwd"去掉就OK了!~
          萬(wàn)事還得謹(jǐn)慎!!!!!
          posted @ 2010-05-15 06:57 Zhjiang 閱讀(1012) | 評(píng)論 (0)編輯 收藏
            2010年5月14日
          今天早上在上班的路上突然想起來(lái)《錦瑟》,于是隨便念了一下,走著走著,突然想讀讀這首詩(shī),不為其他,只為興起。
          錦瑟  李商隱
          錦瑟無(wú)端五十弦,一弦一柱思華年。
          莊生曉夢(mèng)迷蝴蝶,望帝春心托杜鵑。
          滄海月明珠有淚,藍(lán)田日暖玉生煙。
          此情可待成追憶,只是當(dāng)時(shí)已惘然。

              讀詩(shī),少不了要說(shuō)作者的,李商隱(約812年或813年1—約858年),字義山,號(hào)玉谿生、樊南生。晚唐詩(shī)人。原籍河內(nèi)懷州(今河南沁陽(yáng)),祖輩遷滎陽(yáng)(今河南鄭州)。(此段摘自維基百科)
              這首詩(shī)描寫了很多種物,也引用了兩個(gè)典故,只有最后一聯(lián)寫的是情義。
              首先,我們來(lái)看看這首詩(shī)里面的物,分別有錦瑟,蝴蝶,杜鵑,滄海,月亮,珍珠,淚水,藍(lán)田,太陽(yáng),玉,煙等等。除去中間引用的典故,其他基本都是靜物。首先寫錦瑟,這件物事開篇第一句就托出來(lái)了,點(diǎn)明全篇,我想當(dāng)時(shí)作者可能是看到了這樣一個(gè)錦瑟才引發(fā)了感慨,而且感慨頗深,每一弦一個(gè)雁柱都讓作者想到了以前的歡樂的時(shí)光,可見這件物事對(duì)他來(lái)說(shuō)銘心刻骨。然后是蝴蝶和杜鵑,當(dāng)然這兩個(gè)事物是作者引用的典故,其中有莊子的物我相容的典故和望帝的化杜鵑以寄意,可見作者對(duì)物的看法,也就進(jìn)一步點(diǎn)名作者此刻的心情可能是和錦瑟想容了,或者是作者將這個(gè)物看作了另一個(gè)人,即借物懷人,這個(gè)我們?nèi)粘R苍鴷?huì)有,譬如說(shuō)有時(shí)候你看到一個(gè)鐲子,可能和你送給你的朋友的信物很像,多年不見早已忘懷,如今再見,難道在你眼中只看到了那個(gè)鐲子么?然后是滄海這一聯(lián),這一聯(lián)中一連寫了好多物事,有八個(gè)之多吧,其中有像珍珠、玉這樣富貴的物事,也有像淚水,煙那樣易逝讓人悲傷的物事,更有像滄海、月亮、太陽(yáng)、藍(lán)田等亙古不變的物事,可見作者既描寫了漫長(zhǎng),也描寫了短暫,既描寫了歡樂,也描寫了悲傷,然而,快樂并非是永久的,因?yàn)辄c(diǎn)題的兩個(gè)物事是淚和煙,可見歡樂的時(shí)光很短暫而悲傷和思念卻相當(dāng)漫長(zhǎng),可見作者思念之深。
              其次,這首詩(shī)里有一句是抒情的,此情可待成追憶,只是當(dāng)時(shí)已惘然。那份情義本來(lái)是可以去期盼的但現(xiàn)在只能追憶,只是當(dāng)時(shí)已經(jīng)迷茫了。此句點(diǎn)題也呼應(yīng)了第一聯(lián)看到錦瑟后懷人。
              在這里我突然想起了一些故人,也許當(dāng)年的吵鬧其實(shí)真的沒什么,卻又葬送了一段美好的情義,難道我們不也是迷茫了么?因而,要好好把握現(xiàn)在的這份感情,畢竟在數(shù)十億記的人群里,我們相遇,相知,到相愛是多么的不易,何苦非要鬧到以后看到了一些舊物卻只能以淚洗面,借物懷人呢!
              Ps: 在這首詩(shī)里的藍(lán)田,我在幾年前曾去過,一個(gè)本來(lái)以玉石聞名的地方現(xiàn)在只有青山依在,綠水長(zhǎng)流。可見,就算有的時(shí)候是掌握了資源,掌握了財(cái)富,若干年后大家也沒什么不同。所以對(duì)于那些和我一樣在大都市里尋找角色的朋友,請(qǐng)你們不要悲傷,也不要郁悶,生命很短暫,如何在有限的時(shí)間里讓生命更充實(shí),讓生活更輕松,讓自己更快樂才是我們所應(yīng)該考慮的事情。因?yàn)椋覀円嘈牛瑫r(shí)間才是仲裁者,一切的不平等,不平均在時(shí)間的面前都是泡沫,最后等會(huì)消散于無(wú)形。另外,藍(lán)田值得你去看一下! 
          posted @ 2010-05-14 19:57 Zhjiang 閱讀(208) | 評(píng)論 (0)編輯 收藏
          Apache Qpid:
          Wiki上的描述是:
          Apache Qpid is an open source (Apache 2.0 licensed) messaging system which implements the Advanced Message Queuing Protocol. It provides transaction management, queuing, distribution, security, management, clustering, federation and heterogeneous multi-platform support.
          另外 Apache Qpid 還有很多特點(diǎn),具體請(qǐng)查閱 http://qpid.apache.org/

          OK,不廢話,進(jìn)入正題,我今天搞了一天才將其配置好,稍微會(huì)有一點(diǎn)麻煩,不過還算好用,對(duì)于用到Message Queue或者想用的朋友,可以嘗試一下!
          首先進(jìn)入http://qpid.apache.org/getting-started.html,然后進(jìn)入download 頁(yè)面,由于我是用JAVA來(lái)開發(fā),所以我選擇下載Mutiple Component Packages條目下的JAVA broker,client & tools這一個(gè),用C++開發(fā)或者其他語(yǔ)言開發(fā)的也可以適當(dāng)選擇下載。另外還有一個(gè)適用的工具可以下載是在Management tools條目下面(是一個(gè)基于Eclipse RUP 的軟件,由于今天調(diào)了半天沒調(diào)好所以就不說(shuō)明了)
          然后回到getting-start那一頁(yè)看安裝說(shuō)明: 在這里我稍微說(shuō)下吧,反正也很簡(jiǎn)單(解壓什么的就略過了)!
          1. 設(shè)置環(huán)境變量,這里有兩個(gè)環(huán)境變量需要設(shè)置 QPID_HOME 和QPID_WORK,上面的E問很簡(jiǎn)單,QPID_WORK是用來(lái)設(shè)置broker產(chǎn)生文件的路徑,主要是LOG吧。
          2.修改%QPID_HOME%\etc\config.xml文件,主要是修改management下面的<keyStorePath></keyStorePath>的文件路徑,否則直接啟動(dòng)會(huì)出現(xiàn)一個(gè)莫名其妙的找不到文件的錯(cuò)誤
          3.修改%QPID_HOME%\bin\create-example-ssl-strores.bat文件這里要修改三處,將-keystore后面的路徑換成你在第二部設(shè)置的文件路徑,這里可以看到這個(gè)批處理文件其實(shí)用的是%JAVA_HOME%\bin的keytool命令,有關(guān)keytool的命令詳解可以看http://shenzhenchufa.blog.51cto.com/730213/169390(這篇不是我寫的,不好轉(zhuǎn)載,只好給鏈接,但是很詳細(xì))
          4.執(zhí)行create-example-ssl-strores,然后執(zhí)行qpid-server命令即可,你可以發(fā)現(xiàn)broker很正常的啟動(dòng)了
          在測(cè)試到broker啟動(dòng)之后可以利用svn Check(https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/example/)來(lái)得到具體例子(PS:什么還不會(huì)有SVN???)里面的例子寫的還不錯(cuò),很詳細(xì),示例可以導(dǎo)入eclipse中執(zhí)行,當(dāng)然,在執(zhí)行示例的時(shí)候如果把broker給關(guān)掉了就不能出來(lái)結(jié)果了,當(dāng)運(yùn)行jmsexample下面的Hello.java出現(xiàn)了Hello world時(shí),那么恭喜你,Qpid安裝成功了,然后想干什么就可以具體發(fā)揮了!

          對(duì)于JMS的Prodcer(PTP)/Publisher(PUB/SUB)執(zhí)行步驟一般是
          1.通過ConnectionFactroy得到Connection(請(qǐng)注意Qpid示例中properties文件的connectionfactory.xxxxx鍵后面對(duì)應(yīng)的值一般都是amqp://xxxx:xxxx@xxxx/xxx?brokerlist='tcp://localhost:5672'格式的)
          2. 通過Connection獲得一個(gè)Session(PTP)/TopicSession(PUB/SUB)
          3. 獲得MessageProducer(PTP)/Topic(PUB/SUB)
          4. 產(chǎn)生/發(fā)布消息
          5. 關(guān)閉Connection(當(dāng)關(guān)閉Connection的時(shí)候,Session 也會(huì)自動(dòng)關(guān)閉)
          消費(fèi)者/訂閱之的執(zhí)行步驟幾乎差不多,就是第四步是消費(fèi)/訂閱消息

          好了,今天就寫到這吧,很簡(jiǎn)單的介紹,以后再慢慢寫,有什么問題,大家可以共同探討下!
          最后,注意文明用語(yǔ),謝謝!~~~~

          posted @ 2010-05-14 18:48 Zhjiang 閱讀(1222) | 評(píng)論 (0)編輯 收藏
            2010年5月13日
          無(wú)聊的PM和無(wú)聊的Manager居然想把項(xiàng)目集成為一個(gè)永久擴(kuò)展的框架,于是無(wú)辜的我只好又抱著JMS看了一天,我滴神啊!什么世道啊!~~

              不過話說(shuō)回來(lái),JMS還不錯(cuò),就是很煩!~~~

              今天就這樣吧,找個(gè)時(shí)間解釋下JMS的名詞吧,今天太無(wú)聊了,而且馬上還要寫一堆的論文,總之一個(gè)字,煩!~~~~~~
          posted @ 2010-05-13 18:39 Zhjiang 閱讀(213) | 評(píng)論 (0)編輯 收藏
            2010年5月12日
              虛過廿伍載,不曾記片言,如今憶往昔,恍若兩重天。當(dāng)以勤字訣,隨心記此愿,不想來(lái)年似今時(shí),無(wú)甚可掛念!

          第一次寫技術(shù)blog,有很興奮的感覺,我對(duì)Java也不是很熟,屬于剛?cè)腴T型的,所以估計(jì)不能寫出很好的技術(shù)文章,不過還是盡我所能,誰(shuí)叫我入了IT這一行呢,唉!~~~~

          這里以后就是我的小家了,歡迎各位光臨!

          額,時(shí)間不早了,眼看就要小班一個(gè)小時(shí)了,嘿嘿,閃了先,今天就寫一點(diǎn)吧,以后再慢慢來(lái)!~
          posted @ 2010-05-12 18:46 Zhjiang 閱讀(138) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 福泉市| 临沂市| 分宜县| 淮阳县| 渭南市| 克什克腾旗| 遂宁市| 竹山县| 新余市| 濮阳县| 揭阳市| 青神县| 龙州县| 西和县| 金溪县| 景德镇市| 湖口县| 寿阳县| 长治市| 马公市| 黔西县| 永定县| 兴和县| 邯郸县| 名山县| 济源市| 海城市| 肇庆市| 和顺县| 伊吾县| 巨野县| 杨浦区| 秦安县| 阿拉善左旗| 嘉黎县| 阿坝| 沭阳县| 宜丰县| 渑池县| 济南市| 上饶县|