2012-07-03 2 views
4

저는 gwan 서버()를 사용하는 것을 처음 사용하고 있습니다. 내가 gwan 서버에 대한 c 스크립트에서 mysql을 사용하는 가장 쉬운 방법은 무엇인지 알고 싶습니까?c 스크립트에서 mysql에 연결 하시겠습니까?

here으로 dbi.c를 실험했으며 프로젝트 페이지는 here이며, here을 찾을 수있는 mysql 용 c API도 있습니다.

누구든지이 중 하나 또는 둘 다를 사용 해본 경험이 있습니까? 찬성/반대 의견은 무엇입니까? 저 자신과 같은 멍청한 개발자가 mysql에 쉽게 연결할 수 있도록 해주는 다른 라이브러리가 있습니까?

도움을 주시면 감사하겠습니다.

감사합니다.

[편집] 또한 libdbi 스레드로부터 안전합니까? 그렇지 않은 것처럼 보입니다.

[수정 2] 그 자체 LIB MySQL의 당신이 libdbi 추상화에 대한 좋은 다른 드라이버가 할 수있는 나타나는 나중에 데이터베이스 유형을 전환 할 수 있다고 생각하지 않으면 갈 수있는 쉬운 방법입니다 것으로 보인다. 내가 핸들러의 주요 기능에 어떤 "MySQL의 코드"가 있다면 나를 위해 외무성 부상과 관련된

을 안전하지 않은 것으로 나타나 간헐적으로 무작위 오류가 발생,하지만 난 init 함수에서 "MySQL의 코드"를 넣어 경우 내가 kv 저장소에있는 모든 데이터를 넣으십시오임의의 오류가 완전히 사라진의 글로벌 포인터 중 하나에서 액세스했습니다.

는 희망이

답변

4
난 항상 네이티브 C API를 사용하여 선호

...

#pragma link "/usr/lib/libmysqlclient.so" 

#include "gwan.h" 
#include <mysql/mysql.h> 


int 
main (int argc, char **argv) 
{ 
    MYSQL_RES *result; 
    MYSQL_ROW row; 
    MYSQL conn, *conn_h; 

    conn_h = mysql_init (&conn); 
    if (!conn_h) 
    { 
     return 200; 
    } 

    if (!mysql_real_connect (conn_h, "localhost", ctx->usr, ctx->psw, NULL, 0, NULL, 0)) 
    { 
     mysql_close (conn_h); 
     return 200; 
    } 

    mysql_select_db (conn_h, ""); 

    char *query = ""; 

    if (mysql_query (conn_h, query)) 
    { 
     mysql_close (conn_h); 
     return 200; 
    } 

    result = mysql_store_result (conn_h); 
    if (!result) 
    { 
     mysql_close (conn_h); 
     return 200; 
    } 

    if (mysql_num_rows (result) == 0) 
    { 
     return 200; 
    } 

    while ((row = mysql_fetch_row (result))) 
    { 
     /* do something with row[i] */ 
    } 

    mysql_free_result (result); 
    mysql_close (conn_h); 

    return 200; // Ok 
} 

염두에 유지하는 데 도움이 (내가 libdbi 사용하고 있었다 나는 그것이 MySQL의 API에 대한 동일 할 것입니다 가정)을 스레드를 생성하려는 경우 mysql 라이브러리를 초기화해야합니다 (이 코드는 스레드로부터 안전하지 않습니다).

희망은 도움이됩니다.

+0

그래서 스레드 안전 연결 방법은 무엇입니까? 나는 gwan이 많은 연결을 동시에 수행하는 스레드를 사용한다는 인상을 받았다. – sbditto85

+0

@ sbditto85 연결은 항상 스레드로부터 안전합니다. 연결 내에서 스레드를 생성 할 때만주의해야합니다. 지금까지 사용하지 못했던 것을 보았습니다. –

+0

하지만 스레드 안전 lib를 사용해야합니까? '스레드 안전 클라이언트 라이브러리 인 libmysqlclient_r은 연결 당 스레드로부터 안전합니다. '[mysql "쓰레드 된 클라이언트 작성법"(http://dev.mysql.com/doc/refman/5.0/en/threaded-clients.html)을 보거나 나는 오해하고 있는가? 다시 미안하지만 나는 여전히 C 프로그래밍에 멍청한 사람이다. – sbditto85