1. 程式人生 > >Mysql 一次性執行多條語句的實現

Mysql 一次性執行多條語句的實現

1.mysql資料庫預設情況下,mysql_query()是一次只執行一條語句。

#include "stdafx.h"
#include <mysql.h>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    MYSQL mysql;
    mysql_init(&mysql);

    MYSQL* pConn = mysql_real_connect(&mysql,"127.0.0.1","root","root","test",3306
,NULL,0); if(pConn == NULL){ printf("connect db error!\n"); int n = mysql_errno(&mysql); string strError = mysql_error(&mysql); printf("error id: %d ,%s",n,strError.c_str()); return 1; } string s = ""; string sql = ""; s = "insert into t1 values(2,'ya');"
; //執行多條語句 /*for(int i = 0; i < 10;i++){ sql+=s; }*/ //執行一條語句 sql = s; int err = mysql_query(&mysql,sql.c_str()); if(err!=0){ printf("execute sql failed.\n"); } mysql_close(&mysql); mysql_library_end(); getchar(); return 0; }

預設情況下一次執行一條語句的結果輸出如下:
這裡寫圖片描述

一次執行多條語句的結果輸出如下:
這裡寫圖片描述

2.為了實現mysql_query一次可以執行多條語句:
有兩個方法:
a)在建立資料庫連線時指定

//a)連線時指定
MYSQL* pConn = mysql_real_connect(&mysql,"127.0.0.1","root","root","test",3306,NULL,CLIENT_MULTI_STATEMENTS);

b)要執行多條語句之前指定

MYSQL* pConn = mysql_real_connect(&mysql,"127.0.0.1","root","root","test",3306,NULL,0);
......
//連線時關閉,執行多條語句之前指定
    mysql_set_server_option(&mysql,MYSQL_OPTION_MULTI_STATEMENTS_ON);
    int err = mysql_query(&mysql,sql.c_str());
    mysql_set_server_option(&mysql,MYSQL_OPTION_MULTI_STATEMENTS_ON);

3.完整程式碼:

#include "stdafx.h"
#include <mysql.h>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    MYSQL mysql;
    mysql_init(&mysql);

    MYSQL* pConn = mysql_real_connect(&mysql,"127.0.0.1","root","root","test",3306,NULL,0);
    //a)連線時指定
    //MYSQL* pConn = mysql_real_connect(&mysql,"127.0.0.1","root","root","test",3306,NULL,CLIENT_MULTI_STATEMENTS);

    if(pConn == NULL){
        printf("connect db error!\n");
        int n = mysql_errno(&mysql);
        string strError = mysql_error(&mysql);

        printf("error id: %d ,%s",n,strError.c_str());

        return 1;
    }

    string s = "";
    string sql = "";

    s = "insert into t1 values(2,'ya');";

    //執行多條語句
    for(int i = 0; i < 10;i++){
        sql+=s; 
    }
    //執行一條語句
    //sql = s;

    //連線時關閉,執行多條語句之前指定
    mysql_set_server_option(&mysql,MYSQL_OPTION_MULTI_STATEMENTS_ON);
    int err = mysql_query(&mysql,sql.c_str());
    mysql_set_server_option(&mysql,MYSQL_OPTION_MULTI_STATEMENTS_ON);
    if(err!=0){
        printf("execute sql failed.\n");
    }else{
        printf("execute sql successed.\n");
    }

    mysql_close(&mysql);
    mysql_library_end();

    getchar();

    return 0;
}

相關推薦

Mysql 一次性執行語句實現

1.mysql資料庫預設情況下,mysql_query()是一次只執行一條語句。 #include "stdafx.h" #include <mysql.h> #include <string> using namespace std

MySQL同時執行SQL語句的解決辦法

