免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4067 | 回复: 6

[C] 请问无双斑竹一个关于unix下c语言操作db2数据库的问题。 [复制链接]

论坛徽章:
0
发表于 2003-02-16 17:24 |显示全部楼层
刚刚离开学校开始工作,公司需要我现在要在unix环境下用c开发操作db2数据库
我做了一个测验程序来连接db2数据库,但出现问题,原程序如下:
/* db2test.c */

int main (int argc,char **argv)
{
  // 获取与数据库的连接
        Connection con = DriverManager.getConnection            
                                                      ("jdbc:default:connection";
        String sql = new String();

        Statement stmt= null;
        stmt = con.createStatement;

        sql = "select  * from table";

        ResultSet rs_table_field ;
       //执行sql
        rs_table_field = stmt.executeQuery(sql);
}

用vi 编辑好了后,我用
$gcc -o db2test db2test.c
但出现了许多的问题:
db2test.c: In function `int main(int, char**)':
db2test.c:9: `Connection' undeclared (first use this function)
db2test.c:9: (Each undeclared identifier is reported only once for each function it appears in.)
db2test.c:9: parse error before `=' token
db2test.c:10: `String' undeclared (first use this function)
db2test.c:12: `Statement' undeclared (first use this function)
db2test.c:13: `stmt' undeclared (first use this function)
db2test.c:13: `con' undeclared (first use this function)
db2test.c:15: `sql' undeclared (first use this function)
db2test.c:17: `ResultSet' undeclared (first use this function)
db2test.c:17: parse error before `;' token
db2test.c:18: `rs_table_field' undeclared (first use this function)
我是初次接触unix,所以不知道是那里错误了,是不是要include 什么东西?
请指教,或是有什么好的资料(unix编程)请告知,谢谢了!!

论坛徽章:
0
发表于 2003-02-16 17:41 |显示全部楼层

请问无双斑竹一个关于unix下c语言操作db2数据库的问题。

db2test.c:9: `Connection' undeclared (first use this function)
函数没有定义
你是不是包括了正确的头文件

db2test.c:10: `String' undeclared (first use this function)
这个函数是你自己写的还是从书上招的
String 类也没有定义,并且这个类不是标准C++中的


以下的错误内容也是差不多

论坛徽章:
0
发表于 2003-02-16 17:43 |显示全部楼层

请问无双斑竹一个关于unix下c语言操作db2数据库的问题。

许多地方都是语法报错
你的程序语法不对

UNIX下C编程与其它编程都一样
和TC编程也一样
因为都使用标准的C/C++语法

如要使用include

变量应该先定义再使用
(db2test.c:13: `stmt' undeclared (first use this function)
db2test.c:13: `con' undeclared (first use this function)
db2test.c:15: `sql' undeclared (first use this function)



这些问题其它人也一样可以回答的

论坛徽章:
0
发表于 2003-02-16 18:01 |显示全部楼层

请问无双斑竹一个关于unix下c语言操作db2数据库的问题。

这个程序使本来在db2的存储过程中便写好的java程序,我要把这个程序转变成unix下的c程序,我现在发觉连接都不对,不应该用jdbc连接。
我打算回去看看书, 但不知有什么好的网站或是书籍介绍unix下的c编程???谢谢!!

论坛徽章:
0
发表于 2003-02-16 18:41 |显示全部楼层

请问无双斑竹一个关于unix下c语言操作db2数据库的问题。

这个程序使本来在db2的存储过程中便写好的java程序

java程序与C使用的类库是不一样的
而且也c中不可以使用jdbc

但是可以使用ODBC(比较慢)
或是专门接口
我不知道DB2的开发接口是什么


最好的资料是
www.google.com
在上面找一下就可以

编程方面
与WINDOWS没有区别
一些编程书说的只是UNIX上的API使用方法
如线程创建、IPC问题
这方面
Steven的
unix环境高级编程和UNIX网络编程
都可以

电子书不知道

论坛徽章:
0
发表于 2003-02-17 10:35 |显示全部楼层

请问无双斑竹一个关于unix下c语言操作db2数据库的问题。

感谢斑竹的帮助,我昨天问了高人,得到了一个例程,现贡献如下,希望能给别人以帮助:

#include <iostream.h>;
#include <stdlib.h>;
#include <string.h>;
#include <stdio.h>;
#include <sqlca.h>;
#include "utilemb.h"

EXEC SQL INCLUDE SQLCA;


class Cursor {
   public:
      int Fetch ();

   private:
      EXEC SQL BEGIN DECLARE SECTION;
         char   pname[20];
         char   dept[50];
      EXEC SQL END DECLARE SECTION;
};


class CNT {
   public:
      void Connect(char *, char *);
      void Disconnect();

   private:
      EXEC SQL BEGIN DECLARE SECTION;
         char userid[9];
         char passwd[19];
      EXEC SQL END DECLARE SECTION;
};



void CNT::Connect (char *uid, char *pswd) {
   strcpy (userid, uid);
   strcpy (passwd, pswd);

   cout <<  "Connecting to database mpptest... \n";
   EXEC SQL CONNECT TO mpptest USER :userid USING :passwd;
   EMB_SQL_CHECK("CONNECT TO mpptest" ;
   cout <<  "Connected to database mpptest \n";
}

void CNT:isconnect () {
   // Disconnect from Remote Database
   cout <<  "Disconnecting from database mpptest... \n";
   EXEC SQL CONNECT RESET;
   EMB_SQL_CHECK("CONNECT RESET";
   cout <<  "Disconnected from database SAMPLE \n";
}

int
Cursor::Fetch () {
   EXEC SQL DECLARE c1 CURSOR FOR
       SELECT cust_name, cust_address FROM  dw_cust_ext FETCH FIRST 10 ROW ONLY;
   EMB_SQL_CHECK("DECLARE CURSOR" ;

   EXEC SQL OPEN c1;  
   EMB_SQL_CHECK("OPEN CURSOR" ;

   cout << endl;
   do {
      EXEC SQL FETCH c1 INTO :pname, :dept;
      if (SQLCODE != 0) break;

      cout << pname << " 住在. " << dept << " \n";
   } while ( 1 );

   EXEC SQL CLOSE c1;
   EMB_SQL_CHECK("CLOSE CURSOR" ;

   return 0;
}


int main(int argc, char *argv[])
{
   cout << "Sample C++ program: CURSOR \n";
   CNT cnt;
   Cursor doit;

   if (argc == 3) {
      cnt.Connect (argv[1], argv[2]);
   } else {
      cout << "\nUSAGE: cursor userid passwd\n\n";
   } // end if


   doit.Fetch();

   return 0;
} // end of program : cursor.sqC
当然还要写上你自己的makefile文件,保证你的db2数据库中有dw_cust_ext表,表中有cust_name和cust_address,
运行时输入cursor 用户名 用户密码
恐怕写得不是很清楚。

论坛徽章:
0
发表于 2003-02-17 12:10 |显示全部楼层

请问无双斑竹一个关于unix下c语言操作db2数据库的问题。

好像有点像是pro*c的语法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP