又是 Oracle JDBC 驱动版本太低引发的错误-rs.getByte() 的差异

前面写过一个因为 Oracle 驱动版太低引起的一在题:Oracle 驱动版本引起的显示字段奇怪编码问题。今天又遇着一个。

本地写好的一段连接数据库的程序,一放到正式服务器上又不能正常工作了,原来的代码中没有打印出异常栈,都看不出什么问题来,后来加上异常栈输出,得到如下信息:

Fail to convert to internal representation
 java.sql.SQLException: Fail to convert to internal representation
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:219)
        at oracle.jdbc.driver.OracleStatement.getLongValue(OracleStatement.java:3022) 阅读全文 >>

DB2 登录数据库时的代码页转换错误 SQL0332N

客户端连接到另一台机器上的 DB2 数据库,用 DB2 的控制中心连接没问题,但是用 Quest Central for DB2 来连接,输入用户名和密码,确定,出现提示窗口:

[IBM][CLI Driver] SQL0332N  没有从源代码页 "86" 至目标代码页 "819" 的转换。原因代码是 "DB2INST1"。  SQLSTATE=01539

无法登录,原因是本机的代码页(codepage) 与数据库的代码页不相符且无符完成又向转换。

解决办法是在命令行下执行 db2set DB2CODEPAGE=819

dos> db2set DB2CODEPAGE=819

然后,再次用 Quest Central for DB2 来连接数据库就 OK 啦

参考:1. SQL0332N Reason Code 1

JDBC 连接 Oracle 时,用 rs.absolute(n) 真的不如 n 次 next() 性能好

前面写过一篇:Oracle 驱动版本引起的显示字段奇怪编码问题。讲到因 Oracle 8.0.5 不支持子查询排序,为改善原来那种每次翻页时都捋出所有数据成对象到 List 中,然后从中拣取页面实际要显示的记录的性能问题时,采用了 rs.absolute() 直接跳到起始记录游标的方法,但又引入了乱码问题,例如:"无效",变成了 "0xE697A0E69588"。

虽说,换个驱动,如 8.1.7.0.0 以上版本的驱动就能解决乱码的问题,但这一换又怕会影响到其他的应用。有朋友评论说,其实循环 next() 到某处比 absolute() 定位要好,乍一看,有些牵强,不过试试就知道了。下面就来做样一个测试,测试代码如下: 阅读全文 >>

Oracle 驱动版本引起的显示字段奇怪编码问题

开门见山把产生问题的原因的解决办法列出来。

我们一般获取 Statement 都是通过 conn.createStatement() 方法,很少传递参数给它的,所以其内置属性都取默认值的,取记录只用 while(rs.next()) 逐个取即可。然而有一个需求(Oracle 8i 之前的版本不支持子查询排序,所以无法用 rownum 取分页记录) 是通过如下代码来得到 Statement:

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

由它获得的结果集可以 rs.absolute(n) 直接跳到第 n 行记录来获得值,但就这个用法出问题了,取出来的中文出现乱码了,如 "无效",变成了 "0xE697A0E69588" 阅读全文 >>

嵌入式数据库典型技术―SQLite和Berkeley DB的研究

摘 要: 与常见的数据库相比,嵌入式数据库具有体积小、功能齐备、可移植性、健壮性等特点,本文分析和比较了典型的嵌入式数据库SQLite和Berkeley DB。首先从体系结构、子系统间调用关系、任务执行过程等角度对SQLite和Berkeley DB进行了详细分析,然后重点从数据类型、存储方式、模式、数据库引擎和错误处理及加密功能等方面讨论了SQLite和Berkeley DB的异同点,最后列举了一个基于ARM—Linux的SQLite应用实例。

关键词: SQLite、Berkeley DB、SQL、虚拟数据库引擎(VDBE) 阅读全文 >>

如何在 iBatis 应用程序向 Oralce 数据表字段插入 NULL 值

用 iBatis 应用程序连接的数据库是 Oracle, 映射文件中的插入语句写成如下形式 

阅读全文 >>

如何杀掉(kill)Oracle中的会话(Session)

有时,Oracle中造成一些表被死锁或者会话异常退出,如执行了更新记录操作后,既没有commit也没有rollback,网络就断开了,也会造表或记录被锁住,待到超时后才会被解开,那样都会造成应用操作被阻塞。

可以以Oralce管理员权限用户登录Oracle数据,查询到被锁的对象,然后杀除指定的会话。

用下面的语句查询被锁的对象,可以带上更多约束条件,如schemaname等更精确的匹配。 阅读全文 >>

嵌入式数据库Firebird的使用

firebird是一个十分小的开源数据库,可作为像Access一样使用的文件型数据库,单用户连接;也能够以服务方式启动,支持多用户访问,Hibernate有对该种数据库的支持,这里不详细对该数据库本身特性作介绍了。

用jdbc连接嵌入式数据库Firebird最简单的使用是只需要两个动态库文件和一个(JDBC驱动)jar包

动态库是:
fbembed.dll   ---- firebird数据库提供
jaybird.dll   ---- 下载的jdbc驱动包提供,在FirebirdSQL-1.5.5JDK_1.4中 阅读全文 >>

管理常用SQL语句 [转]

  1. 查看数据库的版本       
   select @@version

  2. 查看数据库所在机器操作系统参数       

  exec master..xp_msver
  3. 查看数据库启动的参数        

  sp_configure 阅读全文 >>