使用JDBC和ODBC连接集群 include include include ifdef WIN32 include endif SQLHENV VODEnv; // Handle ODBC environment SQLHSTMT VODhstmt; // Handle statement SQLHDBC VODhdbc; // Handle connection char typename[100]; SQLINTEGER value 100; SQLINTEGER VODerg,VODbuffer,VODerr,VODid; int main(int argc,char argv[]) { // 1. 申请环境句柄 VODerg SQLAllocHandle(SQLHANDLEENV,SQLNULLHANDLE,&VODEnv); if ((VODerg ! SQLSUCCESS) && (VODerg ! SQLSUCCESSWITHINFO)) { printf("Error AllocHandlen"); exit(0); } // 2. 设置环境属性(版本信息) SQLSetEnvAttr(VODEnv, SQLATTRODBCVERSION, (void)SQLOVODBC3, 0); // 3. 申请连接句柄 VODerg SQLAllocHandle(SQLHANDLEDBC, VODEnv, &VODhdbc); if ((VODerg ! SQLSUCCESS) && (VODerg ! SQLSUCCESSWITHINFO)) { SQLFreeHandle(SQLHANDLEENV, VODEnv); exit(0); } // 4. 设置连接属性 SQLSetConnectAttr(VODhdbc, SQLATTRAUTOCOMMIT, SQLAUTOCOMMITON, 0); // 5. 连接数据源,其中的用户名和用户密码等信息之所以能省略,是因为在odbc.ini文件中进行了配置,若没配置需要在SQLConnect函数参数中具体写明要连接数据库的用户名和用户密码等信息。 VODerg SQLConnect(VODhdbc, (SQLCHAR) "gaussdb", SQLNTS, (SQLCHAR) "", SQLNTS, (SQLCHAR) "", SQLNTS); if ((VODerg ! SQLSUCCESS) && (VODerg ! SQLSUCCESSWITHINFO)) { printf("Error SQLConnect %dn",VODerg); SQLFreeHandle(SQLHANDLEENV, VODEnv); exit(0); } printf("Connected !n"); // 6. 设置语句属性 SQLSetStmtAttr(VODhstmt,SQLATTRQUERYTIMEOUT,(SQLPOINTER )3,0); // 7. 申请语句句柄 SQLAllocHandle(SQLHANDLESTMT, VODhdbc, &VODhstmt); // 8. 直接执行SQL语句。 SQLExecDirect(VODhstmt,"drop table IF EXISTS testtable",SQLNTS); SQLExecDirect(VODhstmt,"create table testtable(id int)",SQLNTS); SQLExecDirect(VODhstmt,"insert into testtable values(25)",SQLNTS); // 9. 准备执行 SQLPrepare(VODhstmt,"insert into testtable values(?)",SQLNTS); // 10. 绑定参数 SQLBindParameter(VODhstmt,1,SQLPARAMINPUT,SQLCSLONG,SQLINTEGER,0,0, &value,0,NULL); // 11. 执行准备好的语句 SQLExecute(VODhstmt); SQLExecDirect(VODhstmt,"select id from testtable",SQLNTS); // 12. 获取结果集某一列的属性 SQLColAttribute(VODhstmt,1,SQLDESCTYPE,typename,100,NULL,NULL); printf("SQLColAtrribute %sn",typename); // 13. 绑定结果集 SQLBindCol(VODhstmt,1,SQLCSLONG, (SQLPOINTER)&VODbuffer,150, (SQLLEN )&VODerr); // 14. 通过SQLFetch取结果集中数据 VODergSQLFetch(VODhstmt); // 15. 通过SQLGetData获取并返回数据。 while(VODerg ! SQLNODATA) { SQLGetData(VODhstmt,1,SQLCSLONG,(SQLPOINTER)&VODid,0,NULL); printf("SQLGetData ID %dn",VODid); VODergSQLFetch(VODhstmt); }; printf("Done !n"); // 16. 断开数据源连接并释放句柄资源 SQLFreeHandle(SQLHANDLESTMT,VODhstmt); SQLDisconnect(VODhdbc); SQLFreeHandle(SQLHANDLEDBC,VODhdbc); SQLFreeHandle(SQLHANDLEENV, VODEnv); return(0); }