-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Watson DB2 (Connection Pool) #131
Comments
大坑.可以说是power designer的坑, 可以说是dashDB的坑. 有两条sql select t.* from t_user t
select t.user_id from t_user t 第一条正常, 第二条报如下错误.
字段名确认了就是user_id select '<' || name || '>' from sysibm.syscolumns where tbname = 'T_USER';
1
----------
<PASSWORD>
<user_id>
<ORG_ID>
<USERNAME> 难道.. 字段名 不能用小写. ,我改成 create table T_USER (
"user_id" INT --- 不能这样写
"USERNAME" VARCHAR(32) not null, -- 这样写没问题
password VARCHAR(32) not null, -- 这样写没问题
); 当然, 错误只会在你使用字段名做查询的时候才会触发, 建表, 插数据, select *等其它一切情况都完全正常. 结论, 不要太相信工具, 要是我手写SQL就不会加上这些该死的""号. 小坑rs和stmt只有 |
sequence建法(copy 自 dbv) CREATE sequence "DASH7609"."XXX_SEQ" AS INTEGER START WITH 1 increment BY 1 no minvalue no maxvalue
no cycle cache 20 no ORDER 各种使用方法 select NEXT VALUE for USER_SEQ as SEQ from sysibm.sysdummy1
INSERT INTO t_user (user_id, username, password) VALUES (NEXT VALUE FOR USER_SEQ, 'xxx','yyy', 1)
SELECT NEXT VALUE FOR SEQUENCE_COL;
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (NEXT VALUE FOR SEQUENCE_COL, ...);
SELECT PREVIOUS VALUE FOR SEQUENCE_COL;
SELECT SEQUENCE_COL FROM NEW TABLE (
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (NEXT VALUE FOR MY_SEQUENCE, ...)
)
可以看到 |
Db2 on cloud(先前叫dashDB), 注册需要credit card
Db2 warehouse, 可以免费注册, 以此为例, 它提供了各种编程语言的API, NODE的还是那个叫ibm_db的
提供了JDBC URL, 但是密码使用的placeholder. 需要点左边的credentials, 创建一个credential 然后从json格式的一个文件中找到密码部分.
可以用DBVisualizer连上去, 并可以建表和建SEQ.
Sybase Power Designer可以建Physical Data Model (PDM) 然后生成对应的SQL
Db2 warehouse提供的UI只能建表, 找不到建sequence的地方.
node-ibm_db
node-ibm_db是ibm db2的node版驱动. 安装
npm install ibm_db --save
,安装过程要下载好几十M的clidriver安装包, 并且因为墙的原因可能会经常安装失败(下载的压缩包格式损坏)
官方的安装文档提供了不用重复下载clidriver的办法, 如果你之前有在其它项目已经用npm安装过ibm_db , 执行如下命令可以秒安装:
也可以使用yarn安装:
yarn add ibm_db
20170929: 今天在新项目安装ibm_db报错:
换成yarn的时候有如下提示
NM的, 原来macOS自动更新了我的Xcode至9.0, 我得打开xcode同意一下新的条款. WTF
connection pool
从官方docs中找到了一些关于pool的文档, https://github.com/ibmdb/node-ibm_db#PoolAPIs
文档上关于init方法, 有如下示例代码
一开始没怎么看明白, 比如init方法为什么没有callback, 要是出错了怎么知道(ret != true呗), 那出错的具体原因在哪? debug了一下源代码, :
原来
init
是一个阻塞方法, 内部会循环调用Database.openSync(...)初始化连接, 并将connection放在一个内部数组里.init方法的返回值(示例中的ret)要么为true(表示pool初始化成功), 要么是一个Error Object. (出错的堆栈信息全在里面)
最后要注意的是连接bluemix上的db2, 需要在connectionString最后拼上
Security=SSL
据此我设计了自己的db2 pool工具类
db2.js
, 如下我在
./bin/www
初始化日志组件log4js就立即初始化db2 pool, 这样如果有任何出错的日志, 会记录到日志文件, 并且如果db2 pool 初始化失败, 则直接退出app. 如果process.exit(1) 打印出来的NPM ERR吓着你, 可以用process.exit(0) 😄启动时的日志如下.
References
https://www.ibm.com/support/knowledgecenter/en/SS6NHC/com.ibm.swg.im.dashdb.doc/learn_how/designdb_create_new.html
The text was updated successfully, but these errors were encountered: