前面写过一个因为 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) Read More- 客户端连接到另一台机器上的 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 - 前面写过一篇:Oracle 驱动版本引起的显示字段奇怪编码问题。讲到因 Oracle 8.0.5 不支持子查询排序,为改善原来那种每次翻页时都捋出所有数据成对象到 List 中,然后从中拣取页面实际要显示的记录的性能问题时,采用了 rs.absolute() 直接跳到起始记录游标的方法,但又引入了乱码问题,例如:"无效",变成了 "0xE697A0E69588"。
虽说,换个驱动,如 8.1.7.0.0 以上版本的驱动就能解决乱码的问题,但这一换又怕会影响到其他的应用。有朋友评论说,其实循环 next() 到某处比 absolute() 定位要好,乍一看,有些牵强,不过试试就知道了。下面就来做样一个测试,测试代码如下: Read More
开门见山把产生问题的原因的解决办法列出来。
我们一般获取 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" Read More
摘 要: 与常见的数据库相比,嵌入式数据库具有体积小、功能齐备、可移植性、健壮性等特点,本文分析和比较了典型的嵌入式数据库SQLite和Berkeley DB。首先从体系结构、子系统间调用关系、任务执行过程等角度对SQLite和Berkeley DB进行了详细分析,然后重点从数据类型、存储方式、模式、数据库引擎和错误处理及加密功能等方面讨论了SQLite和Berkeley DB的异同点,最后列举了一个基于ARM—Linux的SQLite应用实例。
关键词: SQLite、Berkeley DB、SQL、虚拟数据库引擎(VDBE) Read More
用 iBatis 应用程序连接的数据库是 Oracle, 映射文件中的插入语句写成如下形式1<!-- 插入一条Person对应的记录到数据库中 --> 2<insert id="insertPerson" parameterClass="com.unmi.Person"> 3 INSERT INTO PERSON(ID,NAME,PASSWD) VALUES(#id#,#name#,#passwd#) 4</insert>
Read More
有时,Oracle中造成一些表被死锁或者会话异常退出,如执行了更新记录操作后,既没有commit也没有rollback,网络就断开了,也会造表或记录被锁住,待到超时后才会被解开,那样都会造成应用操作被阻塞。
可以以Oralce管理员权限用户登录Oracle数据,查询到被锁的对象,然后杀除指定的会话。
用下面的语句查询被锁的对象,可以带上更多约束条件,如schemaname等更精确的匹配。 Read More
firebird是一个十分小的开源数据库,可作为像Access一样使用的文件型数据库,单用户连接;也能够以服务方式启动,支持多用户访问,Hibernate有对该种数据库的支持,这里不详细对该数据库本身特性作介绍了。
用jdbc连接嵌入式数据库Firebird最简单的使用是只需要两个动态库文件和一个(JDBC驱动)jar包
动态库是:
fbembed.dll ---- firebird数据库提供
jaybird.dll ---- 下载的jdbc驱动包提供,在FirebirdSQL-1.5.5JDK_1.4中 Read More- 1. 查看数据库的版本
select @@version
2. 查看数据库所在机器操作系统参数
exec master..xp_msver
3. 查看数据库启动的参数
sp_configure Read More