寫了一個程式:根據狀態位讀取SQLserver 中的一張表,下載其中一個欄位的值,這個值是XML型別的,然後把這個XML檔案的內容插入到另一Oracle資料庫,並更新SQLServer表的標誌位,表示這條記錄已經更新過。
我的思路是用java寫個webservice,然後再用C#寫個windows 服務每過30分鐘執行一次。用java寫業務是因為我覺得java操作oracle相對方便一點。用C#寫windows服務是是因為我只知道能用C#寫windows service,後臺靜默執行挺好。
看似簡單的程式,最後真正實現需求居然也花了3天時間,因為遇到了幾個小問題,並且還有未解決的。
接下來羅列一下遇到的問題。
Q1 java解析XML內容
已解決:參考http://www.ibm.com/developerworks/cn/xml/dm-1208gub/index.html
用的是第一種DOM方法
Q2 java jdbc連線Oracle資料庫問題
已解決:關鍵程式碼如下
String driverClassName = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@//192.168.101.22:1521/orcl";
注意,java程式碼裡的sql語句最後不要寫分號,否則會報錯 java.sql.SQLSyntaxErrorException: ORA-00911: 無效字元 。
Q3 java 怎麼寫一個webservice
已解決:
參考:http://javapapers.com/web-service/java-web-service-using-eclipse/
寫好java 類以後(Dynamic Web Project工程下),直接右擊新建webservice。
需要注意的是,要生成的方法必須是小寫字母開頭的,否則就無法呼叫了。java裡方法要小寫開頭!
我用java 寫好了一個Service類。接下來就是
Q4 下載好了XML檔案,然後在解析這個XML檔案時,發生了異常:
xml中1位元組的UTF-8序列的位元組1無效([字元編碼]Invalid byte 1 of 1-byte UTF-8 sequence
引起這個問題的原因是,java下載XML檔案預設編碼格式是GBK,而我們用DOM去解析xml檔案的時候,用的是UTF-8的方式去解析,編碼對不上,所以不能識別xml文件。
http://bbs.itheima.com/thread-29901-1-1.html
http://blog.csdn.net/zhangzhikaixinya/article/details/7727938 這種方法我沒試過
程式碼實現
1 /** 2 * 寫日誌 3 * @param logpath 日誌檔案路徑 4 * @param logtext 日誌內容 5 */ 6 public void WriteLog(String logpath,String logtext) 7 { 8 File file = new File(logpath); 9 10 try 11 { 12 //Writer out = new FileWriter(file,true); 13 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file, true),"utf-8"); 14 out.write(logtext); 15 out.close(); 16 } catch (IOException e) 17 { 18 // TODO Auto-generated catch block 19 e.printStackTrace(); 20 } 21 }
Q5 寫好了程式,釋出本地,測試通過,釋出到遠端伺服器上,呼叫提示404 找不到資源。我用C#呼叫的java webservice。
未解決……
暫時就本地執行。