c/c++呼び出しmysqlストレージプロシージャ
原文:c/c++call mysql stored procedure
E文の良いのは原文を見て下さい、菜鳥級の翻訳、批判の指摘を歓迎します!
mysql5.0ストレージ・プロシージャをサポートしたらmysql 6になります.0 Alphaバージョンも使用可能です.6.0は、oracleなどの大規模なデータベースやストレージ・プロシージャ、ビュー、トリガ、ジョブなどの多くの機能をサポートし、これらの機能に存在するバグを修正するだけでなく、6.0.1版ではwindows 64ビットと表領域もサポートしています.
C/c++はmysqlにアクセスするには、簡単な一般的な操作にすぎません.c埋め込み式の簡単なクエリー、挿入、更新、その他の操作の使用は可能です.これらの文は、ビジネスが複雑で完全なビジネス機能に必要なsql操作として、cコードcコードを埋め込むことで、今回の自然なストレージプロセスをより多く、より複雑にすることができ、すべてのデータベースの論理思想をカプセル化し、mysqlストレージのプロセスcインタフェースを簡単に呼び出すことで、ワークロードを大幅に削減するcプログラマーを実現することができます.しかし、フロントエンドのビジネスロジックとデータベースの処理ロジックの分離も容易に処理できます.ここでは、格納されたプロシージャc言語のみを呼び出す簡単な方法である.
1.まず、ユーザー情報を格納するテーブルを作成する
2、ユーザー情報をいくつか挿入する
3、挿入したユーザー情報を表示する
4、ストレージプロセスの作成
5、C言語でストレージプロセスを呼び出す方法手順:
5.1、Mysqlのハンドル初期化
5.2、MySQLデータベースへの接続
5.3、ストレージプロセスの呼び出し
5.4、クエリ戻り値及び出力パラメータ値
5.5、結果値の取得
標準
の
きおく
プロセス
将
のみ
戻る
結果
,^_^.
5.6、リソースの解放とmysql接続ハンドル
6、結論
Mysqlのストレージプロセスはかなり強力な機能を実現することができます.ここでは基本的な使い方にすぎません.助けてほしいです.分かち合いも歓迎・・・
7、個人使用経験心得
C#呼び出しのように出力パラメータをバインドし、出力パラメータから直接値を得ることができますが、c++でprepareを使用して出力パラメータをバインドすると、次のエラーメッセージが返されます.
Error Code: 1414. OUT or INOUT argument 2 for routine knockout_dbo.ko_SignUpYoungBoxer is not a variable or NEW pseudo-variable in BEFORE trigger
次のリンクは、問題に関するディスカッションです.
http://forums.mysql.com/read.php?38,505961
http://bugs.mysql.com/bug.php?id=25970
以下はc++のMySQLパッケージです
http://tangentsoft.net/mysql++/
E文の良いのは原文を見て下さい、菜鳥級の翻訳、批判の指摘を歓迎します!
mysql5.0ストレージ・プロシージャをサポートしたらmysql 6になります.0 Alphaバージョンも使用可能です.6.0は、oracleなどの大規模なデータベースやストレージ・プロシージャ、ビュー、トリガ、ジョブなどの多くの機能をサポートし、これらの機能に存在するバグを修正するだけでなく、6.0.1版ではwindows 64ビットと表領域もサポートしています.
C/c++はmysqlにアクセスするには、簡単な一般的な操作にすぎません.c埋め込み式の簡単なクエリー、挿入、更新、その他の操作の使用は可能です.これらの文は、ビジネスが複雑で完全なビジネス機能に必要なsql操作として、cコードcコードを埋め込むことで、今回の自然なストレージプロセスをより多く、より複雑にすることができ、すべてのデータベースの論理思想をカプセル化し、mysqlストレージのプロセスcインタフェースを簡単に呼び出すことで、ワークロードを大幅に削減するcプログラマーを実現することができます.しかし、フロントエンドのビジネスロジックとデータベースの処理ロジックの分離も容易に処理できます.ここでは、格納されたプロシージャc言語のみを呼び出す簡単な方法である.
1.まず、ユーザー情報を格納するテーブルを作成する
Create table student(
id int auto_increment,
name varchar(20),
age tinyint,
remark varchar(50),
primary key(id)
);
2、ユーザー情報をいくつか挿入する
Insert into student values(1,"zhouys",90, "");
commit;
3、挿入したユーザー情報を表示する
mysql> select * from student;
+------+-----------+------+----------+
| id | name | age | remark |
+------+-----------+------+----------+
| 1 | zhouys | 90 | |
+------+-----------+------+-----------+
1 row in set (0.00 sec)
mysql>
4、ストレージプロセスの作成
delimiter //
create procedure querystudent(
in in_id int , #0- Character ID 1-digital id
#
out out_ret int, # Returns the result
out out_name varchar(20), # First name
out out_age int # Age
)
label_a:begin
declare v_name varchar(20) ;
declare v_age tinyint ;
# Parameters determine
if (in_id<=0) then
set out_ret=-1; #id error
leave label_a;
end if;
SELECT name,age into v_name,v_age from student where't found
leave label_a;
end if;
set out_ret=0;
set out_name=v_name;
set out_age=v_age;
end;
//
delimiter ;
5、C言語でストレージプロセスを呼び出す方法手順:
5.1、Mysqlのハンドル初期化
if(!mysql_init(&mysql))
{
printf("mysql_init failed!
");
return 0;
}
5.2、MySQLデータベースへの接続
//login or connect
if(!mysql_real_connect(&mysql,"localhost","root","","billingdb",0,NULL,CLIENT_MULTI_STATEMENTS))
{
printf("mysql_real_connect() failed!
");
mysql_close(&mysql);
return 0;
}
5.3、ストレージプロセスの呼び出し
//call
strcpy(query,"call querystudent (1,@ret,@ out_name,@ out_age)");
printf("query sql=[%s]
",query);
ret= mysql_real_query(&mysql,query,(unsigned int)strlen(query));
5.4、クエリ戻り値及び出力パラメータ値
mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age ");
//get result
if (ret)
{
printf("Error exec query: %s
",mysql_error(&mysql));
}
else
{
printf("[%s] exec...
", query);
}
results = mysql_store_result(&mysql);
5.5、結果値の取得
while((record = mysql_fetch_row(results))) {
printf("[%s]-[%s]-[%s]
", record[0], record[1],record[2]);
}
標準
の
きおく
プロセス
将
のみ
戻る
結果
,^_^.
5.6、リソースの解放とmysql接続ハンドル
mysql_free_result(results);
mysql_close(&mysql);
6、結論
Mysqlのストレージプロセスはかなり強力な機能を実現することができます.ここでは基本的な使い方にすぎません.助けてほしいです.分かち合いも歓迎・・・
7、個人使用経験心得
C#呼び出しのように出力パラメータをバインドし、出力パラメータから直接値を得ることができますが、c++でprepareを使用して出力パラメータをバインドすると、次のエラーメッセージが返されます.
Error Code: 1414. OUT or INOUT argument 2 for routine knockout_dbo.ko_SignUpYoungBoxer is not a variable or NEW pseudo-variable in BEFORE trigger
次のリンクは、問題に関するディスカッションです.
http://forums.mysql.com/read.php?38,505961
http://bugs.mysql.com/bug.php?id=25970
以下はc++のMySQLパッケージです
http://tangentsoft.net/mysql++/