今天第一天使用DB2,遇到些問題

 由於剛接到一份需求,是處理幾張報表(好無聊啊,是公司經理交待下來的,分析了一下只能自己做了。。。我都幾年沒寫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、服務程序來導入、同步數據什麼的了,但願不要跟其它數據庫區別太大啊....



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章