问题已解决。更新后的代码和运行结果如下:

代码:

/* TimesTen ODBC example by canoe*/

#ifdef WIN32

#include

#else

#include

#endif

#include

#include

#include

#include

#include

#define SQL_MAXLEN    200     /* Max length of SQL buffer */

#define NAME_MAXLEN   20     /* Max length of Name */

typedef         SQLCHAR *STR;

void CheckReturnCode(SQLRETURN rc, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, char *msg, char *filename, int lineno);

int main(void)

{

/* General return code for the API */

SQLRETURN rc = SQL_SUCCESS;

/* Environment handle */

SQLHENV hEnv = SQL_NULL_HENV;

/* Connection handle */

SQLHDBC hDbc = SQL_NULL_HDBC;

/* Statement handle */

SQLHSTMT hStmt_ins = SQL_NULL_HSTMT;

SQLHSTMT hStmt_sel = SQL_NULL_HSTMT;

/* Connection attributes */

SQLCHAR *ConnString = (SQLCHAR*)"DSN=ttodbc;";

/* local variable for insert*/

SQLCHAR    name_ins[NAME_MAXLEN+1];

SQLCHAR    department_ins[NAME_MAXLEN+1];

/* local variable for select*/

int     id_sel = 0;

SQLCHAR    name_sel[NAME_MAXLEN+1];

SQLCHAR    department_sel[NAME_MAXLEN+1];

char     *sqlbuf='\0';

SQLINTEGER     cbStatus = SQL_NTS;

/* Initializtion begin...*/

rc = SQLAllocEnv(&hEnv);

if ( rc != SQL_SUCCESS&& rc != SQL_SUCCESS_WITH_INFO )

{

fprintf(stderr, "*** ERROR in %s, line %d: %s\n",__FILE__, __LINE__, "allocating an environment handle");

exit(1);

}

rc = SQLAllocConnect(hEnv, &hDbc);

CheckReturnCode(rc, hEnv, SQL_NULL_HDBC, SQL_NULL_HSTMT, "Unable to allocate a connection handle\n", __FILE__, __LINE__);

rc = SQLDriverConnect(hDbc, NULL, ConnString, SQL_NTS,NULL, 0, NULL, SQL_DRIVER_NOPROMPT);

CheckReturnCode(rc, hEnv, SQL_NULL_HDBC, SQL_NULL_HSTMT, "Unable to get a connection\n", __FILE__, __LINE__);

rc = SQLSetConnectOption (hDbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF);

CheckReturnCode(rc, hEnv, SQL_NULL_HDBC, SQL_NULL_HSTMT, "Unable to turn off commit\n", __FILE__, __LINE__);

rc = SQLAllocStmt(hDbc, &hStmt_ins);

CheckReturnCode(rc, hEnv, hDbc, SQL_NULL_HSTMT, "Unable to allocate a insert statement handle\n", __FILE__, __LINE__);

rc = SQLAllocStmt(hDbc, &hStmt_sel);

CheckReturnCode(rc, hEnv, hDbc, SQL_NULL_HSTMT, "Unable to allocate a select statement handle\n", __FILE__, __LINE__);

printf("Successfully ini environment...\n");

sqlbuf = (char *)malloc(SQL_MAXLEN+1);

if (sqlbuf == NULL) {

fprintf(stderr, "*** ERROR in %s, line %d: %s\n",__FILE__, __LINE__, "allocating an SQL buffer");

exit(1);

}

/*strcat(sqlbuf,"insert into student values(studentID.NEXTVAL,?,?)"); */

strcat(sqlbuf,"insert into student values(studentID.NEXTVAL,?,?)");

rc = SQLPrepare(hStmt_ins, (STR) sqlbuf, SQL_NTS);

CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to prepare statment\n", __FILE__, __LINE__);

/* binding inserting column */

rc = SQLBindParameter(hStmt_ins, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,0, 0,name_ins, 0, NULL);

CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to bind insert name\n", __FILE__, __LINE__);

rc = SQLBindParameter(hStmt_ins, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,0, 0,department_ins, 0, NULL);

CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to bind insert department\n", __FILE__, __LINE__);

/**rc = SQLTransact(hEnv, hDbc, SQL_COMMIT);

//CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to commit inserting\n", __FILE__, __LINE__);*/

/*inserting first*/

printf("Preparing insert...\n");

printf("Name  :");

scanf("%s",name_ins);

printf("Department :");

scanf("%s",department_ins);

printf("Inserting...\n");

rc = SQLExecute(hStmt_ins);

CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to inserting\n", __FILE__, __LINE__);

rc = SQLTransact(hEnv, hDbc, SQL_COMMIT);

CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to commit inserting\n", __FILE__, __LINE__);

if ( hStmt_ins != SQL_NULL_HSTMT ){

rc = SQLFreeStmt(hStmt_ins, SQL_DROP);

CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to free the insert statement handle\n", __FILE__, __LINE__);

}

printf("Inserting done.\n");

printf("Selecting...\n");

/** Prepare select statement     */

strcpy(sqlbuf,"select id,name,department from student");

rc = SQLPrepare(hStmt_sel, (STR) sqlbuf, SQL_NTS);

CheckReturnCode(rc, hEnv, hDbc, hStmt_sel, "Unable to prepare statment\n", __FILE__, __LINE__);

/* binding output column */

rc = SQLBindCol(hStmt_sel, 1, SQL_C_ULONG, &id_sel, 0, NULL);

CheckReturnCode(rc, hEnv, hDbc, hStmt_sel, "Unable to bind id\n", __FILE__, __LINE__);

rc = SQLBindCol(hStmt_sel, 2, SQL_C_CHAR,name_sel, sizeof(name_sel), NULL);

CheckReturnCode(rc, hEnv, hDbc, hStmt_sel, "Unable to bind name\n", __FILE__, __LINE__);

rc = SQLBindCol(hStmt_sel, 3, SQL_C_CHAR,department_sel, sizeof(department_sel), NULL);

CheckReturnCode(rc, hEnv, hDbc, hStmt_sel, "Unable to bind department\n", __FILE__, __LINE__);

// rc = SQLTransact(hEnv, hDbc, SQL_COMMIT);

// CheckReturnCode(rc, hEnv, hDbc, hStmt_ins, "Unable to commit inserting\n", __FILE__, __LINE__);

rc = SQLExecute(hStmt_sel);

CheckReturnCode(rc, hEnv, hDbc, hStmt_sel, "Unable to executeSQL\n", __FILE__, __LINE__);

//fetch data

while ((rc = SQLFetch(hStmt_sel)) == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO){

if (rc != SQL_NO_DATA_FOUND){

printf("Id: %d ",id_sel);

printf("Name: %s ",name_sel);

printf("Department: %s \n",department_sel);

}

}

if ( hStmt_sel != SQL_NULL_HSTMT ){

rc = SQLFreeStmt(hStmt_sel, SQL_CLOSE);

CheckReturnCode(rc, hEnv, hDbc, hStmt_sel, "Unable to free the select statement handle\n", __FILE__, __LINE__);

}

rc = SQLTransact(hEnv, hDbc, SQL_COMMIT);

if ( hDbc != SQL_NULL_HDBC ){

rc = SQLDisconnect(hDbc);

CheckReturnCode(rc, hEnv, hDbc, SQL_NULL_HSTMT, "Unable to close the ""connection\n", __FILE__, __LINE__);

rc = SQLFreeConnect(hDbc);

CheckReturnCode(rc, hEnv, hDbc, SQL_NULL_HSTMT, "Unable to free the ""connection handle\n", __FILE__, __LINE__);

}

if ( hEnv != SQL_NULL_HENV ){

rc = SQLFreeEnv(hEnv);

CheckReturnCode(rc, hEnv, SQL_NULL_HDBC, SQL_NULL_HSTMT, "Unable to free the ""environment handle\n", __FILE__, __LINE__);

}

free(sqlbuf);

exit(0);

}

