Caused by: java.sql.SQLException: JZ0SJ: 没有在此数据库中发现元数据存取器信息。 请按 jConnect 文档中所述安装...

本文介绍了解决Sybase数据库使用JDBC连接时出现的元数据存取器信息缺失问题的方法。通过下载并安装所需的jConnect包及执行特定SQL脚本来完成修复。
错误

Caused by: java.sql.SQLException: JZ0SJ: 没有在此数据库中发现元数据存取器信息。 请按 jConnect 文档中所述安装 所需的表。
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseError(ErrorMessage.java:500)
at com.sybase.jdbc2.jdbc.MdaManager.loadMetaData(MdaManager.java:458)
at com.sybase.jdbc2.jdbc.MdaManager.<init>(MdaManager.java:145)
at com.sybase.jdbc2.jdbc.MdaManager.<init>(MdaManager.java:130)
at com.sybase.jdbc2.jdbc.SybConnection.checkMDA(SybConnection.java:1779)
at com.sybase.jdbc2.jdbc.SybConnection.getMDA(SybConnection.java:1560)
at com.sybase.jdbc2.tds.Tds.getBoolOption(Tds.java:1189)
at com.sybase.jdbc2.jdbc.SybConnection.getAutoCommit(SybConnection.java:660)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:112)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:421)
... 30 more


解决方法:

有在此数据库中发现元数据存取器信息。请按jConnect文档中所述安装所需的表。试图检索元数据信息时出错:java.sql.SQLException:JZOSJA:没有在此数...
使用的数据库为:sybase11
在使用jdbc连接数据库时出现了如下错误: 
有在此数据库中发现元数据存取器信息。请按jConnect文档中所述安装所需的表。试图检索元数据信息时出错:java.sql.SQLException:JZOSJA:没有在此数...
请按jConnect文档中所述安装所需的表 .

解决此问题的过程: 
1、到附件中下载jconnect5.5.jar
2、解压缩
3、进入sqladv.exe环境。用sa用户。
4、执行解压后的文件下面的sp文件夹中的sql_server.sql.如果是sybase12.5 执行sql_server12.5.sql文件。
ok.
注意在执行的过程中:
使用的是sybsystemprocs数据库,要查看执行的过程是否成功。
如果是因为日志的原因没有成功:先执行以下的命令:dump trun sybsystemprocs with no_log
### ORA-01027错误的原因及解决方法 ORA-01027错误通常出现在尝试在数据定义语言(DDL)操作中使用绑定变量时。这种错误发生的主要原因是Oracle数据库不允许在DDL语句中直接使用绑定变量,因为这些语句在执行前需要完全解析[^2]。 #### 原因分析 - **DDL语句特性**:数据定义语言语句如`CREATE`, `ALTER`, 和 `DROP`等,用于修改数据库结构。这类语句在执行之前必须被完全解析,这意味着它们不能包含任何运行时才能确定的值。 - **绑定变量限制**:绑定变量主要用于数据操作语言(DML)语句中,以提高SQL重用性和安全性。然而,在DDL语句中使用绑定变量会导致解析失败,从而触发ORA-01027错误。 #### 解决方案 为了解决这个问题,可以采取以下几种策略: 1. **字符串拼接**:最直接的方法是在构建DDL语句前,将所需的值直接插入到SQL字符串中。这种方法虽然简单有效,但需要注意防止SQL注入攻击。 ```java String nyr = "20081001"; String view = "create view v_test as select kh from dm_mpg_test where nyr=" + nyr + " with read only "; PreparedStatement pst = con.prepareStatement(view); pst.executeUpdate(); ``` 2. **使用存储过程**:通过创建存储过程来封装动态生成的DDL语句,可以在一定程度上避免直接暴露于应用程序逻辑中,同时也能更好地控制和管理数据库对象的变化。 3. **预处理与验证**:对于必须动态生成的部分,先进行必要的检查和清理工作,确保加入到DDL语句中的外部输入是安全且合法的。 4. **转换为DML操作**:如果可能的话,考虑是否能将原本的设计从DDL转变为DML操作,这样就可以利用绑定变量的优势而不违反Oracle的规定。 5. **参数化查询替代方案**:尽管不能直接在DDL中使用绑定变量,但在某些情况下,可以通过其他方式间接实现类似功能,例如先执行一个DML操作来准备数据,然后再进行结构上的更改。 以上方法可以帮助开发者绕过或解决由于试图在DDL语句中使用绑定变量而导致的ORA-01027错误问题。选择具体实施哪种方案取决于实际应用场景的需求和约束条件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值