首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c从单板机写入mysql数据库

用c从单板机写入mysql数据库
EN

Stack Overflow用户
提问于 2012-08-06 17:57:59
回答 2查看 2K关注 0票数 0

我想将网络数据包从单板计算机读取到数据库中(准确地说是mysql ),单板计算机和mysql之间的通信代码是用c编写的。我需要您的帮助来获取一些有用的在线材料链接,因为我一直在尝试寻找有用的信息,但尚未产生任何结果。感谢您的理解。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-06 18:32:34

您需要在您的系统上安装第一个libmysqlclient-dev包(我假设您使用的是linux),然后您可以修改以下代码以满足您的需要:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <mysql/mysql.h>

#define BUFFER_SIZE 1024    // Increase this buffer if yoy want

/* This function is used for the database connection */
MYSQL * my_mysql_connection(const char *server, const char *db, const char *user, const char *pwd)
{
    MYSQL *myh;

    /* Some initialisation */ 
    if (NULL == (myh = mysql_init(NULL)))
    {
        fprintf(stdeee, "Fails to allocate memory for MYSQL!\n");

        exit (EXIT_FAILURE);
    }

    /* Connect to the database. */
    if (NULL == mysql_real_connect (myh, server, user, pwd, db, 0, NULL, 0))
    {
        fprintf(stderr, "%s", mysql_error(myh));
        free (myh);

        return NULL;
    }

    return myh;
 }

/* This function is used to perform a query */ 
int my_mysql_query(MYSQL *myh, const char *query)
{
    /* Do the query request */
    if (0 != mysql_query(myh, query))
    {
        fprintf(stderr, "FAIL to perform the query : '%s' %s\n", query, mysql_error(myh));

        exit (EXIT_FAILURE);
    }

    return 0;
}

/*
 * Suppose that your table students_table has this fields : student_number, student_name, 
 * student_address, student_phone
 */
/* This function is used to get and process the result of the query */
void my_mysql_process_query_result(MYSQL * myh)
{
    int num_fields;
    int i;
    MYSQL_RES *query_result;
    MYSQL_FIELD *field;
    MYSQL_ROW row;
    char  *buffer;

    buffer = (char *) calloc(BUFFER_SIZE, sizeof(char));

    /* Select all students present in the students_table */
    if (my_mysql_query(myh, "SELECT student_number, student_name, student_address, student_phone FROM students_table"))
    {
        exit (EXIT_FAILURE);
    }
    query_result = mysql_store_result (myh);

    /* Retreive the number of rows and fields */
    field = mysql_fetch_fields(query_result);
    num_fields = mysql_num_fields(query_result);

    /* construct the buffer containing each row */
    while ((row = mysql_fetch_row (query_result))) 
    {
        /* Init our buffer with fields sperated by ";", modify if you need, it's just an example */
        memset(buffer, '\0', sizeof*buffer);

        for (i = 0; i < num_fields - 1; i++)
        {
            strncat(buffer, row[i], strlen(row[i]) + 1);
            strncat(buffer, ";", 2);            
        }   
        strncat(buffer, row[i], strlen(row[i]) + 1);
        strncat(buffer, "\n", 2);
        // You can process your buffer (row) here
        process_student_row(buffer);
    }
    free(buffer);

    mysql_free_result (query_result);
}

不要忘记链接到mysqlclient库:-lmysqlclient

编辑:

你可以像这样在debian上安装libmysqlclient-dev (http://packages.debian.org/squeeze/libmysqlclient-dev):

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install libmysqlclient-dev

你可以像这样编译你的程序:

代码语言:javascript
复制
gcc -Wall my_msql_program.c -o my_mysql_program -lmysqlclient
票数 1
EN

Stack Overflow用户

发布于 2012-08-06 18:07:25

如果mySQL在普通PC上运行,则需要在单板计算机和普通PC之间进行通信,以便将您想要的数据从单板传输到PC。你需要在PC上安装一台服务器。完成此操作后,PC获取数据并使用mySQL C应用编程接口,将其提交到mySQL数据库。

我可能是错的,但你可能有些不知所措。一般的设计很简单,如果对你来说不明显,可能是你试图做一些太难的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11826073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档