VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

连接数据库测试

代码

// 此示例演示如何通过ODBC方式获取Vastbase G100中的数据。
// DBtest.c (与库libodbc.so一起编译,libodbc.so库的路径为/usr/local/lib)   
#include <stdlib.h> 
#include <stdio.h> 
#include <sqlext.h>
#ifdef WIN32
#include <windows.h> 
#endif 
SQLHENV       V_OD_Env;        // Handle ODBC environment 
SQLHSTMT      V_OD_hstmt;      // Handle statement 
SQLHDBC       V_OD_hdbc;       // Handle connection     
char          desc_name[100];
SQLINTEGER    value = 100;
SQLINTEGER    value1 = 1;
SQLINTEGER    V_OD_erg,V_OD_buffer,V_OD_err,V_OD_id, ret;
SQLCHAR		  str[1024] = "";
SQLSMALLINT   strl;
int main(int argc,char *argv[]) 
{         
      // 1. 申请环境句柄       
      V_OD_erg = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);     
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))        
      {           
           printf("Error AllocHandle\n");           
           exit(0);        
      } 
      // 2. 设置环境属性(版本信息)         
      SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);      
      // 3. 申请连接句柄        
      V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc);     
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))      
      {                     
           SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);          
           exit(0);       
      }
      // 4. 设置连接属性
      SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_ON, 0);          
      // 5. 连接数据源,这里的“userName”与“password”分别表示连接数据库的用户名和用户密码,请根据实际情况修改。
      // 如果odbc.ini文件中已经配置了用户名密码,那么这里可以留空("")。
	  // 但是不建议这么做,因为一旦odbc.ini权限管理不善,将导致数据库用户密码泄露. 
      V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "Test", SQL_NTS,  
                           (SQLCHAR*) "yuntu", SQL_NTS,  (SQLCHAR*) "Ttest@123", SQL_NTS);        
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))      
      {           
          printf("Error SQLConnect %d\n",V_OD_erg);            
          SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);       
          exit(0);        
      }  
      printf("Connected !\n"); 
      // 6. 设置语句属性
      SQLSetStmtAttr(V_OD_hstmt,SQL_ATTR_QUERY_TIMEOUT,(SQLPOINTER *)3,0);
      // 7. 申请语句句柄
      SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);       
      // 8. 直接执行SQL语句。
      SQLExecDirect(V_OD_hstmt,"drop table IF EXISTS test_stu",SQL_NTS);
      SQLExecDirect(V_OD_hstmt,"CREATE TABLE test_stu(id INTEGER, name VARCHAR(32));",SQL_NTS);
      SQLExecDirect(V_OD_hstmt,"insert into test_stu values(1,'Anna')",SQL_NTS);
      // 9. 准备执行
      SQLPrepare(V_OD_hstmt,"insert into test_stu values(?)",SQL_NTS); 
      // 10. 绑定参数
      SQLBindParameter(V_OD_hstmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0,
                       &value,0,NULL);
      // 11. 执行准备好的语句
      SQLExecute(V_OD_hstmt);

      // 准备执行(查询)
      SQLPrepare(V_OD_hstmt,"select * from test_stu where id = ?",SQL_NTS);
      SQLBindParameter(V_OD_hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &value1, 0, NULL);
      SQLExecute(V_OD_hstmt);
      ret = SQLFetch(V_OD_hstmt);
      if (ret == SQL_SUCCESS)
      {
          char buf[40];
          SQLLEN ind;
          ret = SQLGetData(V_OD_hstmt, 1, SQL_C_CHAR, buf, sizeof(buf), &ind);
          printf("value:%s\n", buf);
      }

      SQLExecDirect(V_OD_hstmt,"select id from test_stu",SQL_NTS);
      // 12. 获取结果集某一列的别名(如果不适用,则返回列名称)
      SQLColAttribute(V_OD_hstmt,1,SQL_DESC_NAME,desc_name,100,NULL,NULL);                 
      printf("SQLColAtrribute %s\n",desc_name);
      printf("Done !\n");
      // 16. 断开数据源连接并释放句柄资源
      SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);    
      SQLDisconnect(V_OD_hdbc);         
      SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);       
      SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);  
      return(0);
 }

编译

运行