Power Designer 连接 PostgreSQL 逆向工程若干问题解决笔记

首先说说系统环境,Windows 7 64 位系统,PowerDesigner 16.5,远程 PostgreSQL 9.4 数据库,JDK 为 64 位的 Java 8。

笔者依次点击:

Database->Configure Connections...->Connection Profiles->Add Datasource

输入以下配置:

1
2
3
4
Connection type: JDBC
DBMS type: PostgreSQL
JDBC driver class: org.postgresql.Driver
JDBC connection URL: jdbc:postgresql://<your_host>:5432/<your_database>

但是点击 Test connection 时出现了问题。

Could not Initialize JavaVM!

原因分析

这个原因很简单,笔者安装的是 64 位的 JDK 和 JRE,而 Power Designer 是 32 位的,其 JDBC 无法在 64 位的 Java 虚拟机上运行。

解决

从 Oracle 官网上下载 32 位的 JDK,安装时不要自动配置环境变量,因为笔者系统里的其他程序还要运行在 64 位虚拟机上,能不能只让 Power Designer 在 32 位虚拟机上运行呢?下一步将完美解决这个问题。

Non SQL Error : Could not load class org.postgresql.Driver

原因分析

原因是找不到 PostgreSQL 的 Java 驱动。

解决

访问 http://jdbc.postgresql.org/download.html,下载对应的 jar 包(笔者下载的是 postgresql-9.4.1208.jar)。

将下载下来的 jar 包放入某个目录,笔者放在了 D:\Tools\Sybase\PowerDesigner 16\SQL Anywhere 12 drivers 这个目录,当然你可以放到任意目录。

然后在 Power Designer 安装目录新建一个 PowerDesigner.bat 文件,输入以下内容:

1
2
3
4
5
set JAVA_HOME="C:\Program Files (x86)\Java\jdk1.8.0_77"
set CLASSPATH="%JAVA_HOME%\lib\jt.jar;%JAVA_HOME%\lib\tools.jar;D:\Tools\Sybase\PowerDesigner 16\SQL Anywhere 12 drivers\postgresql-9.4.1208.jar"
cd "D:\Tools\Sybase\PowerDesigner 16"
start /b PdShell16.exe
exit

其中 JAVA_HOME 是上一步安装的 32 位 JDK 的目录,CLASSPATH 包含那个 postgresql 的 Java 驱动 jar 包。

保存后,右键发送到桌面快捷方式即可,也可以给它换个图标,以后运行时双击这个快捷方式就可以了。

Unable to list the columns. SQLSTATE = 22003不良的类型值 short : t

然而成功连接数据库后建模时出现了“不良的类型值问题”,解决方法如下:

依次点击

Database->Edit Current DBMS...->General Tab->PostgreSQL 9.x->Script->Objects

或者

Tools->Edit Current DBMS->PostgreSQL 9.x->Script->Objects

将 Column->SqlListQuery 选项里 SELECT 中的 c.attnotnull 替换为 cast(nullif(c.attnotnull, false) as varchar(1))

将 Key->SqlListQuery 选项里 SELECT 中的 x.indisprimary 替换为 cast(nullif(x.indisprimary, false) as varchar(1))

保存即可。


参考文章:

各种相纸比较

最近在某宝上用不同相纸冲印了一些照片,觉得效果还是有一些差异的,现在具体对比一下,以供各位朋友日后参考,同时也作为自己的一个记录。

第一次冲洗我使用了【富士晶彩光面】、【富士金冠绒面】和【柯达皇家绒面】这三种类型的相纸。

Read more

连连看游戏消除算法

今天在收到一道的面试题,觉得比较有意思,决定记录下来,整个题目与解答过程大概如下。

连连看是一种很受大家欢迎的小游戏。下面四张图给出了最基本的消除规则:

Read more

树莓派配置 AP,变身无线路由器

首先介绍一下系统环境,笔者用的是树莓派2B (Raspberry Pi 2 Model B)系统是 Arch Linux。另外购得了一个无线网卡,Tenda W311M,RT5370 芯片,支持 Soft-AP。无线网卡是否支持 AP,这点大家购买前一定要确认一下。

