Heim  >  Artikel  >  Datenbank  >  MySQL嵌入式版本的小程序例子_MySQL

MySQL嵌入式版本的小程序例子_MySQL

WBOY
WBOYOriginal
2016-06-01 13:26:121884Durchsuche

bitsCN.com MySQL嵌入式版本越来越式微了。碰巧有个小应用用到了它,顺便记录一下。
文档可以参考http://dev.mysql.com/doc/refman/5.6/en/libmysqld-example.html,看起来年久失修的样子,没法一看就懂。
希望下面这个简化的步骤可以起到点作用。
1. 下载代码并且进行版本编译。这个还比较简单,文档说的也很靠谱。
$ cmake . -DCMAKE_INSTALL_PREFIX=/home/mysql -DWITH_EMBEDDED_SERVER=1
$ make clean$ make -j 8
$ make install

2. 写个小程序
$ ls
GNUmakefile main.cc my.cnf
具体代码就看附件好了,其实很简单。
$ make

3. 安装好MySQL,初始化一下
$ cd /home/mysql
$ scripts/mysql_install_db --defaults-file=/home/mysql/my.cnf

4. 启动小程序
$ ./main
附件:

# This assumes the MySQL software is installed in /usr/local/mysql#inc      := /usr/local/mysql/include/mysql#lib      := /usr/local/mysql/lib# If you have not installed the MySQL software yet, try this insteadtopdir   := /home/mysql/mysql-5.5.35inc      := $(topdir)/includelib      := $(topdir)/libmysqldCXX      := g++CPPFLAGS := -I$(inc) -D_THREAD_SAFE -D_REENTRANTCXXFLAGS := -g -WallLDFLAGS  := # You can change -lmysqld to -lmysqlclient to use the# client/server libraryLDLIBS    = -L$(lib) -lmysqld -lm -lcrypt -ldl -lz -lrtifneq (,$(shell grep FreeBSD /COPYRIGHT 2>/dev/null))# FreeBSDLDFLAGS += -pthreadelse# Assume LinuxLDLIBS += -pthreadendif# This works for simple one-file test programssources := $(wildcard *.cc)objects := $(patsubst %cc,%o,$(sources))targets := $(basename $(sources))all: $(targets)clean:	rm -f $(targets) $(objects) *.core---#include <mysql.h>#include <iostream>#include <cassert>using namespace std;const char *server_options[] = /       { "mysql_test", "--defaults-file=my.cnf", NULL };int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;const char *server_groups[]= { "libmysqld_server",                               "libmysqld_client",                               NULL};bool is_server_started= false;MYSQL *MySQL= NULL;const char *db= NULL;void start_server(){  cout << "enter start_server()" << endl;  if (mysql_library_init(num_elements, (char **) server_options, (char **) server_groups)) {    is_server_started= false;    cout << "ERROR: start server failed." << endl;  }  else {    is_server_started= true;    cout << "INFO: start server OK." << endl;  }}void stop_server(){  cout << "enter stop_server()" << endl;  mysql_server_end();}bool connect_server(){  cout << "enter connect_server()" << endl;  bool rc = true;  MySQL = mysql_init(NULL);  if (!MySQL)    return rc;  if (mysql_real_connect(MySQL, NULL, NULL, NULL, db, 0, NULL, 0))    rc = false;   MySQL->reconnect= 1;  return rc;}void output_rows(MYSQL_RES *res){  MYSQL_ROW row;  unsigned long n = 0;  while ((row= mysql_fetch_row(res)) != 0)  {    mysql_field_seek(res, 0);    for (unsigned int i= 0 ; i < mysql_num_fields(res); i++)      cout << "row[" << n++ << "]:"<< row[i] << endl;   }}bool get_dbs(){  MYSQL_RES *res;  if (!is_server_started)    return true;  if (!(res= mysql_list_dbs(MySQL, "%")))    return true;  output_rows(res);  mysql_free_result(res);  return false;}int main(int argc, char *argv[]){  start_server();  if (is_server_started) {    cout << "server started." << endl;    if (!connect_server()) {      get_dbs();    }    stop_server();  }  return 0;}---[libmysqld_client][libmysqld_server]basedir=/home/mysql/datadir=/home/mysql/datatmpdir=/home/mysql/tmplog-error=/home/mysql/alert.loglc_messages_dir=/home/mysql/shareinnodb_data_home_dir=/home/mysql/datainnodb_log_group_home_dir=/home/mysql/data


bitsCN.com

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:mysql分表_MySQLNächster Artikel:mysql集群数据一致性校验_MySQL