萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL嵌入式版本的小程序例子

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

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 
附件:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 # 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 instead topdir   := /home/mysql/mysql-5.5.35 inc      := $(topdir)/include lib      := $(topdir)/libmysqld   CXX      := g++ CPPFLAGS := -I$(inc) -D_THREAD_SAFE -D_REENTRANT CXXFLAGS := -g -Wall LDFLAGS  := # You can change -lmysqld to -lmysqlclient to use the # client/server library LDLIBS    = -L$(lib) -lmysqld -lm -lcrypt -ldl -lz -lrt   ifneq (,$(shell grep FreeBSD /COPYRIGHT 2>/dev/null)) # FreeBSD LDFLAGS += -pthread else # Assume Linux LDLIBS += -pthread endif   # This works for simple one-file test programs sources := $(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++)
copyright © 萬盛學電腦網 all rights reserved