大家知道,配置无线 AP 有很多种方法,本文使用 hostapd + dnsmasq 进行配置,如果你不太习惯这两个工具,也可以使用其他方案。

Read more

主板维修——更换爆浆电容

家里的电脑买了七、八年了,最近显示器突然出现了偶尔无法正常工作,桌面黑屏,画面无法刷新的情况。

首先怀疑是显卡问题,但是该主板没有独立显卡,是集成显卡,所以问题也就转移到了主板了。

Read more

Hello Word ~ v0.2.2 背单词软件发布

Hello Word ~

功能

基于艾宾浩斯记忆曲线,强大的单词记忆软件,为用户提供简单、科学、高效的背单词方法。

用户

小学生、中学生、大学生、研究生、博士生、教师、出国留学者,以及各类英语学习者。

特性

  • 基于艾宾浩斯记忆曲线
  • 实时发音,男声/女声可任意切换(需要联网哦)
  • 托盘图标人性化提醒
  • 自由选择词库
  • 使用 Python + Qt 开发
Read more

Python 实现 socket 通讯 (TCP/UDP)

1. TCP

1.1 TCP-Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding: utf-8 -*-
# TCP-Server

import socket

# 1. 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 将 socket 绑定到指定地址
address = ('127.0.0.1', 10140)
s.bind(address)

# 3. 接收连接请求
s.listen(5)

# 4. 等待客户请求一个连接
# 调用 accept 方法时,socket 会进入 "waiting" 状态。
# accept方法返回一个含有两个元素的元组 (connection, address)。
# 第一个元素 connection 是新的 socket 对象,服务器必须通过它与客户通信;
# 第二个元素 address 是客户的 Internet 地址。
ss, addr = s.accept()
print 'got connect from', addr

# 5. 处理:服务器和客户端通过 send 和 recv 方法通信
# send 方法返回已发送的字节个数。
# 调用 recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。
# recv方法在接收数据时会进入 "blocked" 状态,最后返回一个字符 串,用它表示收到的数据。
# 如果发送的数据量超过了recv 所允许的,数据会被截短。
# 多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区删除。
while True:
ra = ss.recv(512)
print 'client:', ra
ss.send('received')

# 6. 传输结束,关闭连接
ss.close()
s.close()
Read more

Python 多线程响应 Ctrl + C,用 Event 实现

在用 python 编写多线程程序时,经常需要用 Ctrl + C 中止进程,可是大家都知道,在 python 中,除了主线程可以响应控制台的 Ctrl + C ,其他线程是无法捕获到的,也就是说,当主线程被中止后,其他线程也会被强制中止,这样线程们就没有机会处理自己还没有完成的工作。

而在实际应用中,我们可能会有这样的要求:

  1. 当按下 Ctrl + C 时,我们希望所有线程先处理完自己的任务,再主动停止

  2. 当所有线程停止后,主线程才终止

这篇文章】提供了一种方法,我对其做了进一步改进,写了如下的代码,希望能起到抛砖引玉的作用:

Read more

Python 引用,拷贝,对象回收,弱引用

引用

python中,在对对象赋值,参数传递,函数返回等等, 都是引用传递的. 直接copy个例子来【1】:

1
2
3
4
a = [1, 2, 3]
b = a
b.append(5)
print a, b

输出结果为:

1
[1, 2, 3, 5] [1, 2, 3, 5]

面的结果有助于理解引用的实际情况。 具体查看一个对象的引用数,可以使用sys.getrefcount(ojb)获取,但这个函数有点邪恶,有时似乎并不给出正确的结果,正常来说获取的值都比你想要的大,一般是大1,因为给这个函数传参数也算一个引用。但有时会大得离谱,来例子:

1
2
3
import sys
a = "a"
sys.getrefcount(a)

在我的机器上,输出结果尽然为14,网络遛了一圈,有人说是python内部对“a”这个对象进行了引用。好吧!就这样理解把,有高见的可以留言告我一下!

Read more

Python 中用 Ctrl+C 终止多线程程序的问题解决

花了一天时间用python为服务写了个压力测试。很简单,多线程向服务器发请求。但写完之后发现如果中途想停下来,按Ctrl+C达不到效果,自然想到要用信号处理函数捕捉信号,使线程都停下来,问题解决的方法请往下看:

Read more
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×