一種特殊指令的執(zhí)行方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種特殊指令的執(zhí)行方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的迅速發(fā)展,數(shù)據(jù)庫的中間件技術(shù)在面向網(wǎng)絡(luò)的分布式數(shù)據(jù)庫系統(tǒng)中得到了廣泛的應(yīng)用。
[0003]中間件可以是位于客戶端與數(shù)據(jù)庫之間的中轉(zhuǎn)設(shè)備,并可以連接兩者,中間件提供了數(shù)據(jù)庫連接池的功能。當(dāng)客戶端通過中間件向數(shù)據(jù)庫發(fā)送指令時(shí),中間件從數(shù)據(jù)庫連接池中選擇一個(gè)空閑的連接分配給該客戶端,中間件通過該連接為客戶端向數(shù)據(jù)庫發(fā)送指令,并向客戶端發(fā)送數(shù)據(jù)庫返回的該指令的執(zhí)行結(jié)果,然后,中間件將該連接回收,當(dāng)該客戶端后續(xù)再向數(shù)據(jù)庫發(fā)送指令時(shí),則中間件可能會(huì)分配另一個(gè)空閑的連接給該客戶端使用。
[0004]在現(xiàn)有技術(shù)中,對(duì)于一些特殊指令而言,當(dāng)數(shù)據(jù)庫執(zhí)行該特殊指令后,則會(huì)針對(duì)發(fā)送該特殊指令所使用的連接,識(shí)別后續(xù)從該連接發(fā)送來的該特殊指令的匹配指令,并執(zhí)行。但是,在使用數(shù)據(jù)庫連接池的情況下,中間件通過某個(gè)連接為客戶端發(fā)送該特殊指令,而后續(xù)可能會(huì)通過另一個(gè)連接為客戶端發(fā)送該特殊指令的匹配指令,從而導(dǎo)致數(shù)據(jù)庫無法正確識(shí)別該匹配指令,因此,數(shù)據(jù)庫也無法正確執(zhí)行該匹配指令,其中所述的指令是結(jié)構(gòu)化查詢語言(Structured Query Language, SQL)語句形式的指令。
[0005]例如,特殊指令可以是PREPARE語句,則該P(yáng)REPARE語句的匹配指令包括:攜帶該P(yáng)REPARE語句所包含的特殊標(biāo)識(shí)(PREPARE語句所包含的特殊標(biāo)識(shí),也即,PREPARE語句所包含的模板語句的聲明名稱)的EXE⑶TE語句或DEALLOCATE語句。假定中間件通過連接I發(fā)送PREPARE語句,后續(xù)又通過連接2發(fā)送對(duì)應(yīng)的EXE⑶TE語句,則數(shù)據(jù)庫無法正確執(zhí)行該EXECUTE 語句。
[0006]又例如,特殊指令可以是數(shù)據(jù)庫事務(wù)中的BEGIN語句,則該BEGIN語句的匹配指令包括:與該BEGIN語句在同一個(gè)數(shù)據(jù)庫事務(wù)中的其它的SQL語句,如COMMIT語句、ROLLBACK語句等。假定中間件通過連接I發(fā)送BEGIN語句,后續(xù)又通過連接2發(fā)送對(duì)應(yīng)的COMMIT語句,則數(shù)據(jù)庫無法正確執(zhí)行該COMMIT語句。
【發(fā)明內(nèi)容】
[0007]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的特殊語句的執(zhí)行方法及裝置,在使用中間件的情況下,數(shù)據(jù)庫能夠正確執(zhí)行特殊指令的匹配指令。
[0008]根據(jù)本發(fā)明的第一個(gè)方面,提出一種特殊指令的執(zhí)行方法,應(yīng)用于耦接在數(shù)據(jù)庫與客戶端之間的中間件,所述方法包括:
[0009]發(fā)送特殊指令,并記錄與所述特殊指令對(duì)應(yīng)的相關(guān)信息,其中,所述相關(guān)信息包括:發(fā)送所述特殊指令所使用連接的標(biāo)識(shí),和/或所述特殊指令包含的模板指令;
[0010]接收所述特殊指令的匹配指令;
[0011]根據(jù)記錄的所述相關(guān)信息,采用預(yù)設(shè)的與所述相關(guān)信息對(duì)應(yīng)的發(fā)送方式,將所述匹配指令發(fā)送給數(shù)據(jù)庫執(zhí)行。
[0012]可選地,當(dāng)所述相關(guān)信息為發(fā)送所述特殊指令所使用連接的標(biāo)識(shí)時(shí),采用預(yù)設(shè)的與所述相關(guān)信息對(duì)應(yīng)的發(fā)送方式,將所述匹配指令發(fā)送給數(shù)據(jù)庫執(zhí)行,具體包括:
[0013]將所述匹配指令通過與發(fā)送所述特殊指令所使用連接的標(biāo)識(shí)對(duì)應(yīng)的連接發(fā)送給數(shù)據(jù)庫執(zhí)行。
[0014]可選地,發(fā)送特殊指令之后,所述方法還包括:
[0015]為所述數(shù)據(jù)庫和所述客戶端保持發(fā)送所述特殊指令所使用的連接。
[0016]可選地,當(dāng)所述相關(guān)信息為所述特殊指令包含的模板指令時(shí),采用預(yù)設(shè)的與所述相關(guān)信息對(duì)應(yīng)的發(fā)送方式,將所述匹配指令發(fā)送給數(shù)據(jù)庫執(zhí)行,具體包括:
[0017]根據(jù)所述模板指令,以及所述匹配指令生成一般指令;
[0018]將生成的一般指令發(fā)送給數(shù)據(jù)庫執(zhí)行。
[0019]可選地,根據(jù)所述模板指令以及所述匹配指令生成一般指令,具體包括:
[0020]判斷所述模板指令中是否包含待定參數(shù);
[0021]若是,則根據(jù)所述匹配指令中包含的參數(shù)值為所述待定參數(shù)賦值,將賦值后的模板指令作為生成的一般指令;
[0022]否則,將所述模板指令作為生成的一般指令。
[0023]可選地,所述指令包括:結(jié)構(gòu)化查詢語言SQL語句形式的指令;
[0024]當(dāng)所述相關(guān)信息為發(fā)送所述特殊指令所使用連接的標(biāo)識(shí)時(shí),所述特殊指令包括BEGIN語句或PREPARE語句,當(dāng)所述特殊指令為BEGIN語句時(shí),所述匹配指令為與所述BEGIN語句屬于同一個(gè)數(shù)據(jù)庫事務(wù)的語句,當(dāng)所述特殊指令為PREPARE語句時(shí),所述匹配指令為EXECUTE語句或DEALLOCATE語句;
[0025]當(dāng)所述相關(guān)信息為所述特殊指令包含的模板指令時(shí),所述特殊指令包括PREPARE語句,所述匹配指令包括EXE⑶TE語句。
[0026]根據(jù)本發(fā)明的第二個(gè)方面,提出一種特殊指令的執(zhí)行裝置,耦接于數(shù)據(jù)庫與客戶端之間,包括:
[0027]第一發(fā)送模塊,用于發(fā)送特殊指令,并記錄與所述特殊指令對(duì)應(yīng)的相關(guān)信息,其中,所述相關(guān)信息包括:發(fā)送所述特殊指令所使用連接的標(biāo)識(shí),和/或所述特殊指令包含的豐吳板指令;
[0028]接收模塊,用于接收所述特殊指令的匹配指令;
[0029]第二發(fā)送模塊,用于根據(jù)所述第一發(fā)送模塊記錄的所述相關(guān)信息,采用預(yù)設(shè)的與所述相關(guān)信息對(duì)應(yīng)的發(fā)送方式,將所述匹配指令發(fā)送給數(shù)據(jù)庫執(zhí)行。
[0030]當(dāng)所述相關(guān)信息為發(fā)送所述特殊指令所使用連接的標(biāo)識(shí)時(shí),所述第二發(fā)送模塊具體用于,將所述匹配指令通過與發(fā)送所述特殊指令所使用連接的標(biāo)識(shí)對(duì)應(yīng)的連接發(fā)送給數(shù)據(jù)庫執(zhí)行。
[0031]可選地,所述裝置還包括:
[0032]保持模塊,用于在所述第一發(fā)送模塊發(fā)送特殊指令之后,為所述數(shù)據(jù)庫和所述客戶端保持所述第一發(fā)送模塊發(fā)送所述特殊指令所使用的連接。
[0033]當(dāng)所述相關(guān)信息為所述特殊指令包含的模板指令時(shí),所述第二發(fā)送模塊具體用于,根據(jù)所述模板指令,以及所述匹配指令生成一般指令,將生成的一般指令發(fā)送給數(shù)據(jù)庫執(zhí)行。
[0034]所述第二發(fā)送模塊具體用于,判斷所述模板指令中是否包含待定參數(shù),若是,則根據(jù)所述匹配指令中包含的參數(shù)值為所述待定參數(shù)賦值,將賦值后的模板指令作為生成的一般指令,否則,將所述模板指令作為生成的一般指令。
[0035]可選地,所述指令包括:結(jié)構(gòu)化查詢語言SQL語句形式的指令;
[0036]當(dāng)所述相關(guān)信息為發(fā)送所述特殊指令所使用連接的標(biāo)識(shí)時(shí),所述特殊指令包括BEGIN語句或PREPARE語句,當(dāng)所述特殊指令為BEGIN語句時(shí),所述匹配指令為與所述BEGIN語句屬于同一個(gè)數(shù)據(jù)庫事務(wù)的語句,當(dāng)所述特殊指令為PREPARE語句時(shí),所述匹配指令為EXECUTE語句或DEALLOCATE語句;
[0037]當(dāng)所述相關(guān)信息為所述特殊指令包含的模板指令時(shí),所述特殊指令包括PREPARE語句,所述匹配指令包括EXE⑶TE語句。
[0038]根據(jù)本發(fā)明提供的特殊指令的執(zhí)行方法,中間件發(fā)送特殊指令,并記錄與該特殊指令對(duì)應(yīng)的相關(guān)信息,當(dāng)接收到該特殊指令的匹配指令時(shí),采用預(yù)設(shè)的與該相關(guān)信息對(duì)應(yīng)的發(fā)送方式,將該匹配指令發(fā)送給數(shù)據(jù)庫執(zhí)行,由于數(shù)據(jù)庫可以正確識(shí)別采用預(yù)設(shè)的與該相關(guān)信息對(duì)應(yīng)的發(fā)送方式發(fā)送的該匹配指令,因此,數(shù)據(jù)庫也可以正確執(zhí)行該匹配指令,解決了數(shù)據(jù)庫無法正確執(zhí)行該匹配指令的問題。
【附圖說明】
[0039]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0040]圖1為依據(jù)本發(fā)明實(shí)施例的特殊指令的執(zhí)行方法的流程示意圖;
[0041]圖2為依據(jù)本發(fā)明實(shí)施例,在實(shí)際應(yīng)用場(chǎng)景下,數(shù)據(jù)庫、中間件、客戶端之間的連接架構(gòu)的示意圖;
[0042]圖3為依據(jù)本發(fā)明實(shí)施例,在實(shí)際應(yīng)用場(chǎng)景下,客戶端通過向中間件向數(shù)據(jù)庫發(fā)送的特殊指令,以及該特殊指令的匹配指令的執(zhí)行過程的示意圖;
[0043]圖4為依據(jù)本發(fā)明實(shí)施例,在實(shí)際應(yīng)用場(chǎng)景下,客戶端發(fā)送特殊指令之前,數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)表Student的結(jié)構(gòu)的示意圖;
[0044]圖5為依據(jù)本發(fā)明實(shí)施例,在實(shí)際應(yīng)用場(chǎng)景下,數(shù)據(jù)庫執(zhí)行SQL語句S4后查詢到的對(duì)應(yīng)數(shù)據(jù)的示意圖;
[0045]圖6為依據(jù)本發(fā)明實(shí)