1、用CAPI連接MySQL數(shù)據(jù)庫有兩個(gè)步驟:
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括南縣網(wǎng)站建設(shè)、南縣網(wǎng)站制作、南縣網(wǎng)頁制作以及南縣網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,南縣網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到南縣省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1)初始化一個(gè)連接句柄
2)建立連接
所用到的函數(shù)如下:
MYSQL *mysql_init(MYSQL *connection); // 初始化連接句柄
//成功返回MySQL結(jié)構(gòu)指針,失敗返回NULL
MYSQL *mysql_real_connect(MYSQL *connection,
const char *server_host,
const char *sql_user_name,
const char *sql_password,
const char *db_name,
unsigned int port_number,
const char *unix_socket_name,
unsigned int flags); //建立連接
//成功返回MySQL結(jié)構(gòu)指針,失敗返回NULL
以下是完整實(shí)例:
#include iostream
#include fstream
#include cstdlib
#include mysql/mysql.h
using namespace std;
void mysql_err_function(MYSQL * connection);
int main()
{
//freopen("input.txt","r",stdin);
MYSQL * connection;
connection = mysql_init(NULL);
if (!connection)
{
cout "mysql_init failed!" endl;
exit(-1);
}
if (!mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))
{
cout "Connection To MySQL failed!" endl;
mysql_err_function(connection);
}
cout "Connection To MySQL Server is Success..." endl;
string str;
getline(cin,str);
int res = 0;
int affected_count = 0;
while (str != "close" str != "" !res)
{
res = mysql_query(connection,str.c_str());
affected_count += mysql_affected_rows(connection);
if (res)
{
if (mysql_errno(connection))
{
cout "Error " mysql_errno(connection) " : "
mysql_error(connection) '\n' endl;
break;
}
}
getline(cin,str);
}
cout "Have affected " affected_count " rows!" endl;
mysql_close(connection);
cout "Connection To MySQL Server is closed..." endl;
return 0;
}
void mysql_err_function(MYSQL * connection)
{
if (mysql_errno(connection))
{
cout "Error " mysql_errno(connection) " : "
mysql_error(connection) endl;
exit(-1);
}
}
調(diào)用如:select 函數(shù)名(參數(shù)列表)。
mysql中的UDF(自定義函數(shù)),可以寫好一些方法或?函數(shù),然后進(jìn)行調(diào)用,而且是在SQL語句中可以進(jìn)行調(diào)用。?
DROP FUNCTION CalculateAmount?
CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2)?
BEGIN?
DECLARE totalCredits FLOAT;?
SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid;?
RETURN totalAmount;?
END?
要注意的是,在UDF中,不要定義與數(shù)據(jù)表中重名的列。而在SQL中,?則可以像SELECT CalculateAmount(1);那樣去調(diào)用了。
1、啟動(dòng)MySQL服務(wù)器
實(shí)際上上篇已講到如何啟動(dòng)MySQL。兩種方法:
一是用winmysqladmin,如果機(jī)器啟動(dòng)時(shí)已自動(dòng)運(yùn)行,則可直接進(jìn)入下一步操作。
二是在DOS方式下運(yùn)行
d:/mysql/bin/mysqld
2、進(jìn)入mysql交互操作界面
在DOS方式下,運(yùn)行:
d:/mysql/bin/mysql -u root -p
出現(xiàn)提示符,此時(shí)已進(jìn)入mysql的交互操作方式。
如果出現(xiàn) "ERROR 2003: Can‘t connect to MySQL server on ‘localhost‘ (10061)“,說明你的MySQL還沒有啟動(dòng)。
3、退出MySQL操作界面
在mysql提示符下輸入quit可以隨時(shí)退出交互操作界面:
mysql quit
Bye
你也可以用control-D退出。
前幾天看到姜老師的舊文 用 VSCode 編譯和調(diào)試 MySQL,每個(gè) DBA 都應(yīng) get 的小技能[1] , 文末留了一個(gè)思考題,如何修改源碼,自定義版本,使得 select version() 輸出自定義內(nèi)容
調(diào)試過程參考 macOS VSCode 編譯調(diào)試 MySQL 5.7[2]
內(nèi)部 Item 對(duì)象參考 從SQL語句到MySQL內(nèi)部對(duì)象[3]
源碼面前沒有秘密,建義對(duì) DB 感興趣的嘗試 debug 調(diào)試。本文環(huán)境為 mac + vscode + lldb
vscode 插件:
mysql 源碼:
補(bǔ)?。? MySQL = 8.0.21 需要對(duì) cmake/mysql_version.cmake 文件打補(bǔ)丁 (沒有嚴(yán)格測(cè)試所有版本)
創(chuàng)建 cmake-build-debug 目錄,后續(xù) mysql 編譯結(jié)果,以及啟動(dòng)后生成的文件都在這里
在 mysql 工程目錄下面創(chuàng)建 .vscode/settings.json 文件
內(nèi)容沒啥好說的,都是指定目錄及 boost 配置,其中 WITH_DEBUG 打開 debug 模式,會(huì)在 /tmp/debug.trace 生成 debug 信息
View - Command Palette - CMake: Configure 執(zhí)行后生成 cmake 配置
View - Command Palette - CMake: Build 編譯生成最終 mysql 相關(guān)命令
發(fā)現(xiàn)老版本編譯很麻煩,各種報(bào)錯(cuò),mysql 5.7 代碼量遠(yuǎn)超過 5.5, 只能硬著頭皮看 5.7
首先初始化 my.cnf 配置,簡(jiǎn)單的就可以,共它均默認(rèn)
初始化數(shù)據(jù)文件,非安全模式,調(diào)試用
由于用 vscode 接管 mysql, 所以需要配置 .vscode/launch.json
然后點(diǎn)擊 run and debug mysqld
mysql 啟動(dòng),看到輸出日志無異常,此時(shí)可以用 mysql-client 連接
首先在 sql_parser.cc:5435 處打斷點(diǎn)
mysql_parse 是 sql 處理的入口,至于 tcp connection 連接先可以忽略
執(zhí)行上述 sql 自動(dòng)跳轉(zhuǎn)到斷點(diǎn)處, Step Into , Step Over , Step Out 這些調(diào)試熟悉下即可
接下來分別調(diào)用主要函數(shù): mysql_execute_command , execute_sqlcom_select , handle_query , select-join-exec() , Query_result_send::send_data , Item::send , Item_string:val_str , Protocol_text::store , net_send_ok
啟動(dòng) mysql 時(shí) init_common_variables 會(huì)初始化一堆變量,其中會(huì)調(diào)用 set_server_version 生成版本信息,修改這個(gè)就可以
看好條件編譯的是哪塊,修改即可, 重新 CMake: Build 編譯再運(yùn)行
這里不做過深分析,簡(jiǎn)單講
sql_yacc.cc 函數(shù) PTI_function_call_generic_ident_sys 解析 sql, 識(shí)別出 version() 是一個(gè)函數(shù)調(diào)用
find_native_function_builder 查找 hash 表,找到對(duì)應(yīng) version 函數(shù)注冊(cè)的單例工廠函數(shù)
mysql 啟動(dòng)時(shí)調(diào)用 item_create_init 將這些函數(shù) builder 注冊(cè)到 hash 表 native_functions_hash
MySQL 代碼太龐大,5.1 大約 100w 行,5.5 130w 行,5.7 以后 330w 行,只能挑重點(diǎn)讀源碼。最近很多群里的人在背八股,沒必要,有那時(shí)間學(xué)著調(diào)試下源碼,讀讀多好
原文出處:
準(zhǔn)備工作:
安裝一個(gè)編譯器,推薦Microsoft visual studio 2008吧
另外需要裝:
GNU Bison for Windows :
CMake 2.6.0 or later :
開始編譯:
這里以mysql-5.1.38的源碼編譯為例:
mysql-5.1.38的代碼下載可以到mysql官方網(wǎng)站下載,具體怎么下載不在說明。
打開一個(gè)cmd窗口:
輸入:
cscript //H:CScript
然后:
cd /path/mysql-5.1.38
win\configure WITH_INNOBASE_STORAGE_ENGINE __NT__
win\build-vs9.bat
到此我們將會(huì)創(chuàng)建一個(gè)mysql.sln 的工程文件,如果對(duì)想學(xué)習(xí)代碼的朋友,到此即可以,然后可以用Microsoft visual studio 2008打開這個(gè)文件就可以查看相應(yīng)的代碼了。
如果需要調(diào)試或單步執(zhí)行調(diào)試:
這里以mysqld項(xiàng)目為例:
打開項(xiàng)目 mysqld 的屬性 點(diǎn)擊 debugging
在mysqld的屬性頁設(shè)置命令參數(shù)(Command Arguments)為:–console。這樣就可以用debug方式調(diào)試代碼了。
同樣對(duì)于其它項(xiàng)目的調(diào)試,也是這樣處理,屬性,添加命令行參數(shù):–console。
對(duì)于想跟蹤的項(xiàng)目可以執(zhí)行build,然后可以在mysql-5.1.38/client/Debug下生成相應(yīng)的執(zhí)行文件。
應(yīng)該是用jdbc去連接吧!寫個(gè)dao;然后去連接數(shù)據(jù)庫\x0d\x0a代碼如下:\x0d\x0apublic Connection getConnection() {\x0d\x0a try {\x0d\x0a Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");\x0d\x0a \x0d\x0a return DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=test","sa","");\x0d\x0a } catch (ClassNotFoundException e) {\x0d\x0a \x0d\x0a throw new DaoException("加載驅(qū)動(dòng)程序失敗",e); \x0d\x0a } catch (SQLException e) {\x0d\x0a throw new DaoException("數(shù)據(jù)庫連接失敗",e); \x0d\x0a }\x0d\x0a \x0d\x0a }\x0d\x0a\x0d\x0apublic void close(ResultSet rs, Statement stmt, Connection conn) {\x0d\x0a if(rs != null){\x0d\x0a try {\x0d\x0a rs.close();\x0d\x0a } catch (SQLException e) {\x0d\x0a e.printStackTrace();\x0d\x0a }\x0d\x0a }\x0d\x0a if(stmt != null){\x0d\x0a try {\x0d\x0a stmt.close();\x0d\x0a } catch (SQLException e) {\x0d\x0a e.printStackTrace();\x0d\x0a }\x0d\x0a }\x0d\x0a \x0d\x0a if(conn != null){\x0d\x0a try {\x0d\x0a conn.close();\x0d\x0a } catch (SQLException e) {\x0d\x0a e.printStackTrace();\x0d\x0a }\x0d\x0a }\x0d\x0a\x0d\x0a }\x0d\x0a\x0d\x0a連接了數(shù)據(jù)庫,就能寫操作類了。
文章名稱:mysql代碼怎么調(diào) 如何設(shè)置mysql
轉(zhuǎn)載注明:http://muchs.cn/article36/hhecpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、商城網(wǎng)站、企業(yè)網(wǎng)站制作、Google、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)