SQLCA

SQLCA是PowerBuilder的其中一个全局变量。

  SQLCA是SQLCA Communications Area的缩写,称为事务对象,PowerBuilder用SQLCA来定义数据库需要的一些信息。

  SQLCA是PowerBuilder众多对象中最重要的一个对象,并且也是最不好理解的一个对象。它实际上是PowerBuilder程序与数据库之间传递信息的一个结构变量,共有15个成员。

  [注]事务对象的15个成员

  序号 名称     类型    说明

   1. DBMS     string   所使用的数据库管理系统的名字,如Sybase,Oracle,ODBC。

   2. Database   string   要连接的数据库名字。

   3. UserID    string   连接数据库所用的用户名。有的DBMS不需要此项。

   4. DBPass    string   用户连接数据库的口令。

   5. Lock     string   这是数据库的保护级别,一般不必给出。

   6. LogID     string   登录到数据库服务器上的用户名,有的DBMS不需要此项,但Sybase和Oracle需要指定这个参数。

   7. LogPass    string   登录到数据库服务器上的用户口令。这个属性可设可不设,但Sybase和Oracle需要指定口令。

   8. ServerName   string   数据库服务器名。

   9. AutoCommit  boolean   指定是否将数据库设置成自动提交所有事务。默认是False,也就是说,必须在应用程序中进行事务管理,并在适当的时候对数据库提交事务。如果选择True,则每个事务都由系统自动提交。

   10.DBParm    string   用于向数据库传递特殊信息的属性。

   11.SQLCode    long    指示最近一次SQL操作失败或成功。它的取值为:返回结果 0 无错误。-1 出现一个错误。100 没有检索到数据。

   12.SQLNRows   long    最近一次SQL操作影响的行数,数据库不同其含义也不同。

   13.SQLDBCode   long    数据库错误代码。不同的数据库的含义不同。

   14.SQLErrText  string   相应于SQLDBCode属性中错误码的文字说明

   15.SQLReturnData string   返回DBMS执行SQL的附加信息,不同的DBMS其值不同。

 

SQLCA 提供错误代码

  可引用 SQLCA 测试特定错误代码。当数据库请求有错误时,sqlcode 和 sqlstate 字段包含错误代码。某些 C 宏是为引用 sqlcode 字段、sqlstate 字段和某些其它字段而定义的。

 sqlca.sqlcode 的数值含义

  如果一个 SQL 语句发生了错误,那么 sqlca.sqlcode 将是非零值。

  如果 sqlca.sqlcode 小于 0 那么就是发生了某种严重的错误,象数据库定义与查询定义不一致等.

  如果大于 0 则是通常的错误,象表不包括所要求的行等.

  sqlca.sqlcode == 0,成功

  sqlca.sqlcode == -1 失败(获取具体失败信息:messagebox('',"出错信息:"+sqlca.SQLErrText) )--PB里的操作方法

 

 可能发生的错误列表

  -12, Out of memory in line %d.

  通常不出现这个错误。这是你的虚拟内存耗尽的标志。

  -200, Unsupported type %s on line %d.

  通常不出现这个错误.这表明预编译器生成了一些库(函数)不认得的东西.可能你运行的预编译器和当前库不兼容.

  -201, Too many arguments line %d.

  这意味着 Postgres 返回了比我们的匹配变量更多的参数.可能你漏了几个INTO :var1,:var2-列表里的宿主变量.

  -202, Too few arguments line %d.

  这意味着 Postgres 返回了比我们的对应宿主变量要少的参数.可能你多输入了几个INTO :var1,:var2-列表里的宿主变量.

  -203, Too many matches line %d.

  着意味着查询返回了多个行,但你声明的变量不是数组.你执行的 SELECT 可能不是唯一的.

  -204, Not correctly formatted int type: %s line %d.

  着意味着宿主变量是一个 int 类型并且 Postgres 数据库里的字段是另一种类型,包含着一个不能转换成一个 int 类型的数值.库(函数)使用 strtol 做此类转换.

  -205, Not correctly formatted unsigned type: %s line %d.

  着意味着宿主变量是一个 unsigned int(无符号整数)类型而Postgres 数据库里的字段是另外一种类型并且包含一个不能转换成unsigned int 的数值.库(函数)使用 strtoul 做这类转换.

  -206, Not correctly formatted floating point type: %s line %d.

  着意味着宿主变量是一个 float (浮点)类型而 Postgres 数据库里的字段是另外一种类型并且包含一个不能转换成 float 的数值.库(函数)使用 strtod 做这类转换.

  -207, Unable to convert %s to bool on line %d.

  这意味着宿主变量是一个 bool (布尔)类型,而 Postgres 数据库里的字段值既不是 't' 也不是 'f'。

  -208, Empty query line %d.

  Postgres 返回 PGRES_EMPTY_QUERY,可能的原因是该查询实际上是空的。

  -220, No such connection %s in line %d.

  程序试图访问一个不存在的联接。

  -221, Not connected in line %d.

  程序试图访问一个存在的,但是没有打开的联接。

  -230, Invalid statement name %s in line %d.

  你试图使用的语句还没准备好。

  -400, Postgres error: %s line %d.

  某种 Postgres 错误。该消息包含来自 Postgres 后端的信息。

  -401, Error in transaction processing line %d.

  Postgres 给我们的信号,表明我们无法开始,提交或者回卷该事务。

  -402, connect: could not open database %s.

  与数据库的联接无法工作。

  sqlca.sqlcode == 100, Data not found line %d.

  这是一个"正常"的错误,告诉你你正在查询的东西找不到或者我们已经越过了游标的范围。
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQLCA是一个结构体,包含了SQL语句执行后的返回信息。在Java中,如果要使用SQLCA,需要使用JDBC连接数据库,然后执行SQL语句,将返回的信息存储到SQLCA结构体中。 具体步骤如下: 1. 加载JDBC驱动程序。 2. 建立数据库连接。 3. 创建Statement对象,用于执行SQL语句。 4. 执行SQL语句,将返回信息存储到SQLCA结构体中。 5. 根据SQLCA中的返回信息,处理相应的业务逻辑。 下面是一个示例代码: ``` import java.sql.*; public class SQLCAExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb"; String username = "root"; String password = "root"; Connection conn = null; Statement stmt = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, username, password); stmt = conn.createStatement(); String sql = "SELECT * FROM users"; boolean result = stmt.execute(sql); if (result) { ResultSet rs = stmt.getResultSet(); while (rs.next()) { // do something with the result set } rs.close(); } else { int updateCount = stmt.getUpdateCount(); if (updateCount == -1) { // no more results } else { // update count } } SQLWarning warning = stmt.getWarnings(); while (warning != null) { // process warning warning = warning.getNextWarning(); } SQLCA sqlca = ((com.mysql.jdbc.StatementImpl) stmt).getSQLCA(); if (sqlca != null) { // process sqlca } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值