由於剛接到一份需求,是處理幾張報表(好無聊啊,是公司經理交待下來的,分析了一下只能自己做了。。。我都幾年沒寫java的東東了).數據庫源要從多個文本文件、sql server數據庫中取,最後數據要在db2中處理,而且,最終數據還會移到informix下(好煩,不過沒辦法,這不是一個公司做的,要整合啊)。本文主要是圍繞這幾個問題展開。
1.昨晚裝好db2就回家了,今天上班後開始找它的驅動,後來才發現db2 8.1已經裝了jdbc驅動,需要配置一下就可以了。
在控制中心裏點了點,簡單看了看它。試着導入文本文件,|分隔的,不行...先放着吧....
進入命令行工具,db2>
connect to SAMPLE user db2admin using admin;
連接到sample庫,不成功!刪除分號,成功..原來不能加分號啊,是oralce/mysql/informix用習慣了?奇怪的是控制中心中生成的sql也有分號啊?
CONNECT RESET 關閉連接,建個測試庫吧:
db2 => create db test
DB20000I CREATE DATABASE 命令成功完成。
create table test(name character(50),age integer)
insert,select都成功,真幸運!
轉到控制中心去建了表,select出錯,網上查了查,才知道是原來是模式的問題,改爲
select * from db2admin.test 執行成功,其中db2admin是表所對應的模式名
2.導入導出數據
我比較關心的是導入,在控制中心中試了幾次,不成功。網上查...後來終於成功了:
load from d:/test.txt of del modified by coldel| insert into test
load from d:/test.txt of del modified by coldel| insert into test(name,age)
load from d:/test.txt of del modified by coldel| method p (1, 2) MESSAGES D:/bl_acc.log insert into test(name,age)
把上面的load換成import報錯。不知道import導入的話,該怎麼用?不管了,我能完成工作就OK。
導出數據我試了試,也有問題,
EXPORT TO C:/1.txt OF DEL MODIFIED BY COLDEL| MESSAGES t SELECT * FROM DB2ADMIN.TEST;出錯!
想了想導出以後再說,先測試jdbc吧
3.測試jdbc連接
把dbjcc.jar和db2java.jar複製到了tomcat的common/lib目錄下,使用下面的jsp測試,OK!
<%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%>
<html>
<body> 從db2數據庫讀取的數據:
<hr>
<table border=1 bordercolor=black>
<%
String driver = "com.ibm.db2.jcc.DB2Driver"; //大小寫,cpp/jcc
String url = "jdbc:db2://localhost:50000/jmreport";
String user = "db2admin";
String password = "admin";
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
ResultSet rst = stmt.executeQuery("select * from test");
while (rst.next()) {
out.println("<tr>");
out.println("<td>" + rst.getString("name") + "</td>");
out.println("<td>" + rst.getString("age") + "</td>");
out.println("</tr>");
}
//關閉連接
rst.close();
stmt.close();
con.close();
%>
</table>
</body>
</html>
再用一個控制檯程序測試,順便給它加了個參數,以實現db2數據表導出到文件。因爲以後可能會用到。
import java.sql.*;
/*
db2數據表導出工具
usage:
java DB2Test jmreport @
java DB2Test jmreport "|"
why 20060725
*/
public class DB2Test {
public static void main(String[] args) {
//String driver = "COM.ibm.db2.jdbc.app.DB2Driver";
//String url = "jdbc:db2:jmreport";
if (args.length == 0 || args.length == 1) {
System.out.println("Command Line Error!/nUsage:/njava DB2Test jmreport @/njava DB2Test jmreport /"|/"");
System.exit(1);
}
String driver = "com.ibm.db2.jcc.DB2Driver"; //大小寫,cpp/jcc
String url = "jdbc:db2://localhost:50000/" + args[0];
String user = "db2admin";
String password = "admin";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
//System.out.println (url);
if (!conn.isClosed()) {
; //System.out.println("數據庫連接成功!");
}
Statement stmt = conn.createStatement();
String strSql = "select * from test";
ResultSet rs = stmt.executeQuery(strSql);
while (rs.next()) {
System.out.print(rs.getString(1).trim());
System.out.print(args[1]);
System.out.print(rs.getString(2).trim());
System.out.println();
}
conn.close();
}
catch (ClassNotFoundException e) {
System.out.println("找不到驅動程序");
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
最後,可能用:java DB2Test jmreport "|" 或java DB2Test jmreport # 這樣的命令來導出數據表,比從控制中心導應該方便快捷一點:)
不知道怎麼回事,我配置了半天程序也找不到db2java.zip裏的驅動,改成jar文件也不行,故而上面都使用的是jcc的方式連接的DB2
寫了這麼多,不知道對別人有沒有用,就當工作日記吧。明天要寫存儲過程,寫shell、服務程序來導入、同步數據什麼的了,但願不要跟其它數據庫區別太大啊....