返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

gbase_library_end
............................
43

该示例主要内容为在JBOSS 服务器上配置GBase 数据源。对JBOSS 本身的安装以
及Web 工程的创建不做讨论。

本示例基本信息如下:

JBOSS: jboss-4.0.3

GBase JDBC: GBase JDBC 驱动

JDK: JDK1.6

JBOSS 安装路径为: $JBOSS_HOME

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1107
步骤
步骤1
将GBase JDBC 驱动包GBase JDBC 驱动 拷贝至jboss 目录$JBOSS_HOME
\server\default\lib 下。
步骤2
进入目录$JBOSS_HOME \server\default\deploy,并在该目录下创建gbasedb-ds.xml
文件,文件内容如下:

-
-
-
GBaseDB
jdbc:gbase://localhost:5258/test
com.gbase.jdbc.Driver
root
123456
5
-
20
-
5
-

com.gbase.jdbc.integration.jboss.ExtendedGBaseExceptionSorterption-sorter-class-name>

com.gbase.jdbc.integration.jboss.GBaseValidConnectionCheck
er



步骤3
在Web 工程的WebRoot\META-INF 目录下添加 jbosscmp-jdbc.xml 文件,
内容如下:




java:/GBaseDB


步骤4
创建测试servlet,代码如下:
package gbasejboss;

import java.io.IOException;
import java.io.PrintWriter;

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1109
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class gbaseServlet extends HttpServlet {

public gbaseServlet() {
super();
}
public void destroy() {
super.destroy();

}
public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
System.out.println("come");
//获得连接池
Context initCtx = new InitialContext();
DataSource ds = (DataSource)initCtx.lookup("java:/GBaseDB");
//获得连接
conn = ds.getConnection();
if (conn != null){
out.println("The GBase connection is ok!!");
System.out.println("ok");
}else{
out.println("The GBase connection occur error!");
System.out.println("dddd");
}
//测试SQL 语句

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1110
Statement st = conn.createStatement();
ResultSet rs1= st.executeQuery("select cust_name from customers where
cust_id=1");
while(rs1.next()){
//输出SQL 语句结果
out.println(rs1.getString(1));
System.out.println(rs1.getString(1));
}
}catch(Exception e){
System.out.println("Exception"+e);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)



throws ServletException, IOException {
this.doGet(request, response);
}

public void init() throws ServletException {

}
}
步骤5
修改Web 工程 WebRoot\WEB-INF 目录下的web.xml 文件,添加如下内容:

gbaseServlet
/gbaseServlet

步骤6
将Web 工程部署到Jboss 服务器,启动服务器,通过url:
http://localhost:8080/GBaseJboss/gbaseServlet 测试servlet
结果应显示如下:
The GBase connection is ok!! GBase 8a

#ifdef WIN32
# include
# define sleep(x) Sleep(x*1000)
#else
# include
#endif
#include
#include
#include
#include
#include
#include "sqlgbase.h"

#define isSuc(result) ((result) == SQL_SUCCESS || (result) ==
SQL_SUCCESS_WITH_INFO)
#define FOR_TIMES 50
#define CON_NUM 50

SQLHANDLE henv;
int seg;
#ifdef WIN32

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

- 61 -
CRITICAL_SECTION thread_quit_lock;
#define THREAD_ID() GetCurrentThreadId()
#else
pthread_mutex_t thread_quit_lock;
#define THREAD_ID() pthread_self()
#endif

void getError(SQLSMALLINT type, SQLHANDLE handle)
{
SQLCHAR sqlstate[1024];
SQLCHAR errormes[1024];
SQLINTEGER numerror;
SQLSMALLINT errlen;
SQLGetDiagRec(type, handle, 1, sqlstate, &numerror, errormes,
1024, &errlen);
printf("sqlstate:%s\terrmsg:%s\terrno:%d\n",sqlstate,
errormes, numerror);
}

char* connStr = "DRIVER=GBase 8a ODBC 8.3
Driver;UID=gbase;PWD=gbase20110531;"


"SERVER={192.168.9.173;192.168.9.174;192.168.9.175};DATABASE
=test; PORT=5258;"




"GCLUSTER_ID=aaa;POOL_MAX_ACTIVE_SIZE=70;POOL_MAX_IDLE=65;"




"POOL_INIT_SIZE=10;"




"POOL_TEST_BORROW=0;"




"POOL_LBS=1;"




"POOL_CHECKOUT_TIMEOUT=5000;"




"POOL_MANAGER=1;"




"POOL_TEST_INVALID_CONN_PERIOD=2000;"




"POOL_KEEP_IDLE=1; POOL_MIN_IDLE=12;"

GBase 8a 程序员手册ODBC 篇


- 62 -

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




"POOL_CLEAR_OVERDUE=1; POOL_USED_LIFE=400000;
POOL_IDLE_LIFE=0;";

#ifdef WIN32
DWORD WINAPI thread_bf(LPVOID arg)
#else
int thread_bf(void* arg)
#endif
{
SQLHDBC hdbc;
SQLHANDLE hsmt;
int sret = 0;
int i =0 ;
clock_t t1, t2;
time_t t;
int rc = 0;

while(i < FOR_TIMES)
{
t1 = t2 = clock();
SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
sret = SQLDriverConnect(hdbc,
NULL, connStr, SQL_NTS,NULL,
0, NULL, 0);
if (!isSuc(sret))
{
getError(SQL_HANDLE_DBC, hdbc);
}
else
{
t2 = clock();
time(&t);
printf("thread id %u\t\tconnect success! use %lu
msec\t%s.\n",THREAD_ID(), (t2 - t1), ctime(&t));

rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt);
if (rc == SQL_SUCCESS)
{

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

- 63 -
SQLExecDirect(hsmt,
"show
databases",
strlen("show
databases"));
SQLFreeHandle(SQL_HANDLE_STMT, hsmt);
}



SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
i++;
}

#ifdef WIN32

EnterCriticalSection(&thread_quit_lock);
seg--;
LeaveCriticalSection(&thread_quit_lock);
#else
pthread_mutex_lock(&thread_quit_lock);
seg--;
pthread_mutex_unlock(&thread_quit_lock);
#endif
return 0;
}

void t1_bf()
{
SQLHDBC hdbc;
int rc = 0, i = 0;

#ifdef WIN32
InitializeCriticalSection(&thread_quit_lock);
#else
pthread_mutex_init(&thread_quit_lock, NULL);
#endif
SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_O
DBC3,0);


GBase 8a 程序员手册ODBC 篇


- 64 -

南大通用数据技术股份有限公司
seg = CON_NUM;
while(i{
#ifdef WIN32
CreateThread(NULL, 0, thread_bf, NULL, 0, NULL);
#else
pthread_t thread;
pthread_create(&thread, 0, thread_bf, NULL);
#endif

i++;
}

while(seg > 0)sleep(1);
SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
rc
=
SQLDriverConnect(hdbc,
NULL,
connStr,
SQL_NTS,NULL,
0,
NULL,
0);
if (!isSuc(rc))
{
getError(SQL_HANDLE_DBC, hdbc);
return;
}
SQLSetConnectAttr(hdbc, SQL_ATTR_GBASE_POOL_FREE,
SQL_FREE_GBASE_POOL, NULL);
SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);
}