mysql資料庫api(mysql資料庫API函數介面)

本文目錄一覽:

如何在vs2010中添加mysql 5.1資料庫 api方法

通過MySQL自定義的API函數進行連接

1、使用API的方式連接,需要載入mysql的頭文件和lib文件。

在VS2010的附加包含目錄中添加\MySQL\MySQL Server 5.1\include。在安裝MySql的目錄下找。 把libmysql.dll和libmysql.lib文件拷貝到所建的工程目錄下。然後在頭文件里包含以下內容:

//mysql所需的頭文件和庫文件

#include “winsock.h”

#include “mysql.h”

#pragma comment(lib,”libmySQL.lib”)

2、進行編碼

(1)連接mysql資料庫

頭文件里定義數據源指針 MYSQL m_sqlCon;

//連接MySql資料庫

try

{

mysql_init(m_sqlCon);

// localhost:伺服器 root為賬號密碼 test為資料庫名 3306為埠

if(!mysql_real_connect(m_sqlCon, “localhost”,”root”,”root”,”test”,3306,NULL,0))

{

AfxMessageBox(_T(“資料庫連接失敗!”));

return FALSE;

}

return TRUE;

}

catch (…)

{

return FALSE;

}

(2)關閉資料庫

mysql_close(m_sqlCon);

(3)創建表

char* pQuery = “create table if not exists DS_Building( ID VARCHAR(10),Name VARCHAR(255),Descs VARCHAR(255),PRIMARY KEY (ID))”

if(mysql_real_query(m_sqlCon,pQuery,(UINT)strlen(pQuery))!=0)

{

const char* pCh = mysql_error(m_sqlCon);

return FALSE;

}

附MySQL的API介面:

mysql_affected_rows() 返回被最新的UPDATE, DELETE或INSERT查詢影響的行數。

mysql_close() 關閉一個伺服器連接。

mysql_connect() 連接一個MySQL伺服器。該函數不推薦;使用mysql_real_connect()代替。

mysql_change_user() 改變在一個打開的連接上的用戶和資料庫。

mysql_create_db() 創建一個資料庫。該函數不推薦;而使用SQL命令CREATE DATABASE。

mysql_data_seek() 在一個查詢結果集合中搜尋一任意行。

mysql_debug() 用給定字元串做一個DBUG_PUSH。

mysql_drop_db() 拋棄一個資料庫。該函數不推薦;而使用SQL命令DROP DATABASE。

mysql_dump_debug_info() 讓伺服器將調試信息寫入日誌文件。

mysql_eof() 確定是否已經讀到一個結果集合的最後一行。這功能被反對; mysql_errno()或mysql_error()可以相反被使用。

mysql_errno() 返回最近被調用的MySQL函數的出錯編號。

mysql_error() 返回最近被調用的MySQL函數的出錯消息。

mysql_escape_string() 用在SQL語句中的字元串的轉義特殊字元。

mysql_fetch_field() 返回下一個表欄位的類型。

mysql_fetch_field_direct () 返回一個表欄位的類型,給出一個欄位編號。

mysql_fetch_fields() 返回一個所有欄位結構的數組。

mysql_fetch_lengths() 返回當前行中所有列的長度。

mysql_fetch_row() 從結果集合中取得下一行。

mysql_field_seek() 把列游標放在一個指定的列上。

mysql_field_count() 返回最近查詢的結果列的數量。

mysql_field_tell() 返回用於最後一個mysql_fetch_field()的欄位游標的位置。

mysql_free_result() 釋放一個結果集合使用的內存。

mysql_get_client_info() 返回客戶版本信息。

mysql_get_host_info() 返回一個描述連接的字元串。

mysql_get_proto_info() 返回連接使用的協議版本。

mysql_get_server_info() 返回伺服器版本號。

mysql_info() 返回關於最近執行得查詢的信息。

mysql_init() 獲得或初始化一個MYSQL結構。

mysql_insert_id() 返回有前一個查詢為一個AUTO_INCREMENT列生成的ID。

mysql_kill() 殺死一個給定的線程。

mysql_list_dbs() 返回匹配一個簡單的正則表達式的資料庫名。

mysql_list_fields() 返回匹配一個簡單的正則表達式的列名。

mysql_list_processes() 返回當前伺服器線程的一張表。

mysql_list_tables() 返回匹配一個簡單的正則表達式的表名。

mysql_num_fields() 返回一個結果集合重的列的數量。

mysql_num_rows() 返回一個結果集合中的行的數量。

mysql_options() 設置對mysql_connect()的連接選項。

mysql_ping() 檢查對伺服器的連接是否正在工作,必要時重新連接。