void CheckReturnCode(SQLRETURN rc, SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, char *msg, char *filename, int lineno)

{

#define MSG_LNG 512

SQLCHAR szSqlState[MSG_LNG];

/* SQL state string */

SQLINTEGER pfNativeError;

/* Native error code */

SQLCHAR szErrorMsg[MSG_LNG];

/* Error msg text buffer pointer */

SQLSMALLINT pcbErrorMsg;

/* Error msg text Available bytes */

SQLRETURN ret = SQL_SUCCESS;

if ( rc != SQL_SUCCESS && rc != SQL_NO_DATA_FOUND )

{

if ( rc != SQL_SUCCESS_WITH_INFO )

{

/*

* It隆炉s not just a warning

*/

fprintf(stderr, "*** ERROR in %s, line %d:"" %s\n", filename, lineno, msg);

}

/*

* Now see why the error/warning occurred

*/

while ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO )

{

ret = SQLError(henv, hdbc, hstmt, szSqlState, &pfNativeError, szErrorMsg, MSG_LNG,  &pcbErrorMsg);

switch ( ret )

{

case SQL_SUCCESS:

fprintf(stderr, "*** %s\n""*** ODBC Error/Warning = %s, ""TimesTen Error/Warning "" = %d\n", szErrorMsg, szSqlState, pfNativeError);

break;

case SQL_SUCCESS_WITH_INFO:

fprintf(stderr, "*** Call to SQLError"" failed with return code of ""SQL_SUCCESS_WITH_INFO.\n ""*** Need to increase size of"" message buffer.\n");

break;

case SQL_INVALID_HANDLE:

fprintf(stderr, "*** Call to SQLError"" failed with return code of ""SQL_INVALID_HANDLE.\n");

break;

case SQL_ERROR:

fprintf(stderr, "*** Call to SQLError"" failed with return code of ""SQL_ERROR.\n");

break;

case SQL_NO_DATA_FOUND:

break;

} /* switch */

} /* while */

}

}

