SQLServer解析xml到Oracle
写了一个程序:根据状态位读取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。
未解决……
暂时就本地运行。