mysql_query() 執行指定為一個空結尾的字元串的SQL查詢。

mysql_real_connect() 連接一個MySQL伺服器。

mysql_real_query() 執行指定為帶計數的字元串的SQL查詢。

mysql_reload() 告訴伺服器重裝授權表。

mysql_row_seek() 搜索在結果集合中的行,使用從mysql_row_tell()返回的值。

mysql_row_tell() 返回行游標位置。

mysql_select_db() 連接一個資料庫。

mysql_shutdown() 關掉資料庫伺服器。

mysql_stat() 返回作為字元串的伺服器狀態。

mysql_store_result() 檢索一個完整的結果集合給客戶。

mysql_thread_id() 返回當前線程的ID。

mysql_use_result() 初始化一個一行一行地結果集合的檢索。

MySQL C API怎麼實現資料庫表的插入數據

或者綁定變數,官網例子:

MYSQL_TIME ts;

MYSQL_BIND bind[3];

MYSQL_STMT *stmt;

strmov(query, “INSERT INTO test_table(date_field, time_field,

timestamp_field) VALUES(?,?,?”);

stmt = mysql_stmt_init(mysql);

if (!stmt)

{

fprintf(stderr, ” mysql_stmt_init(), out of memory\n”);

exit(0);

}

if (mysql_stmt_prepare(mysql, query, strlen(query)))

{

如何提高mysql的api的訪問性能

MySQL Cluster提供多種方式對存儲數據進行訪問; 最常見的方法當然是SQL,不過正如下圖所示,我們還可以利用多種原生API幫助應用程序直接從資料庫當中讀取及寫入數據,同時又能通過轉換為SQL以繞過MySQL Server的方式防止效率低下或者拉高開發復…

mysql的C API編程

MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客戶端中用來設置讀取超時時間的參數。在 MySQL 的官方文檔中,該參數的描述是這樣的:

MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.

也就是說在需要的時候,實際的超時時間會是設定值的 3 倍。但是實際測試後發現實際的超時時間和設置的超時時間一致。

而具體什麼時候發生三倍超時,在文檔中沒有找到。所以對 MySQL 5.7.20 的源碼進行了一些分析。

使用 GDB 調試代碼找了實際與 mysql server 通信的代碼,如下:

其中 vio_read() 函數中,使用 recv 和 poll 來讀取報文和做讀取超時。net_should_retry() 函數只有在發生 EINTR 時才會返回 true。從這段代碼來看是符合測試結果的,並沒有對讀取進行三次重試。只有在讀取操作被系統中斷打斷時才會重試,但是這個重試並沒有次數限制。

從上面代碼的分析可以看出,代碼的邏輯和文檔的描述不符。於是在一頓搜索後,找到了一個 MySQL 的 BUG(Bug #31163)。該 BUG 報告了在 MySQL 5.0 中,MySQL c api 讀取的實際超時時間是設置的三倍,與現有文檔描述相符。於是對 MySQL 5.0.96 的代碼又進行分析。

同樣使用 GDB 找到了通信部分的代碼。這次找到了重試三次的代碼,如下:

這個版本的 MySQL api 的讀寫超時是直接使用的 setsockopt 設置的。第一次循環,在 A 點發生了第一次超時(雖然注釋寫的非阻塞,但是客戶端的連接始終是阻塞模式的)。然後在 B 點將該 socket 設置為阻塞模式,C 點這裡重置 retry 次數。由於設置了 alarm 第二次以後的循環會直接進入 D 點的這個分支,並且判斷循環次數。作為客戶端時net-retry_count 始終是 1,所以重試了兩次,共計進行了 3 次 vioread 後從 E 點退出函數。

由上面的分析可知,MySQL 文檔對於該參數的描述已經過時,現在的 MYSQL_OPT_READ_TIMEOUT 並不會出現三倍超時的問題。而 Bug #31163 中的處理結果也是將文檔中該參數的描述更新為實際讀取超時時間是設定時間的三倍。也許是 MySQL 的維護者們在後續版本更新時忘記更新文檔吧。

VC 用MySQL API 連接資料庫,如何返回查詢的總數?

好多人做法是,寫兩條條件相同的語句

一條查詢總數一條查詢結果

select

count(*)

from

tab1

where

name

like

‘aaa’;

select

*

from

tab1

where

name

like

‘aaa’

limit

0,10

還有別的辦法嗎?謝謝!

對我有用[0]丟個板磚[0]引用舉報管理TOPrucypli(我要冰糖)等

級:

原創文章,作者:MML3K,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128023.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MML3K的頭像MML3K
上一篇 2024-10-03 23:24
下一篇 2024-10-03 23:24

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論