IBM Db2

IBM Db2

傻逼 IBM 出的数据库服务器,网上资料少的可怜,用个Java官方的库db2jcc4.jar连class reference都找不到;官网文档页面慢得要死,还用js搞了个禁止复制。纯属傻逼。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

傻逼弱智脑残IBM去死。

config

env

# mysql compatiblity mode, enable "limit <n> offset <m>" sql syntax
db2set DB2_COMPATIBILITY_VECTOR=MYS

cli

貌似这货和另一个傻逼 Oracle一样,每个实例(instance)需要单独的OS 用户名登录?

例如如果数据库实例是 x, 先用 su - x 切换到 x 用户,然后在执行任意管理命令。

  • db2ilist # 查看已安装的 db2 实例列表
  • db2ls # 查看已安装的 db2 实例版本信息
  • db2 list db directory # 数据库列表
  • db2start # 启动数据库
  • db2stop force; db2start # restart db2
  • db2 "get dbm cfg"|grep -i svce # get db2 port
  • db2set REGISTRYNAME[=VALUE] # view or set registry variable value
  • db2cli execsql -connstring "DATABASE=db;HOSTNAME=hostname;PORT=123;UID=user;PWD=pass" # 进入执行sql的CLI界面。这个命令可以在任意机器上执行(指定了connstring后远程连接)

常见 SQLCODE 错误码

-104: ILLEGAL SYMBOL "token". 比如 sql 语句语法错误,末尾多了一个分号等等 ;

-204: name IS AN UNDEFINED NAME, 表/视图不存在. 注意傻逼 DB2 的表名/视图名/schema名等区分大小写。

SQL0332N Character conversion from the source code page "1392" to the target

fix:

db2set DB2CODEPAGE=1386

Driver

Java JDBC Driver

// db2jcc4.jar (JDBC 4.0 DB2 Driver)
import java.sql.*;

try {
  Class.forName("com.ibm.db2.jcc.DB2Driver"); // do not need manually load?
  // DriverManager.registerDriver(new com.ibm.db2.jcc.DB2Driver());
  Connection con = DriverManager.getConnection("jdbc:db2://host:5021/db:user=foo;password=123456;currentSchema=schema;");
} catch( Exception e) {
  e.printStackTrace();
}

Or Use DataSource:

// db2jcc4.jar
import javax.sql.DataSource;
import com.ibm.db2.jcc.DB2SimpleDataSource;

DB2SimpleDataSource ds = new DB2SimpleDataSource(); // implementing javax.sql.DataSource
ds.setDriverType(4);
ds.setServerName("1.2.3.4");
ds.setPortNumber(50000);
ds.setDatabaseName("dbname");
ds.setUser("user");
ds.setPassword("pass");
ds.setCurrentSchema("schema");
ds.getConnection();

Tips:

  • 如果不指定 schema,默认 schema 是登录数据库的用户名。
  • 傻逼 DB2 这个数据库经常爆莫名其妙的错误,有时重启一下傻逼 DB2 服务就好了。
  • 傻逼 DB2 的对象名(table,schame等)区分大小写。但是傻逼 IBM 提供的 傻逼 DB2 傻逼 Java 驱动(db2jcc4.jar)是一群脑残写的傻逼代码,其执行 "create table xx" 时会原封不动地创建一个 "xx" 表,但是执行 "select * from xx" 时却自动将 "xx" 转换成大写的 "XX" 传给数据库,所以然后就会爆 "SQLCODE=-204, SQLSTATE=42704" 错误。所以 create table 时必须显式地指定大写的 schema 和 table 名。(这就是说,只要表名里有小写字母,那么傻逼 Db2 的 傻逼 Java 驱动就无法访问它。写这个傻逼驱动的到底有多脑残?)

Dummy Table

Use for connection validation:

select 1 from SYSIBM.SYSDUMMY1


Last update: 2018-04-08 03:25:48 UTC