由于刚接到一份需求,是处理几张报表(好无聊啊,是公司经理交待下来的,分析了一下只能自己做了。。。我都几年没写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、服务程序来导入、同步数据什么的了,但愿不要跟其它数据库区别太大啊....