运行结果:

Successfully ini environment...

Preparing insert...

Name  :tao

Department :computer

Inserting...

Inserting done.

Selecting...

Id: 41 Name: tao Department: computer

java odbc timesten_TimesTen 使用ODBC连接数据库的程序问题相关推荐

  1. 用eclipse连接数据库捕获java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]将截断字符串或二进制数据。

    用eclipse连接数据库捕获异常显示java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]将截断字符串或二进制数 ...

  2. mysql odbc桥_jdbc-odbc桥连接数据库

    不配置ODBC数据源,用JDBC-ODBC桥连接Access数据库 不配置ODBC数据源,用JDBC-ODBC桥连接Access数据库 -------------------------------- ...

  3. java未发现数据源名称并且未指定默认驱动程序_转:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序...

    在Win7 64位系统下,使用Java+Access数据库编程,用Java连数据库时,出现错误提示,如下: Java java.sql.SQLException: [Microsoft][ODBC 驱 ...

  4. Java七步创建以JDBC连接数据库的程序

    JDBC连接数据库 ◆ 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java. ...

  5. mysql odbc 驱动_mysql odbc驱动 mysql odbc connector

    mysql odbc connector又名<mysql odbc驱动>,MySQL Connector ODBC是一个有效且实用的ODBC连接器,安装后它允许您将应用程序连接到MySQL ...

  6. 参考:ODBC Drivers error(ODBC数据库驱动错误代码)原因解释

    1.错误信息 Microsoft   OLE   DB   Provider   for   ODBC   Drivers   error   '80004005 ' [Microsoft][ODBC ...

  7. 《Java编码指南:编写安全可靠程序的75条建议》—— 指南20:使用安全管理器创建一个安全的沙盒...

    本节书摘来异步社区<Java编码指南:编写安全可靠程序的75条建议>一书中的第1章,第1.20节,作者:[美]Fred Long(弗雷德•朗), Dhruv Mohindra(德鲁•莫欣达 ...

  8. 《Java编码指南:编写安全可靠程序的75条建议(英文版)》—— 2.7 修复错误...

    本节书摘来异步社区<Java编码指南:编写安全可靠程序的75条建议(英文版)>一书中的第2章,第2.7节,作者:[美]Fred Long(弗雷德•朗),Dhruv Mohindra(德鲁• ...

  9. 利用Spring-Boot解析Excel、用Java分析Excel、告别手动输入用程序读取Excel

    利用Spring-Boot解析Excel.用Java分析Excel.告别手动输入用程序读取Excel 一.资源 java读取Excel文件 二.修改 (一)中的代码中的 import service. ...

  10. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...

    用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...

最新文章

  1. Java was started but returned exit code=13
  2. linux 查看java cpu_Linux查看CPU和内存使用情况
  3. linux oracle 11g ora-00845,Linux下安装Oracle11g , MEMORY_TARGET(AMM)小于/dev/shm处理(ORA-00845)...
  4. 编译源码时出现 Checking API: checkapi-last (unknown): error 17解决方法
  5. SpringBoot注册组件之@Import@ImportResource@ComponentScan
  6. 若非疯子怎会选择创业
  7. 一个很好用的,免费的UML在线画图网站
  8. h3c交换机重启_华三交换机重启命令(范文篇).doc
  9. ssd测试软件寿命查看,铅锤哥:怎么看SSD还能用多久?固态硬盘寿命的检测方法...
  10. 「游戏建模」如何使用zbrush为模型制作衣服上的褶皱
  11. linux 强制类型转换,C++ 新标准下的强制类型转换详解
  12. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.9 案例研究...
  13. 1065 单身狗(25 分)
  14. principal java_CAS 单点登录服务端 如何获取到principal
  15. win10系统mongodb 5.0安装配置+自动启动
  16. 做BI财务数据分析,国产BI软件经验更足
  17. VINS笔记1——滤波与优化
  18. 二手书交易平台备受资本青睐 打造小而美的市场会不会一帆风顺?
  19. LabVIEW控制Arduino采集电位器电压(基础篇—4)
  20. 程序员的另面爱好(四)

热门文章

  1. Java毕业设计——员工管理系统
  2. 向jre中添加安全证书
  3. 科研计算机视觉常用绘图软件,科研图形处理——除了R、Graphpad外,这款软件也不要错过哦!...
  4. Leetcode——C++突击面试
  5. UCF101动作识别数据集简介绍及数据预处理
  6. 100多套毕业论文答辩PPT模板百度网盘链接
  7. 对于三极管饱和状态的一些浅见——与网友的讨论贴
  8. 附合导线近似平差计算
  9. 模组使用之常见认证,CCC认证,SRRC认证,ROHS认证,NAL认证
  10. 为股票量化分析最新整理的免费股票数据API接口