歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Ubuntu 10.04下C連接MySQL數據庫

1.安裝mysql-server,在Ubuntu 10.04下安裝mysql-server-5.1,會自動安裝mysql-client_5.1
 sudo apt-get install mysql-server-5.1
2.C APIs包含在mysqlclient庫文件中與MySQL的源代碼一塊發行,用於連接到數據庫和執行數據庫查詢,因此需要安裝libmysqlclient-dev
 sudo apt-get install libmysqlclient-dev
 假定已安裝成功,相關文件如下:
 頭文件在/usr/include/mysql目錄下;
 庫文件在/usr/lib/mysql和/usr/lib目錄下
3.啟動和關閉mysql
 啟動mysql:sudo start mysql
 關閉mysql:sudo stop mysql
 使用ps aux |grep mysql 查看mysql啟動狀態
 ps命令用於查看當前系統中運行的進程信息,命令格式:ps [選項]
 常見參數:
 -a    顯示系統中所有進程,包括其他用戶進程
 -e    顯示所有進程信息
 -f    顯示進程的所有信息
 -l    顯示長格式顯示進程的信息
 -r    只顯示正在運行的程序
 -u    以用戶的格式顯示進程信息
 -x    顯示所有終端上的進程信息
 最常用的方法是ps aux,然後再利用一個管道符號導向到grep去查找特定的進程,然後再對特定的進程進行操作。例如前面使用的ps aux |grep mysql
4.鏈接庫時需要庫文件,有靜態庫文件,也有動態庫文件,也有名字相同的靜態庫文件和動態庫文件,如何區分:
 .o,.a,.so,.lo,.la後綴文件含義
 .o: 編譯的目標文件
 .a: 靜態庫,其實就是把若干o文件打了個包
 .so: 動態鏈接庫(共享庫)
 .lo: 使用libtool編譯出的目標文件,其實就是在o文件中添加了一些信息
 .la: 使用libtool編譯出的庫文件,其實是個文本文件,記錄同名動態庫和靜態庫的相關信息
 la只有在用libtool編譯應用程序或庫時才用,即開發者只指明la文件,至於最終鏈接a還是so由libtool決定,不使用libtool的小程序用不上la。
5.連接MySql
 a、連接到本機上的MYSQL:   
 首先打開終端窗口,再鍵入命令mysql -u root -p,回車後提示你輸密碼,如果剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車即可進入
 到MYSQL中了,MYSQL的提示符是:mysql>   
 b.修改密碼,格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼   
 例1:給root加個密碼ab12。首先打開終端窗口,然後鍵入以下命令:mysqladmin -uroot password ab12.(注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了)。   
 例2:再將root的密碼改為djg345。   mysqladmin -uroot -pab12 password djg345 (注:u與root可以不用加空格,其它也一樣)。
 c、退出MYSQL命令: exit
6.增加新用戶(注意:和上面不同,下面的因為是MYSQL環境中的命令,所以後面都帶一個分號作為命令結束符)   
 格式:grant select on 數據庫.* to 用戶名@登錄主機 identified by “密碼”   
 例1、增加一個用戶test1密碼為abc,讓他可以在任何主機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。
 首先用以root用戶連入MYSQL,然後鍵入以下命令:grant select,insert,update,delete on *.* to test1@“%” Identified by “abc”; 但例1增加的用戶是十分危險的,
 你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一台電腦上登錄你的mysql數據庫並對你的數據可以為所欲為了,解決辦法見例2。   
 例2、增加一個用戶test2密碼為abc,讓他只可以在localhost上登錄,並可以對數據庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL數據庫所在的那台主機),
 這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問數據庫,只能通過MYSQL主機上的web頁來訪問了。   
 grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;如果你不想test2有密碼,可再打一個命令將密碼消掉。
 grant select,insert,update,delete on mydb.* to test2@localhost identified by “”; 
6.顯示命令:(注:下面來看看MYSQL中有關數據庫方面的操作。注意:必須首先登錄到MYSQL中,以下操作都是在MYSQL的提示符下進行的,而且每個命令以分號結束)。
 a、顯示數據庫列表:show databases; 剛開始時才兩個數據庫:mysql和test。mysql庫很重要它裡面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。   
 b、顯示庫中的數據表:use mysql; show tables;   
 c、顯示數據表的結構:describe 表名;   
 d、建庫: create database 庫名;   
 e、建表: use 庫名; create table 表名 (字段設定列表);   
 f、刪庫和刪表: drop database 庫名; drop table 表名;   
 g、將表中記錄清空:delete from 表名;   
 h、顯示表中的記錄:select * from 表名;
7.編寫c代碼,文件名:mysql.c
//gcc mysql.c -o test -I /usr/include/mysql -L /usr/lib -lmysqlclient
#include <stdio.h>
#include <string.h>
#include <mysql.h>
 
int main()
{
 MYSQL mysql;
 MYSQL_RES *res;
 MYSQL_ROW row; 
 char sql[50];
 int t;
 sprintf(sql,"select * from Student"); // 定義執行的SQL語句 這裡是test數據庫裡的Student表
 mysql_init(&mysql);  //初始化mysql結構
 if(!mysql_real_connect(&mysql,"localhost","root","123456","test",3306,NULL,0))
  printf("\n數據庫連接發生錯誤: %s\n",mysql_error(&mysql));
 else
  printf("\n數據庫連接成功!\n");
 t = mysql_real_query(& mysql, sql, (unsigned int)strlen(sql));   //在服務器上執行定義的SQL語句
 if(t)
  printf("查詢語句錯誤: %s\n",mysql_error(&mysql));
 else
 {
  res = mysql_store_result(&mysql);
  while(row = mysql_fetch_row(res))
  {
   for(t = 0; t < mysql_num_fields(res); t++)
    printf("%s",row[t]);
   printf("\n");
  }
 }
 
 printf("釋放結果集的空間...\n");
 mysql_free_result(res);
 mysql_close(&mysql); //釋放數據庫
 printf("sql errror! %s\n",mysql_error(&mysql));   //如果發生錯誤打印錯誤代碼
 return 0;
}
 
編譯 :gcc -c mysql.c -I /usr/include/mysql/ 這裡的-I 是指定頭文件目錄 -c 是編譯成目標代碼
連接 :gcc mysql.o -o test -L /usr/lib/ -lmysqlclient 這裡的-L是指定庫文件路徑 這個參數-lmysqlclient是因為 C API代碼包含在mysqlclient庫中,正因為有了它才允許C程序訪問數據庫。

更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2

Copyright © Linux教程網 All Rights Reserved