返回首页

gbase数据、南大通用产品文档:GBase8s对一些备份与恢复错误进行故障诊断

更新日期:2024年09月11日

该附录列出备份或恢复期间您可能接收到的一些错误和参考消息,描述在什么情况下可能
会发生这些错误或者可能会出现这些消息,并提供了可能的解决方案或变通方法。
通过查看 ON-Bar 活动日志来查找错误
如果使用 onbar -b 备份存储空间或使用 onbar -r 恢复存储空间时发生错误,
那么数据库服
务器不会在标准输出 (stdout) 中显示错误。因此,使用 onbar -b 或 onbar -r 时,您必须检
查 ON-Bar 活动日志 (bar_act_log) 中的信息。ON-Bar 备份与恢复数据时,它会将进度消
息、警告和错误消息写入到 bar_act.log。

Type not supported
您指定了一个 GBase 8s JDBC Driver 不支持的特定数据类型。
检查您的查询确保使用的数据类型是受支持的。

通过JDBC 调用存储过程
该用例分为4 部分,分别实现了如下功能:

callProcedureWhitNoParamByCallableStatement 调用没有参数的存
储过程;

callProcedureWhitINParamByCallableStatement 调用只有IN 参数的
存储过程;

callProcedureWhitOUTParamByCallableStatement 调用只有OUT 参数
的存储过程;

callProcedureWhitInOutParamByCallableStatement 调用有IN、OUT
参数的存储过程。
示例如下:
package com.gbase.jdbc.simple;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

GBase 8a 程序员手册JDBC 篇


- 124 -

南大通用数据技术股份有限公司
import java.sql.Statement;
import java.sql.Types;

public class CallProcByJdbc {

private static final String URL =
"jdbc:gbase://192.168.111.95:5258/test?user=sysdba&password=";
/**
* @param args
*/
public static void main(String[] args) {

//创建存储过程
prepareProc();

CallProcByJdbc callProcByJdbc = new CallProcByJdbc();

//调用没有参数的存储过程
callProcByJdbc.callProcedureWhitNoParamByCallableStateme
nt();

//调用只有IN 参数的存储过程
callProcByJdbc.callProcedureWhitINParamByCallableStateme
nt();

//调用只有OUT 参数的存储过程
callProcByJdbc.callProcedureWhitOUTParamByCallableStatem
ent();

//调用有IN/OUT 参数的存储过程
callProcByJdbc.callProcedureWhitInOutParamByCallableStat
ement();
}

/**
* 通过CallableStatement 调用没有参数的

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 125 -
* 存储过程。
*/
public void callProcedureWhitNoParamByCallableStatement() {
Connection conn = null;
CallableStatement cstm = null;
ResultSet rs = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
cstm = conn.prepareCall("call procNoParam()");
rs = cstm.executeQuery();
rs.next();
System.out.println(rs.getString(1));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
}catch (NullPointerException e) {
} catch (Exception e) {
cstm = null;
}
try {
cstm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
cstm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;
}
}

GBase 8a 程序员手册JDBC 篇


- 126 -

南大通用数据技术股份有限公司
}

/**
* 通过CallableStatement 调用IN 参数的
* 存储过程。
*/
public void callProcedureWhitINParamByCallableStatement() {
Connection conn = null;
CallableStatement cstm = null;
ResultSet rs = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
cstm = conn.prepareCall("{call procInParam(?)}");
cstm.setString(1, "InParam Call Works!");
rs = cstm.executeQuery();
rs.next();
System.out.println(rs.getString(1));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
}catch (NullPointerException e) {
} catch (Exception e) {
cstm = null;
}
try {
cstm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
cstm = null;
}
try {
conn.close();

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 127 -
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;
}
}
}

/**
* 通过CallableStatement 调用OUT 参数的
* 存储过程。
*/
public void callProcedureWhitOUTParamByCallableStatement() {
Connection conn = null;
CallableStatement cstm = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
cstm = conn.prepareCall("call procOutParam(?)");
cstm.setString(1, "@outParam");
cstm.registerOutParameter(1, Types.VARCHAR);
cstm.execute();
System.out.println(cstm.getString(1));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
cstm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
cstm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {

GBase 8a 程序员手册JDBC 篇


- 128 -

南大通用数据技术股份有限公司
conn = null;
}
}
}

/**
* 通过CallableStatement 调用IN/OUT 参数的
* 存储过程。
*/
public
void
callProcedureWhitInOutParamByCallableStatement()
{
Connection conn = null;
CallableStatement cstm = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
cstm
=
conn.prepareCall("{call
procInOutParam(?,?)}");
cstm.setString(1, "aaaaa");
cstm.setString(2, "@outParam");
cstm.registerOutParameter(2, Types.VARCHAR);
cstm.execute();
System.out.println(cstm.getString(2));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
cstm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
cstm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;

GBase 8a 程序员手册JDBC 篇
南大通用数据技术股份有限公司

- 129 -
}
}

}

/**
* 创建4 个存储过程;
* 1、没有参数
* 2、只有IN 参数
* 3、只有OUT 参数
* 4、有IN、OUT 参数
*/
private static void prepareProc() {
Connection conn = null;
Statement stm = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
stm = conn.createStatement();

stm.executeUpdate("DROP PROCEDURE IF EXISTS
`test`.`procNoParam`");
stm.executeUpdate("DROP PROCEDURE IF EXISTS
`test`.`procInParam`");
stm.executeUpdate("DROP PROCEDURE IF EXISTS
`test`.`procOutParam`");
stm.executeUpdate("DROP PROCEDURE IF EXISTS
`test`.`procInOutParam`");
stm.executeUpdate("CREATE PROCEDURE
`test`.`procNoParam` () begin select 'procNoParamTest works'; end");
stm.executeUpdate("CREATE PROCEDURE
`test`.`procInParam` (IN inParam Varchar(100)) begin select inParam;
end");
stm.executeUpdate("CREATE PROCEDURE
`test`.`procOutParam` (OUT outParam Varchar(100)) begin SET outParam =
'outParamTest works'; end");
stm.executeUpdate("CREATE PROCEDURE
`test`.`procInOutParam` (IN inParam Varchar(100), OUT outParam

GBase 8a 程序员手册JDBC 篇


- 130 -

南大通用数据技术股份有限公司
Varchar(200)) begin set outParam = CONCAT(\'InOutParam \',inParam,\ '
works!\ '); end");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
stm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
stm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;
}
}
}
}