Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47354
  • 博文数量: 33
  • 博客积分: 1301
  • 博客等级: 中尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 21:06
文章分类
文章存档

2009年(33)

我的朋友

分类: C/C++

2009-07-05 16:00:49

 
另外,如果pzconnect函数的函数名改为connect,就会在mysql_real_connect的时候出错(段错误),我想应该是因为mysql_real_connect会调用它自己的一个connect函数吧,而我这个和它的冲突了,改了名就没事了。。
 
对getinstr进行了加强。
第一个字符就输入回车,不记录在指令区
如果回车不是第一个字符,就先替换成\0,看看指令是不是quit或者exit;
不是的话,就把回车替换成空格,这样就不会把
SELECT * FROM
children
变成
SELECT * FROMchildren
改了以后变成
SELECT * FROM children
这和mysql客户端是一致的。
 
 
编译命令:
gcc pzmysqlc.c -o pzmysqlc -I/usr/include/mysql -lmysqlclient -Wall
 

#include <stdio.h>
#include <mysql.h>
#include <string.h>

#define QUER 0
#define QUIT 1
#define CONT 2

int pzconnect(MYSQL *cp) {
    mysql_init(cp);
    if(mysql_real_connect(cp, "localhost", "pz", NULL, "pz",
                          0, NULL, 0) == NULL){
        return -1;
    }
    return 0;
}

void reperr(MYSQL *cp) {
    fprintf(stderr, "Error %d: %s\n", mysql_errno(cp), mysql_error(cp));
}

int getinstr(char *instr, int lim) {
    char *sp = instr;
    
    while((*sp = getchar()) != ';') {
        if(*sp == '\n'){
            if(sp == instr)
                return CONT;
            *sp = '\0';
            if(strcmp(instr, "quit") == 0 || strcmp(instr, "exit") == 0) {
                return QUIT;
            }
            *sp++ = ' ';
            continue;
        }
        sp++;
    }
    
    *sp = '\0';
    return QUER;
}

int showres(MYSQL *cp) {
    MYSQL_RES *resp;
    MYSQL_ROW row;
    int fc, i;
    
    resp = mysql_store_result(cp);
    fc = mysql_field_count(cp);
    while((row = mysql_fetch_row(resp)) != NULL) {
        for(i = 0; i < fc; i++){
            printf("%s ", row[i]);
        }
        printf("\n");
    }
    if(mysql_errno(cp)){
        return -1;
    }
    mysql_free_result(resp);
    return 0;
}

void welcome() {
    printf("Welcome!\n");
}

int main() {
    MYSQL conn;
    char instr[512];
    int r;
    if(pzconnect(&conn) != 0){
        reperr(&conn);
        return -1;
    }
    welcome();
    
    while((r = getinstr(instr, 512)) != QUIT) {
        if(r == CONT)
            continue;
        if(mysql_query(&conn, instr) != 0){
            reperr(&conn);
            continue;
        }
        if(showres(&conn) != 0) {
            reperr(&conn);
        }
    }

    mysql_close(&conn);
    return 0;
}

阅读(1541) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~