最近做一個MySQL方面的東西發現了這個問題,就是在一個Statement中執行一條SQL語句的時候可以正確執行,如果同時執行多條,就會報SQL語法錯誤,傷透了腦筋。 經過網上查詢,發現有兩種解決辦法: 1、最簡單的辦法:在MySQL的連線字串中設定allowMultiQueries引數置為true。(只

mybatis 允許一次性執行sql語句

新增allowMultiQueries=true jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf8&allowMultiQ

Mysql 動態執行update語句,帶事務的

create procedure  P_CallSql_Tran(IN vi_sql text,in vi_splitchar varchar(20),OUT vo_code VARCHAR(20),out vo_msg text)BEGINDECLARE v_sqltemp

mySQL儲存過程怎樣執行語句?

create procedure getResult( in name varchar(30), in classNames varchar(30) ) begin select userName from lxlog where userName=name; select

MyBatis 同時執行語句【簡單扼要】

目的:MyBatis 同時執行多條語句 第一步:開啟一個約束   allowMultiQueries=true url: jdbc:mysql://127.0.0.1:3306/tourism?useSSL=false&allowMultiQueries=tr

MySQL 如何利用一語句實現類似於if-else條件語句的判斷

一、 編寫一條update語句實現商品漲價,具體規則如下 1、99元以內,提價20% 2、100-999元之間,提價10% 3、1000-1999之間,提價5% 4、其他提價2% update goo

在oracle中一次執行語句

工作中需要一次執行多條語句,本來想直接使用sql拼接成一個字串進行批處理,原sql如下: String sql = ""; for(int i=0; i<deviceInfo.getDevice_ip().length; i++){

執行sql語句update記錄實現思路

如果你想更新多行資料,並且每行記錄的各欄位值都是各不一樣,你會怎麼辦呢?本文以一個示例向大家講解下如何實現如標題所示的情況,有此需求的朋友可以瞭解下       通常情況下,我們會使用以下SQL語句來更新欄位值: 複製程式碼 程式碼如下: UP

Mybatis+MySql 一個標籤中執行sql語句

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/cxfly957/article/details/77896590 MySql預設是不支援這種騷操作的,但是並不代表不能實現,只需要在jdbc的配置檔案中

mysql+mybatis 在mybatis一個標籤中,執行sql語句

然後在mybatis對映檔案中的標籤中,一般不能執行多條sql,如下: <insert id="addUser" parameterType="User" > insert into t_users (name,password,phone) values (#{na

執行SQL語句實現資料庫事務(不可傳入Sql引數)

          《圖書館維護系統》的時候我負責任務管理模組,由於一些業務有些複雜,所以想用儲存過程,但是賈琳師哥說了一堆儲存過程的不好,讓我用sql語句。好吧,用就用吧,但是吧,大家都知道執行多條sql語句,是需要用到事務的(保持資料一致性),儲存過程中加事務我還是會滴

mysql基礎-- 一請求執行SQL語句

最近做一個資料庫初始化工具的時候發現了這個問題,就是在一個Statement中執行一條SQL語句的時候可以正確執行,如果同時執行多條,就會報SQL語法錯誤,傷透了腦筋。 經過網上查詢,發現有兩種解決辦法: 1、最簡單的辦法,在MySQL的連線字串中設定allowMulti

使用jmeter執行sql語句

多個 true targe csdn allow 知識 word sta lib 註意2個地方 1、 【JDBC Connection Configuration】 在配置DataBase URL的時候,加上allowMultiQueries=true參數如: jdbc:

[轉]51、430、stm32周期和執行語句需要長時間的問題

執行 動作 設置 時間 狀態 一個 語句 沒有 基本 機器周期:在計算機中,常把一條指令的執行過程劃分為若幹個階段,每一個階段完成一項工作。每一項工作稱為一個基本操作,完成一個基本操作所需要的時間稱為機器周期。8051系列單片機的一個機器周期由6個S周期(狀態周期)組成。一

C#(.net)中的一次連線資料庫執行sql語句(兩種方法)

第一種方法: string str="server=.;uid=sa;pwd=111111;database=text_db";//連線字串 SqlConnection SCON = null;//連線物件 SqlCommand SCom=new SqlCommand();/

如何在mybatis中一個insert,delete,update中執行SQL語句

一般我們會在applicationContect中這麼配置: <!-- 1. 資料來源 : DriverManagerDataSource --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSo

在Oracle中一次執行sql語句,結束符很重要

有時我們需要一次性執行多條sql語句,而用來更新的sql是根據實際情況用程式碼拼出來的解決方案是把sql拼成下面這種形式:begin update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' w

Jmeter JDBC request執行sql語句

1. 【JDBC Connection Configuration】 在配置DataBase URL的時候,加上allowMultiQueries=true 2. JDBC Request中,sql語句:

同時執行sql語句

如果需要在一個檔案中,執行多條sql語句,且要保證效率,看下面 con.setAutoCommit(false);//不能讓他自動提交,否則會影響效率 String sql1="insert into test1 values('test03')"; String sql