c连接mysql
ODBC连接MySQL数据库
使用ODBC管理MySql数据库1、测试环境简介首先,测试环境中MySql数据库是安装在服务器上的,IP地址为192.168.100.1服务器操作系统为Windows Server 2008,所安装的数据库版本为5.5.0-m2-win32,安装的过程中数据库管理员帐号采用的是默认的root,密码是123456,安装成功后在服务器上配置了名称为OA的数据库。
我们的目标是在IP地址为192.168.100.111的内网客户端上实现对上述服务器上的MySql数据库的访问控制。
2、在服务器上添加管理账户默认情况先在服务器上安装MySql数据库的过程中所设置的管理账户是不能实现远程访问的,此时需要首先在服务器上添加针对客户端IP地址的管理账户,这里我所使用的管理软件是Navicat for MySql,在服务器上登录这个软件之后的显示效果如下:图1 Navicat for MySql点击上图中的“管理账户”,出现如下所示界面:图2 账户管理通过上图的添加账户添加针对192.168.100.111的客户端的管理账户,添加之后选择该账户对数据库的操作权限,简单的可以全部选择,如下所示:图3 设置账户的操作权限至此在客户端所使用的账户信息设置完成。
3、客户端安装针对MySql数据库管理的组件在客户端机器192.168.100.111上安装针对MySql数据库操作的ODBC组件mysql-connector-odbc-3.51.30-win32.msi。
4、设置ODBC数据源4.1 打开数据源管理在客户端电脑上通过“开始”->“控制面板”->“管理工具”->“数据源(ODBC)”,打开数据源管理界面,如下所示:图4 ODBC数据源管理4.2 添加系统DSN首先选择刚刚安装的MySql驱动:图5 数据源驱动之后设置数据源信息:图6 数据源信息设置1指的是自定义的名称,这个名称在后面的测试中会用到;2指的是服务器IP地址;3指的是服务器上安装MySql数据库时的端口号,默认为3306;4和5指的是上面添加的账户名称及密码;6指的是需要管理的数据库名称。
mysqlc语言接口中文说明
mysqlc语言接口中文说明MySQL C API 是 MySQL 数据库的 C 语言接口,它允许开发者在 C 或C++ 程序中直接使用 MySQL 数据库。
以下是一些基本的 MySQL C API 的中文说明:1. 初始化 MySQL 连接`MYSQL mysql_init(MYSQL con)`:使用已有的连接初始化一个新的连接,或如果 con 为 NULL,则初始化一个新的连接并将其返回。
2. 连接到 MySQL 服务器`my_bool mysql_real_connect(MYSQL con, const char host, const char user, const char passwd, const char db, unsigned int port, const char unix_socket, unsigned long clientflag)`:尝试连接到 MySQL 服务器。
3. 关闭 MySQL 连接`void mysql_close(MYSQL con)`:关闭与 MySQL 服务器的连接。
4. 执行 SQL 查询`MYSQL_RES mysql_query(MYSQL con, const char q)`:对 SQL 查询进行执行。
5. 获取结果集`MYSQL_RES mysql_store_result(MYSQL con)`:获取查询结果并存储在结果集中。
`MYSQL_RES mysql_use_result(MYSQL con)`:获取查询结果并立即开始读取。
6. 获取结果集中的数据`unsigned int mysql_num_rows(MYSQL_RES res)`:返回结果集中的行数。
`char mysql_fetch_row(MYSQL_RES res)`:获取结果集中的下一行。
7. 获取字段数据`unsigned int mysql_num_fields(MYSQL_RES res)`:返回结果集中的字段数。
C语言Web开发入门前后端交互和数据库连接
C语言Web开发入门前后端交互和数据库连接在现代互联网时代,Web开发成为了热门的技术方向之一。
C语言作为一门广泛应用的编程语言,也可以用于Web开发。
本文将介绍C 语言Web开发中的前后端交互和数据库连接的基本知识。
一、前后端交互前后端交互是Web开发中非常重要的一环,它决定了用户与网站之间的信息传递和数据交换。
在C语言中,我们可以利用CGI(通用网关接口)来实现前后端交互。
CGI是一种标准化的接口协议,它定义了Web服务器与后端程序之间的通信规范。
通过CGI,我们可以在C语言中编写后端程序,接收来自前端页面的请求,并作出响应。
以下是一个简单的C语言实例:```c#include<stdio.h>#include<stdlib.h>int main(){printf("Content-type: text/html\n\n");printf("<html><body>");printf("<h1>Hello, CGI!</h1>");printf("</body></html>");return 0;}```上述代码通过`printf`函数输出HTML文本,实现了一个简单的CGI程序。
通过在Web服务器上配置CGI的映射规则,可以将该程序与前端页面进行交互。
二、数据库连接在Web开发中,数据库的应用非常普遍,它可以用于存储和管理网站的各种数据。
在C语言中,我们可以使用ODBC(开放数据库连接)来实现与数据库的连接。
ODBC是一种面向数据库的接口规范,它提供了一套标准的函数库,用于C语言程序与数据库之间的交互。
在使用ODBC之前,我们需要先安装相应的ODBC驱动程序,并进行相应的配置。
以下是一个简单连接MySQL数据库的C语言示例:```c#include<stdio.h>#include<sql.h>#include<sqlext.h>int main(){SQLHENV henv;SQLHDBC hdbc;SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);SQLDriverConnect(hdbc, NULL,"DSN=test;UID=root;PWD=123456", SQL_NTS, NULL, 0, NULL,SQL_DRIVER_COMPLETE);// 执行SQL查询或更新操作等SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC, hdbc);SQLFreeHandle(SQL_HANDLE_ENV, henv);return 0;}```上述代码使用了ODBC函数库来实现与MySQL数据库的连接。
windows下c++连接mysql
C++连接mysql 数据库环境:windows xp VC++6.0 mysql目的:实现建表,插入,检索,删表等常用功能。
VC6.0 的配置:菜单栏—》工具—》选项—》目录—》添加:C:\Program Files\MySQL\MySQL Server 6.0\includeC:\Program Files\MySQL\MySQL Server 6.0\lib\opt拷贝C:\Program Files\MySQL\MySQL Server 6.0\lib\opt下的libmysql.lib到C:\Program Files\Microsoft Visual Studio\VC98\Lib下写aa.cpp【注:一层层执行可以看到更好的效果】#include <winsock.h>#include <iostream>#include <string>#include <mysql.h>using namespace std;#pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "libmysql.lib")//单步执行,不想单步执行就注释掉#define STEPBYSTEPint main(){cout<<"****************************************"<<endl;#ifdef STEPBYSTEPsystem("pause");#endif//必备的一个数据结构MYSQL mydata;//初始化数据库if(0==mysql_library_init(0,NULL,NULL)){cout<<"mysql_library_init() succeed"<<endl;}else{cout<<"mysql_library_init() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//初始化数据结构if(NULL!=mysql_init(&mydata)){cout<<"mysql_init() succeed"<<endl;}else{cout<<"mysql_init() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//在连接数据库之前,设置额外的连接选项//可以设置的选项很多,这里设置字符集,否则无法处理中文if(0==mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"gbk")) {cout<<"mysql_options() succeed"<<endl;}else{cout<<"mysql_options() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//连接数据库if(NULL!=mysql_real_connect(&mydata,"localhost","root","test","test",3306,NULL ,0))//这里的地址,用户名,密码,端口可以根据自己本地的情况更改{cout<<"mysql_real_connect() succeed"<<endl;}else{cout<<"mysql_real_connect() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//sql字符串string sqlstr;//创建一个表sqlstr ="CREATE TABLE IF NOT EXISTS user_info";sqlstr+="(";sqlstr+="user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";sqlstr+="user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";sqlstr+="user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The SummationOf Using Time'";sqlstr+=");";if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() create table succeed"<<endl;}else{cout<<"mysql_query() create table failed"<<endl;mysql_close(&mydata);return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//向表中插入数据sqlstr ="INSERT INTO user_info(user_name) VALUES('公司名称'),('一级部门'),('二级部门'),('开发小组'),('姓名');";if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() insert data succeed"<<endl;}else{cout<<"mysql_query() insert data failed"<<endl;mysql_close(&mydata);return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//显示刚才插入的数据sqlstr="SELECT user_id,user_name,user_second_sum FROM user_info"; MYSQL_RES *result=NULL;if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() select data succeed"<<endl;//一次性取得数据集result=mysql_store_result(&mydata);//取得并打印行数int rowcount=mysql_num_rows(result);cout<<"row count: "<<rowcount<<endl;//取得并打印各字段的名称unsigned int fieldcount=mysql_num_fields(result);MYSQL_FIELD *field=NULL;for(unsigned int i=0;i<fieldcount;i++){field=mysql_fetch_field_direct(result,i);cout<<field->name<<"\t\t";}cout<<endl;//打印各行MYSQL_ROW row=NULL;row=mysql_fetch_row(result);while(NULL!=row){for(int i=0; i<fieldcount;i++){cout<<row[i]<<"\t\t";}cout<<endl;row=mysql_fetch_row(result);}}else{cout<<"mysql_query() select data failed"<<endl; mysql_close(&mydata);return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//删除刚才建的表sqlstr="DROP TABLE user_info";if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() drop table succeed"<<endl; }else{cout<<"mysql_query() drop table failed"<<endl; mysql_close(&mydata) ;return -1;}mysql_free_result(result);mysql_close(&mydata);mysql_server_end();system("pause");return 0;}vc++添加c++文件:添加后:运行:没有错误的话会在debug下生成可执行文件:运行aa.exe:查看数据库:没用C连接之前:C连接mysql修改后:DONE!!1。
C连接MYSQL数据库的3种方法及示例
C连接MYSQL数据库的3种方法及示例连接MYSQL数据库有多种方法,下面介绍其中三种常用的方法。
1.使用CAPI连接MYSQL数据库CAPI是官方提供的一套用于连接和操作MYSQL数据库的函数库。
使用该API,可以在C程序中直接连接MYSQL数据库,并执行各种SQL语句。
以下是一个连接MYSQL数据库的示例:```c#include <mysql.h>int maiMYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;conn = mysql_init(NULL);if (conn == NULL)fprintf(stderr, "mysql_init failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL)fprintf(stderr, "mysql_real_connect failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}if (mysql_query(conn, "SELECT * FROM table"))fprintf(stderr, "mysql_query failed: %s\n",mysql_error(conn));mysql_close(conn);return 1;}res = mysql_use_result(conn);while ((row = mysql_fetch_row(res)) != NULL)printf("%s %s %s\n", row[0], row[1], row[2]);}mysql_free_result(res);mysql_close(conn);return 0;```上述代码首先初始化MYSQL对象,然后使用mysql_real_connect函数连接MYSQL数据库。
利用MySQL自带的C API函数实现数据库功能调用
3 利用MySQL自带的C API函数实现数据库功能调用由于各个数据库之间的差异,它们所提供的数据库功能也就各有不同。
这样,通过ODBC API就不可能完全拥有所有的数据库功能,因而影响了程序对数据库的控制功能,也就不能充分发挥数据库的能力。
并且这种统一的接口还是以损失效能为前提的,这就使数据库操作时间延长。
所以,为了解决以上问题,MySQL 的制造商在提供ODBC驱动程序的基础上,还提供了各种编程环境下的API,其中包括 C API。
这些API函数很显然能尽可能地发挥数据库的能力,并减少数据库操作的延长时间,但却使程序的通用性受到严重影响。
MySQL提供了一套C API函数,它由一组函数以及一组用于函数的数据类型组成,这些函数与MySQL 服务器进行通信并访问数据库,可以直接操控数据库,因而显著地提高了操控效能。
C API数据类型包括:MYSQL(数据库连接句柄)、MYSQL_RES(查询返回结果集)、MYSQL_ROW(行集)、MYSQL_FIELD(字段信息)、MYSQL_FIELD_OFFSET(字段表的偏移量)、my_ulonglong(自定义的无符号整型数)等;C API提供的函数包括:mysql_close()、mysql_connect()、mysql_query()、mysql_store_result()、mysql_init()等,其中mysql_query()最为重要,能完成绝大部分的数据库操控。
下面将具体讨论数据库操作类CDatabase通过C API的实现以及在VC中的应用。
3.1 CDatabase类的实现CDatabase类封装了MySQL数据库的功能,因此不具备通用性,只能在对MySQL 的应用程序中使用。
下面将根据C++要求及规范给出CDatabase类的具体结构以及相关简要介绍:class CDatabase{public:BOOL UnLockTable(); //解锁BOOL LockTable(char* TableName,char* PRIORITY); //加锁int Reload(); //重新登陆,非零时返回错误信息char* GetState(); //服务器状态char* GetServerInfo(); //服务器信息int GetProtocolInfo(); //协议信息char* GetHostInfo(); //主机信息char * GetClientInfo(); //客户机信息char* GetFieldName(int FieldNum); //字段名BOOL IsEnd(); //是否最后int DropDB(char *db); //删除数据库,非零时返回错误信息void SeekData(int offset); //查找指定数据int CreateDB(char *db); //创建数据库,非零时返回错误信息void FreeRecord(); //释放结果集unsigned int GetFieldNum(); //得到字段数BOOL ConnectDB(Database_Param *p); //连接数据库MYSQL_ROW GetRecord(); //得到结果(一个记录)my_ulonglong GetRowNum(); //得到记录数BOOL SelectDB(Data_Param *para); //选择数据库BOOL UpdateRecord(Data_Param *para); //更新记录BOOL SelectRecord(Data_Param *para); //选择记录BOOL InsertRecord(Data_Param *para); //插入记录BOOL DelRecord(Data_Param *para); //删除记录BOOL SelectAll(Data_Param *para); //选择所有记录char * OutErrors(); //输出错误信息CDatabase(); //初始化数据库virtual ~CDatabase(); //关闭数据库连接private:MYSQL mysql; //数据库连接句柄MYSQL_RES *query; //结果集MYSQL_ROW row; //记录集MYSQL_FIELD *field; //字段信息(结构体)BOOL FindSave(char *str); //查找并保存结果集};通过CDatabase类中定义的这些功能函数,我们可以通过远程或本机完成对MySQL数据库的绝大部分操控,并且由于定义了解锁和加锁功能,使得应用程序能够多线程或多进程地访问数据库,大大提高了效能。
【C#】使用MySql.Data.dll连接MySQL数据库
【C#】使⽤MySql.Data.dll连接MySQL数据库准备⼯作在Visual Studio中新建⼀个C#的控制台应⽤程序。
确保后台已经启⽤了MySQL57服务。
在MySQL的安装路径下找到DLL,默认位置是 C:\Program Files (x86)\MySQL\ 6.9\Assemblies\v4.5\MySql.Data.dll 。
更多写代码连接MySQL的⽅法(通过MySQLConnector连接器),参考⽂档 C:\Program Files (x86)\MySQL\ 6.9\Documentation\ConnectorNET.chm 。
在⽂档的Users Guide-Programming中有代码案例。
把MySql.Data.dll引⼊项⽬中。
v4.5表⽰.NetFramework框架的版本号,⼀定要保证使⽤的DLL与项⽬的.NetFramework版本⼀致,否则运⾏时报错找不到DLL,报错如下:1>F:\Learning\CSharpConnectMySQL\CSharpConnectMySQL\Program.cs(1,7,1,12): error CS0246: The type or namespace name 'MySql' could not be found (are you missing a using directive or an assembly reference?)测试增删改查using MySql.Data.MySqlClient;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace CSharpConnectMySQL{class Program{static void Main(string[] args){// 服务器地址;端⼝号;数据库;⽤户名;密码string connectStr = "server=127.0.0.1;port=3306;database=mygamedb;user=root;password=root"; // ⽤户名和密码在MySQL定义的// 创建连接MySqlConnection conn = new MySqlConnection(connectStr);try{// 打开连接conn.Open();Console.WriteLine("已经建⽴连接");//Query(conn); // 测试查询//Insert(conn); // 测试插⼊//Update(conn); // 测试更新//Delete(conn);// 测试删除}catch (Exception e){Console.WriteLine(e.ToString());}finally{// 关闭连接conn.Close();Console.WriteLine("数据库已关闭");}Console.ReadKey();}///<summary>///查询///</summary>///<param name="conn"></param>private static void Query(MySqlConnection conn){// 创建命令string sql = "select * from users";MySqlCommand cmd = new MySqlCommand(sql, conn);// 读取数据MySqlDataReader reader = cmd.ExecuteReader();while (reader.Read()) // true表⽰能读取该⾏数据{ // ⽅式⼀:访问数组 Console.WriteLine(reader[0].ToString() + reader[1].ToString()); // reader[0]是读出来的第⼀列属性// ⽅式⼆:根据列数 Console.WriteLine(reader.GetInt32(0));// ⽅式三:根据列名 Console.WriteLine(reader.GetInt32("user_id"));}}///<summary>///插⼊,增加数据///</summary>///<param name="conn"></param>private static void Insert(MySqlConnection conn){// 创建命令string sql = "insert into user(user_name, user_pwd) values('asdAa','2345')";MySqlCommand cmd = new MySqlCommand(sql, conn);// 添加⼀条记录int result = cmd.ExecuteNonQuery();Console.WriteLine("数据库中受影响的⾏数 = " + result);}///<summary>///更新,改数据///</summary>///<param name="conn"></param>private static void Update(MySqlConnection conn){// 创建命令string sql = "update user set user_name = 'newName', user_pwd = '66777' where user_id = '3'";MySqlCommand cmd = new MySqlCommand(sql, conn);// 更新记录int result = cmd.ExecuteNonQuery();Console.WriteLine("数据库中受影响的⾏数 = " + result);}///<summary>///删除数据///</summary>///<param name="conn"></param>private static void Delete(MySqlConnection conn){// 创建命令string sql = "delete from user where user_id = '4'";MySqlCommand cmd = new MySqlCommand(sql, conn);// 删除记录int result = cmd.ExecuteNonQuery();Console.WriteLine("数据库中受影响的⾏数 = " + result);}}}传参拼接SQL语句///<summary>///验证⽤户名和密码///</summary>///<param name="conn"></param>///<param name="userName"></param>///<param name="password"></param>///<returns></returns>private static bool Verify(MySqlConnection conn, string userName, string password){// ⽅式⼀:组拼sql//string sql = "select * from user where user_name = '" + userName + "' and user_pwd = '" + password + "'"; //MySqlCommand cmd = new MySqlCommand(sql, conn);// ⽅式⼆:参数标记string sql = "select * from user where user_name = @p1 and user_pwd = @p2";MySqlCommand cmd = new MySqlCommand(sql, conn);cmd.Parameters.AddWithValue("p1", userName); // 这⾥会根据输⼊的类型,⾃动判断要不要加单引号''cmd.Parameters.AddWithValue("p2", password);MySqlDataReader reader = cmd.ExecuteReader();if (reader.Read()) // 要么查出⼀条数据,要么0条。
连接mysql数据库的详细步骤和方法
连接mysql数据库的详细步骤和方法连接MySQL数据库的详细步骤和方法在现代的软件开发中,数据库起着非常重要的角色,其中MySQL作为一个开源的关系型数据库管理系统广泛使用于各个行业。
连接MySQL数据库是进行数据操作的第一步,下面将详细介绍连接MySQL数据库的步骤和方法。
1. 安装MySQL服务器在开始连接MySQL数据库之前,首先需要安装MySQL服务器。
MySQL官方网站提供了适用于不同操作系统的安装程序,你可以根据自己的操作系统类型下载并运行安装程序。
安装完成后,启动MySQL 服务器。
2. 安装MySQL驱动程序为了能够在代码中连接和操作MySQL数据库,需要安装相应的MySQL驱动程序。
目前比较常用的MySQL驱动程序有两个选择,一个是官方提供的MySQL Connector/J驱动程序,另一个是开源社区维护的MariaDB Connector/J驱动程序。
你可以选择其中一个进行安装。
3. 导入MySQL驱动程序包在连接MySQL之前,需要将下载的驱动程序包导入到你的项目中。
如果你正在使用Java开发,可以将MySQL驱动程序包(.jar文件)拷贝到你的项目的类路径下,并将其添加到项目的依赖中。
4. 创建数据库连接在编写数据库连接代码之前,首先需要确保你已经拥有了MySQL服务器的位置区域、端口号、用户名和密码等相关信息。
在代码中,创建一个数据库连接对象,并传入相应的连接参数。
下面是一个Java的示例代码:``` javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class MySQLConnection {public static void main(String[] args) {// 数据库连接参数String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root";String password = "123456";Connection connection = null;try {// 加载MySQL驱动程序Class.forName("com.mysql.cj.jdbc.Driver");// 创建数据库连接connection = DriverManager.getConnection(url, username, password);System.out.println("成功连接到数据库!");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 关闭数据库连接if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}}```在以上代码中,我们使用了JDBC API提供的`DriverManager.getConnection()`方法来创建数据库连接。
C语言操作MYSQL
C语言操作MYSQLC语言是一种强大的编程语言,可以用于各种应用程序的开发。
在许多应用程序中,数据库是一个重要的组成部分。
MySQL是一个流行的开源数据库管理系统,提供了高性能、可靠性和可扩展性。
在C语言中,我们可以使用各种API来操作MySQL数据库。
在本文中,我们将讨论如何在C语言中使用MySQLAPI连接到数据库、执行SQL语句以及处理结果。
完成安装后,我们可以在C代码中包含"mysql.h"头文件,然后使用mysql_init(函数初始化一个MYSQL结构体。
```c#include <mysql.h>int mainMYSQL *conn;conn = mysql_init(NULL);//...return 0;```接下来,我们需要用mysql_real_connect(函数连接到数据库。
我们需要提供主机名、用户名、密码以及数据库名称。
成功连接后,函数将返回一个非空的MYSQL指针,代表与数据库的连接。
//...MYSQL *conn;conn = mysql_init(NULL);mysql_real_connect(conn, "localhost", "root", "password", "database", 0, NULL, 0);//...```有了连接,我们可以执行SQL语句来操作数据库。
使用mysql_query(函数可以执行任意的SQL语句,如SELECT、INSERT、UPDATE等。
```c//...mysql_query(conn, "SELECT * FROM table");//...```执行完查询后,我们需要获取并处理结果。
使用mysql_use_result(函数可以获取结果集,并使用mysql_fetch_row(函数来逐行提取结果。
c语言mysql编程
C语言mysql编程先给出一个简单的代码:可以实现最简单的数据库连接:#include<mysql.h>#include<stdio.h>#include<string.h>static void output_error(MYSQL * mysql);int main(){MYSQL mysql ;// 代码1const char *host="localhost";const char *user="root";const char *password="zjh171";const char *database="renshi";const int port=3306;const char *socket=NULL;const int flag = 0;mysql_init(&mysql);// 代码2mysql_real_connect(&mysql,host,user,password,database,port,socket,flag) return 0;}代码1:先看看MYSQL 是什么:typedef struct st_mysql{NET net; /* Communication parameters */unsigned char *connector_fd; /* ConnectorFd for SSL */char *host,*user,*passwd,*unix_socket,*server_version,*host_info; char *info, *db;struct charset_info_st *charset;MYSQL_FIELD *fields;MEM_ROOT field_alloc;my_ulonglong affected_rows;my_ulonglong insert_id; /* id if insert on table with NEXTNR */my_ulonglong extra_info; /* Not used */unsigned long thread_id; /* Id for connection in server */unsigned long packet_length;unsigned int p ort;unsigned long client_flag,server_capabilities;unsigned int p rotocol_version;unsigned int f ield_count;unsigned int server_status;unsigned int server_language;unsigned int w arning_count;struct st_mysql_options options;enum mysql_status status;my_bool free_me; /* If free in mysql_close */my_bool reconnect; /* set to 1 if automatic reconnect *//* session-wide random string */char scramble[SCRAMBLE_LENGTH+1];/*Set if this is the original connection, not a master or a slave we haveadded though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()*/my_bool rpl_pivot;/*Pointers to the master, and the next slave connections, points toitself if lone connection.*/struct st_mysql* master, *next_slave;struct st_mysql* last_used_slave; /* needed for round-robin slave pick *//* needed for send/read/store/use result to work correctly with replication */ struct st_mysql* last_used_con;LIST *stmts; /* list of all statements */const struct st_mysql_methods *methods;void *thd;/*Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag from mysql_stmt_close if close had to cancel result set of this object.*/my_bool *unbuffered_fetch_owner;/* needed for embedded server - no net buffer to store the 'info' */char *info_buffer;void *extension;} MYSQL;显然是一个结构体;如果没有代码2,就会报错:原型:MYSQL * STDCALL mysql_init(MYSQL *mysql);加上测试信息:#include<mysql.h>#include<stdio.h>#include<string.h>static void output_error(MYSQL * mysql);int main(){MYSQL mysql ;const char *host="localhost";const char *user="root";const char *password="zjh171";//密码错,就会报错1045const char *database="renshi";//数据库找不到就会报错1049const int port=3306;//写错,连接不到数据库,报错2003const char *socket=NULL;const int flag = 0;if(!mysql_init(&mysql) ){output_error(&mysql);}if(!mysql_real_connect(&mysql,host,user,password,database,port,socket,flag)) {output_error(&mysql);}return 0;}static void output_error(MYSQL * mysql){fprintf(stderr, "errorno: %d \n", mysql_errno(mysql) );fprintf(stderr, "error info: %s\n", mysql_error(mysql) );exit(1);}。
c语言 mysql 编译
c语言 mysql 编译C语言MySQL编译:实现高效数据库操作概述C语言是一种通用的高级编程语言,而MySQL是一种流行的开源关系型数据库管理系统。
将这两者结合起来,可以实现高效的数据库操作。
本文将介绍如何在C语言中编译和使用MySQL,以及一些常见的数据库操作示例。
一、MySQL简介MySQL是一种开源的关系型数据库管理系统,广泛应用于Web应用程序和其他客户端应用程序中。
它支持多线程、多用户的功能,具有高性能和可扩展性。
二、C语言中使用MySQL的编译步骤1. 安装MySQL开发包需要在系统中安装MySQL开发包。
可以通过以下命令在Linux系统中安装MySQL开发包:```sudo apt-get install libmysqlclient-dev```在Windows系统中,可以从MySQL官方网站下载并安装MySQL Connector/C。
2. 创建C程序文件在C语言中编写和使用MySQL,首先需要创建一个C程序文件。
可以使用任何文本编辑器创建一个以.c为后缀的文件,例如`mysql_example.c`。
3. 引入MySQL头文件在C程序文件中,需要引入MySQL的头文件。
可以使用以下代码引入:```c#include <mysql.h>```4. 编写数据库连接代码在C程序文件中,需要编写连接到MySQL数据库的代码。
可以使用以下代码连接到本地MySQL服务器:```cMYSQL *conn;conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");exit(1);}if (mysql_real_connect(conn, "localhost", "user", "password",NULL, 0, NULL, 0) == NULL) {fprintf(stderr, "%s\n", mysql_error(conn));mysql_close(conn);exit(1);}```其中,`localhost`是MySQL服务器的地址,`user`和`password`是登录MySQL服务器的用户名和密码。
【mySQL】C++操作mySql数据库(Mysqlconnectorc++)
【mySQL】C++操作mySql数据库(Mysqlconnectorc++)⽬录前⾔⼀、依赖:MySQL Connector/C++需要安装配置boost库⼆、简介应⽤程序要想访问数据库,必须使⽤数据库提供的编程接⼝。
⽬前业界⼴泛被使⽤的API标准有ODBC和JDBC。
ODBC是由微软提出的访问关系型数据库的C程序接⼝。
JDBC(Java Data Base Connectivity,java数据库连接)是⼀种⽤于执⾏SQL语句的Java API,可以为多种关系数据库提供统⼀访问,它由⼀组⽤Java语⾔编写的类和接⼝组成。
MySQL实现了三种Connector⽤于C/C++ 客户端程序来访问MySQL服务器:Connector/ODBC, Connector/C++(JDBC)以及Connector/C(libmysqlclient)。
MySQL C++ Driver的实现基于JDBC规范MySQL Connector/C++是由Sun Microsystems开发的MySQL连接器。
它提供了基于OO的编程接⼝与数据库驱动来操作MySQL服务器。
与许多其他现存的C++接⼝实现不同,Connector/C++遵循了JDBC规范。
也就是说,Connector/C++ Driver的API主要是基于Java语⾔的JDBC接⼝。
JDBC是java语⾔与各种数据库连接的标准⼯业接⼝。
Connector/C++实现了⼤部分JDBC规范。
如果C++程序的开发者很熟悉JDBC编程,将很快的⼊门。
Connector C++ 使⽤3.4 静态库和动态库:接着根据我们的需要,执⾏后续步骤:如果⽤静态库,可能⽐较⿇烦,因为静态库需要和编译器版本相匹配,因此需要⼿动编译⼀份,所以此次选择动态库。
动态库:创建项⽬和配置1、新建⼀个空项⽬2、将D:\Program Files\MySQL\Connector C++ 1.1.3\include添加到项⽬的包含⽬录中(根据具体路径⽽定)3、将D:\boost\boost_1_55_0添加到项⽬的包含⽬录中(根据具体路径⽽定)4、将D:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt添加到项⽬的库⽬录中(根据具体路径⽽定)5、添加mysqlcppconn.lib⾄附加依赖项中6、如果使⽤的mysql是64位的,还需要将项⽬的解决⽅案平台由win32改成x647、将D:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt(根据具体路径⽽定)下的mysqlcppconn.dll复制到项⽬中去,和.cpp,.h⽂件位于同⼀路径下将D:\Program Files\MySQL\MySQL Server 5.6\lib(根据具体路径⽽定)下的libmysql.dll复制到项⽬中去,和.cpp,.h⽂件位于同⼀路径下⾄此,相关配置全部完成代码编写6、程序引⼊头⽂件#include "jdbc/mysql_connection.h"#include "jdbc/mysql_driver.h"#include "jdbc/cppconn/statement.h"7、连接数据库//初始化驱动sql::mysql::MySQL_Driver *driver = NULL;sql::Connection *con = NULL;driver = sql::mysql::get_mysql_driver_instance();if (driver == NULL){cout << "driver is null" << endl;}con = driver->connect("tcp://localhost:3306", "root", "root");if (con == NULL){cout << "conn is null" << endl;}cout << "connect suceess" << endl;8、程序使⽤mysql版本为mysql-5.6.24-win32,完整的代码如下:#include "iostream"#include "jdbc/mysql_connection.h"#include "jdbc/mysql_driver.h"#include "jdbc/cppconn/statement.h"#include "jdbc/cppconn/prepared_statement.h"using namespace std;using namespace sql;int main(){//初始化驱动sql::mysql::MySQL_Driver *driver = NULL;sql::Connection *conn = NULL;driver = sql::mysql::get_mysql_driver_instance();if (driver == NULL){cout << "driver is null" << endl;}//连接//con = driver->connect("tcp://localhost:3306", "root", "root");conn = driver->connect("tcp://localhost:3306/ourcms", "root", "root");if (conn == NULL){cout << "conn is null" << endl;}cout << "connect suceess" << endl;//查询int flag = 0;sql::Statement *stmt = conn->createStatement();sql::ResultSet *res;res = stmt->executeQuery("SELECT * FROM cms_device");while (res->next()){cout << res->getInt("id") << endl;cout << res->getString("phone").c_str() << endl;cout << res->getString("imsi").c_str() << endl;}//插⼊conn->setAutoCommit(0);//关闭⾃动提交PreparedStatement *prep_stmt;int updatecount = 0;res->first();flag = 0;while (res->next()){if (strcmp(res->getString("imsi").c_str(), "460010010000100") == 0){flag = 1;break;}}if (flag == 0) {prep_stmt = conn->prepareStatement("INSERT INTO cms_device (id,phone,imsi) VALUES (111,?,?)"); prep_stmt->setString(1, "150********");prep_stmt->setString(2, "460010010000100");updatecount = prep_stmt->executeUpdate();}Savepoint *savept;savept = conn->setSavepoint("SAVEPT1");res->first();flag = 0;while (res->next()){if (strcmp(res->getString("imsi").c_str(), "460010010000101") == 0){flag = 1;break;}}if (flag == 0) {prep_stmt = conn->prepareStatement("INSERT INTO cms_device (phone,imsi) VALUES (?,?)");prep_stmt->setString(1, "150********");prep_stmt->setString(2, "460010010000101");updatecount = prep_stmt->executeUpdate();}conn->rollback(savept);conn->releaseSavepoint(savept);conn->commit();//更新conn->setAutoCommit(1);//打开⾃动提交prep_stmt = conn->prepareStatement("update cms_device set phone=? where phone=?");prep_stmt->setString(1, "150********");prep_stmt->setString(2, "150********");updatecount = prep_stmt->executeUpdate();}程序代码main.cpp#include <iostream>#include <map>#include <string>#include <memory>#include "mysql_driver.h"#include "mysql_connection.h"#include "cppconn/driver.h"#include "cppconn/statement.h"#include "cppconn/prepared_statement.h"#include "cppconn/metadata.h"#include "cppconn/exception.h"using namespace std;using namespace sql;int main(){sql::mysql::MySQL_Driver *driver = 0;sql::Connection *conn = 0;try{driver = sql::mysql::get_mysql_driver_instance();conn = driver->connect("tcp://localhost:3306/booktik", "root", "123456");cout << "连接成功" << endl;}catch (...){cout << "连接失败" << endl;}sql::Statement* stat = conn->createStatement();stat->execute("set names 'gbk'");ResultSet *res;res = stat->executeQuery("SELECT * FROM BOOK");while (res->next()){cout << "BOOKNAME:" << res->getString("bookname") << endl;cout << " SIZE:" << res->getString("size") << endl;}if (conn != 0){delete conn;}system("pause");}运⾏结果使⽤中会遇到的问题1.返回的结果中⽂乱码问题:安装好了boost库和Mysql connector c++ 1.1.3库后,我们配置好⼯程的属性,就能使⽤通过sql::Connection::createStatement(),⽅法创建的sql::Statement*对象,对数据库进⾏操作,但是如果你数据库中的编码是utf8或者其他⽀持中⽂的编码,那么你必需要在执⾏sql查询语句之前,执⾏这么⼀句代码:m_sqlStatement->execute("set names 'gbk'");这⾥的m_sqlStatement是⼀个sql::Statement*对象。
MFC,C++,C程序与MySql数据库连接,库函数
C++程序与MySql数据库连接——陈绍钦csq 有很多种技术可以让C++程序利用数据库:ODBC、DB、DAO、ADO、API等,ODBC是传统的方法功能强大,ADO比较便捷,并逐渐代替了DAO。
对于mysql数据库来说,其提供的API函数和PHP中mysqli函数相差不大,毕竟mysql是用c语言写的,可以说懂得了PHP和mysql的结合,就懂得了c++与mysql的结合。
以下是C++程序里利用mysql数据库的简略说明。
一、MySQL的安装可以考虑安装mysql-5.0.41-win32(可到/soft/3573.htm处下载),当然你有更新的版本更好,注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。
安装后期会进行服务器配置,你可以设置你的服务器登陆密码,也可以不设置密码。
二、VC6.0的设置(1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQL的include目录路径。
(我的是D:/Program Files/MySQL/MySQL Server 5.0/include)。
(2)在上面说到的“Show directories for:”下拉列表中选中“Library files”,然后添加你本地安装MySQL的Lib 目录路径。
Lib目录下还有debug和opt两个目录,建议选debug。
(我的是D:/Program Files/MySQL/MySQL Server 5.0/lib/debug)。
(3)在“Project settings->Link:Object/library modules”里面添加“libmysql.lib”。
(4)在stdafx.h里面添加如下的内容:#include "winsock.h"#include "mysql.h"#pragmacomment(lib,"libmySQL.lib")(5)建议将“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目录下。
Dev-cpp下使用 MYSQL C API尝试连接MYSQL(C++)
Dev-cpp下使用MYSQL C API尝试连接MY SQL(C++)2008-05-24 01:40:24| 分类:DataMining|举报|字号订阅在网上找了很多关于使用MYSQL C API的资料,和实例。
可不是VC下的,就是BCB的,要不就是Linux下的,而我一直想在Win下用标准C++来做东西(美其名曰是想要移植性:) )。
所以想在Dev-cpp下使用MYSQL C API尝试连接MYSQL。
下面把心得和连接、配置方法写一下。
Advertise on this siteProgrammer homeYour Ad Here1.当然要先安装MySQL数据库了。
我安的是5.02.我的Dev-cpp版本是4.9.9.2,操作系统是Windows XP SP2 。
a)为Dev-cpp下载MySQL的包。
方法有两个:1)使用Dev-cpp的更新功能。
“工具”-〉“检查更新” 如图1图 1图 2在“Select devpak server”中选择“”如图3所示图 3点击“Check for updates”在得到的文件列表中选择“libmysql”图4其他的就是下载和安装了。
(图5-7)图 5图 6图7b)直接到下载,然后使用package manager安装图83.现在就可以新建工程,来在自己的程序中使用MySQL 提供的C API了。
*注意:需要对工程作如下设置:1)“工程”-〉“工程属性” 中“参数”选项卡在“编译器”和“C++编译器”中加入“-Wall”和“-W”不包括“”,在“连接器”中加入“-lmysql”不包括“”如图9图92)在程序中加入#include < mysql.h>下面给出一个简单的示例程序。
#include <windows.h>#include <iostream>#include <mysql/mysql.h>#define SELECT_QUERY "select * from stu "using namespace std;int main(int argc, char *argv[])...{//connection paramschar *host = "localhost";char *user = "root";char *pass = "123";char *db = "mydb";//sockMYSQL *sock;MYSQL_RES *res;sock = mysql_init(0);if (sock) cout << "sock handle ok!" << endl;else ...{cout << "sock handle failed!" << endl;return EXIT_FAILURE;}//connectionif (mysql_real_connect(sock, host, user, pass, db, 0, NULL, 0)) cout << "connection ok!" << endl;else ...{cout << "connection failed!" << endl;return EXIT_FAILURE;}//queryif (mysql_query (sock, SELECT_QUERY ))...{cout << "Query failed " << mysql_error(sock) << endl;exit(1);}if ( !( res = mysql_store_result( sock )))...{cout << "Couldn't get result from " << mysql_error(sock) <<endl; exit(1);}MYSQL_FIELD *field;MYSQL_ROW row;while ((field = mysql_fetch_field(res)))...{printf("field name %s ", field->name);}while ( row = mysql_fetch_row ( res ))...{cout<<row[0]<<" "<<row[1]<<endl;}system("PAUSE");//closing connectionmysql_free_result ( res );mysql_close(sock);return EXIT_SUCCESS;}运行结果。
mysql的c语言函数
mysql的c语言函数MySQL是一种流行的关系型数据库管理系统,可以使用C程序来访问并处理MySQL数据库。
在C程序中,可以使用一个称为mysqlclient的MySQL C函数库来实现与MySQL数据库的通信。
MySQL C函数库公开了一组C API,可用于执行各种MySQL数据库操作,例如连接与断开连接,执行SQL查询,事务处理,以及数据的插入、修改、删除等操作。
MySQL C函数库常见函数如下:1. 连接与断开连接函数mysql_init和mysql_real_connect函数可用于连接到MySQL数据库服务器并开始一个新的连接。
mysql_close 函数用于停止与服务器连接。
mysql_init函数在C程序中启动MySQL库,用于初始化指向MySQL的主句柄。
具有以下语法:MYSQL *mysql_init(MYSQL *mysql)mysql_real_connect函数由C程序使用,在应用程序和MySQL服务之间建立一个新连接。
具有以下语法:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int flags);其中,参数host 指定MySQL服务器的主机名或IP地址,user 和 passwd是访问MySQL服务器所使用的用户名和密码,这些参数都是必需的。
参数db是MySQL数据库的名称,port参数是MySQL服务协议使用的TCP端口号。
如果指定unix_socket参数,MySQL 驱动程序将连接到UNIX域套接字而不是TCP / IP套接字。
flags参数用于控制与服务器建立的连接选项。
2. 执行SQL查询函数mysql_query函数可用于执行SQL查询(例如SELECT语句),并将结果集返回给C程序。
Linux环境下Mysql与C相关技术文档
Linux环境下Mysql与C相关技术文档拟制:李邦柱日期:2014-9-18审核:日期:批准:日期:文档编号:YFZX-LIBZ-004创建日期:2014-9-18最后修改日期:2014-09-18版本号:V1.0电子版文件名:linux环境下mysql与C相关技术文档.doc文档修改记录修改日期修改人修改说明版本号修改页目录Linux环境下Mysql与C相关技术文档 (1)1 概述 (4)2 安装mysql (4)2.1 通过网络安装mysql (4)2.1.1 检查是否已经安装mysql (4)2.1.2 通过yum来进行mysql的安装 (4)2.2 离线安装mysql (5)2.2.1 检查是否安装mysql (5)2.2.2 通过rpm安装mysql (5)2.3 mysql设置密码 (6)2.4 mysql设置开机启动 (6)2.5 Mysql数据库的主要配置 (7)3 C与Mysql (7)3.1 Mysql C API 函数概述 (7)3.2 API使用的一般原则 (10)4 C API使用示例 (13)4.1 连接数据库 (13)4.2 数据库查询 (14)4.3 数据库插入数据 (15)4.4 数据库删除 (16)1概述MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
MySQL是最流行的关系型数据库管理系统。
支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
为多种编程语言提供了API。
这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和Tcl 等。
2安装mysql2.1 通过网络安装mysql2.1.1检查是否已经安装mysql# rpm -qa | grep mysql// 上述命令就会查看该操作系统上是否已经安装了mysql数据库有的话,我们就通过rpm -e 命令或者rpm -e --nodeps 命令来卸载掉#rpm -e --nodeps mysql在删除完以后我们可以通过rpm -qa | grep mysql 命令来查看mysql是否已经卸载成功!!2.1.2通过yum来进行mysql的安装#yum install -y mysql-server mysql mysql-deve通过输入 yum install -y mysql-server mysql mysql-devel 命令将mysql mysql-server mysql-devel都安装好(注意:安装mysql时我们并不是安装了mysql客户端就相当于安装好了mysql数据库了,我们还需要安装mysql-server服务端才行) 通过yum方式安装mysql数据库省去了很多没必要的麻烦,当出现下面的结果时,就代表mysql数据库安装成功了此时我们可以通过如下命令,查看刚安装好的mysql-server的版本 #rpm -qi mysql-server2.2 离线安装mysql2.2.1检查是否安装mysql方法同2.1.12.2.2通过rpm安装mysql1. 需要准备离线安装包MySQL-server-5.5.30-1.el6.x86_64.rpmMySQL-client-5.5.30-1.el6.x86_64.rpmMySQL-devel-5.5.30-1.el6.x86_64.rpm2.安装新的MySQL#rpm -ivh MySQL-server-5.5.30-1.el6.x86_64.rpm#rpm -ivh MySQL-client-5.5.30-1.el6.x86_64.rpm#rpm -ivh MySQL-devel-5.5.30-1.el6.x86_64.rpm3.启动MySQL服务#service mysql start4.查看mysql运行状态#/etc/rc.d/init.d/mysqld status5.MySQL服务一些其他命令a、察看mysql是否在自动启动列表:#/sbin/chkconfig –listb、添加mysql到系统自启动服务组:#/sbin/chkconfig–add mysqlc、把mysql从启动服务组中删除:#/sbin/chkconfig–del mysqld、停止mysql服务:# service mysqld stope、脚本启动mysql服务:# /etc/rc.d/init.d/mysqld startf、脚本停止mysql服务:# /etc/rc.d/init.d/mysqld stop2.3 mysql设置密码命令如下:# /usr/bin/mysqladmin -u root password '123456'2.4 mysql设置开机启动2.4.1.1 查看Mysql服务是否是开机启动命令如下:#chkconfig --list | grep mysqld2.4.1.2 设置开机启动命令如下:# chkconfig mysqld on2.5 Mysql数据库的主要配置/etc/f 这是mysql的主配置文件我们可以查看一下这个文件的一些信息# cat f[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid简要介绍./var/lib/mysql mysql数据库的数据库文件存放位置./var/log mysql数据库的日志输出存放位置3C与Mysql3.1 Mysql C API 函数概述这里归纳了C API可使用的函数函数描述mysql_affected_rows()返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。
C连接MYSQL数据库的3种方法及示例
C# 连接MYSQL数据库的方法及示例连接MYSQL数据库的方法及示例方法一:using MySql.Datausing MySql.Data.MySqlClient;其他操作跟SQL是差不多,无非就是前缀变成MySql了.补充:下面是连接字符串,供参考.MySqlConnection con = newMySql.Data.MySqlClient.MySqlConnection("Database='testdb';DataSource='localhost';User Id='db';Password='apple';charset='utf8'");con.Open();MySqlCommand cmd = new MySqlCommand();cmd.Connection = con;使用MYSQL推出的MySQL Connector/Net is an driver for MySQL该组件为MYSQL为访问MYSQL数据库设计的.NET访问组件。
安装完成该组件后,引用命名空间MySql.Data.MySqlClient;使用命令行编译时:csc /r:MySql.Data.dll test.cs方法二:通过ODBC访问MYSQL数据库访问前要先下载两个组件:和MYSQL的ODBC驱动(MySQL Connector/ODBC (MyODBC) driver)目前为3.51版安装完成后,即可通过ODBC访问MYSQL数据库方法三:使用CoreLab推出的MYSQL访问组件,面向.NET安装完成后,引用命名空间:CoreLab.MySql;使用命令编译时:csc /r:CoreLab.MySql.dll test.cs以下为访问MYSQL数据库实例编译指令:csc /r:CoreLab.MySql.dll /r:MySql.Data.dll test.csusing System;using ;using System.Text;using CoreLab.MySql;using System.Data.Odbc;using MySql.Data.MySqlClient;class ConnectMySql{public void Connect_CoreLab(){string constr = "User Id=root;Host=localhost;Database=qing;password=qing"; MySqlConnection mycn = new MySqlConnection(constr);mycn.Open();MySqlCommand mycm = new MySqlCommand("select * from shop",mycn); MySqlDataReader msdr = mycm.ExecuteReader();while(msdr.Read()){if (msdr.HasRows){Console.WriteLine(msdr.GetString(0));}}msdr.Close();mycn.Close();}public void Connect_Odbc(){//string MyConString ="DSN=MySQL;UID=root;PWD=qing";string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +"SERVER=localhost;" +"DATABASE=test;" +"UID=root;" +"PASSWORD=qing;" +"OPTION=3";OdbcConnection MyConn = new OdbcConnection(MyConString);MyConn.Open();OdbcCommand mycm = new OdbcCommand("select * from hello",MyConn); OdbcDataReader msdr = mycm.ExecuteReader();while(msdr.Read()){if (msdr.HasRows){Console.WriteLine(msdr.GetString(0));}}msdr.Close();MyConn.Close();}public void Connect_Net(){string myConnectionString = "Database=test;Data Source=localhost;User Id=root;Password=qing";MySqlConnection mycn = new MySqlConnection(myConnectionString); mycn.Open();MySqlCommand mycm = new MySqlCommand("select * from hello",mycn); MySqlDataReader msdr = mycm.ExecuteReader();while(msdr.Read()){if (msdr.HasRows){Console.WriteLine(msdr.GetString(0));}}msdr.Close();mycn.Close();}public static void Main(){ConnectMySql ms = new ConnectMySql();ms.Connect_CoreLab();ms.Connect_Odbc();Connect_Net();}}1、用MySQLDriverCS连接MySQL数据库先下载和安装MySQLDriverCS,地址:/projects/mysqldrivercs/在安装文件夹下面找到MySQLDriver.dll,然后将MySQLDriver.dll添加引用到项目中注:我下载的是版本是MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exeusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Data.Odbc;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using MySQLDriverCS;namespace mysql{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){MySQLConnection conn = null;conn = new MySQLConnection(new MySQLConnectionString("localhost", "inv", "root", "831025").AsString);conn.Open();MySQLCommand commn = new MySQLCommand("set names gb2312", conn);commn.ExecuteNonQuery();string sql = "select * from exchange ";MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);DataSet ds = new DataSet();mda.Fill(ds, "table1");this.dataGrid1.DataSource = ds.Tables["table1"];conn.Close();}}}2、通过ODBC访问mysql数据库:参考:/china/community/Column/63.mspx1. 安装Microsoft :我安装的是mysql-connector-odbc-3.51.22-win32.msi2. 安装MDAC 2.7或者更高版本:我安装的是mdac_typ.exe 2.7简体中文版3. 安装MySQL的ODBC驱动程序:我安装的是odbc_net.msi4. 管理工具-> 数据源ODBC –>配置DSN…5. 解决方案管理中添加引用Microsoft.Data.Odbc.dll(1.0.3300)6. 代码中增加引用using Microsoft.Data.Odbc;using System;using System.Collections.Generic;using ponentModel;using System.Drawing;using System.Linq; //vs2005好像没有这个命名空间,在c#2008下测试自动生成的using System.Text;using System.Windows.Forms;using Microsoft.Data.Odbc;namespace mysql{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +"SERVER=localhost;" +"DATABASE=inv;" +"UID=root;" +"PASSWORD=831025;" +"OPTION=3";OdbcConnection MyConnection = new OdbcConnection(MyConString);MyConnection.Open();Console.WriteLine("\n success, connected successfully !\n");string query = "insert into test values( ''hello'', ''lucas'', ''liu'')";OdbcCommand cmd = new OdbcCommand(query, MyConnection);//处理异常:插入重复记录有异常try{cmd.ExecuteNonQuery();}catch(Exception ex){Console.WriteLine("record duplicate.");}finally{cmd.Dispose();}//***********************用read方法读数据到textbox********************** string tmp1 = null;string tmp2 = null;string tmp3 = null;query = "select * from test ";OdbcCommand cmd2 = new OdbcCommand(query, MyConnection);OdbcDataReader reader = cmd2.ExecuteReader();while (reader.Read()){tmp1 = reader[0].ToString();tmp2 = reader[1].ToString();tmp3 = reader[2].ToString();}this.textBox1.Text = tmp1 + " " + tmp2 + " " + tmp3;*///************************用datagridview控件显示数据表************************** string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +"SERVER=localhost;" +"DATABASE=inv;" +"UID=root;" +"PASSWORD=831025;" +"OPTION=3";OdbcConnection MyConnection = new OdbcConnection(MyConString); OdbcDataAdapter oda = new OdbcDataAdapter("select * from customer ", MyConnection); DataSet ds = new DataSet();oda.Fill(ds, "employee");this.dataGridView1.DataSource = ds.Tables["employee"];*/MyConnection.Close();}}}文章出处:/course/4_webprogram//asp_netshl/2008429/112011.html 1、用MySQLDriverCS连接MySQL数据库先下载和安装MySQLDriverCS,地址:/projects/mysqldrivercs/在安装文件夹下面找到MySQLDriver.dll,然后将MySQLDriver.dll添加引用到项目中注:我下载的是版本是MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exeusing System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Data.Odbc;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using MySQLDriverCS;namespace mysql{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){MySQLConnection conn = null;conn = new MySQLConnection(new MySQLConnectionString("localhost", "inv", "root", "831025").AsString);conn.Open();MySQLCommand commn = new MySQLCommand("set names gb2312", conn);commn.ExecuteNonQuery();string sql = "select * from exchange ";MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);DataSet ds = new DataSet();mda.Fill(ds, "table1");this.dataGrid1.DataSource = ds.Tables["table1"];conn.Close();}}}2、通过ODBC访问mysql数据库:参考:/china/community/Column/63.mspx1. 安装Microsoft :我安装的是mysql-connector-odbc-3.51.22-win32.msi2. 安装MDAC 2.7或者更高版本:我安装的是mdac_typ.exe 2.7简体中文版3. 安装MySQL的ODBC驱动程序:我安装的是odbc_net.msi4. 管理工具-> 数据源ODBC –>配置DSN…5. 解决方案管理中添加引用Microsoft.Data.Odbc.dll(1.0.3300)6. 代码中增加引用using Microsoft.Data.Odbc;using System;using System.Collections.Generic;using ponentModel;using System.Drawing;using System.Linq; //vs2005好像没有这个命名空间,在c#2008下测试自动生成的using System.Text;using System.Windows.Forms;using Microsoft.Data.Odbc;namespace mysql{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +"SERVER=localhost;" +"DATABASE=inv;" +"UID=root;" +"PASSWORD=831025;" +"OPTION=3";OdbcConnection MyConnection = new OdbcConnection(MyConString);MyConnection.Open();Console.WriteLine("\n success, connected successfully !\n");string query = "insert into test values( ''hello'', ''lucas'', ''liu'')";OdbcCommand cmd = new OdbcCommand(query, MyConnection);//处理异常:插入重复记录有异常try{cmd.ExecuteNonQuery();}catch(Exception ex){Console.WriteLine("record duplicate.");}finally{cmd.Dispose();}//***********************用read方法读数据到textbox**********************string tmp1 = null;string tmp2 = null;string tmp3 = null;query = "select * from test ";OdbcCommand cmd2 = new OdbcCommand(query, MyConnection);OdbcDataReader reader = cmd2.ExecuteReader();while (reader.Read()){tmp1 = reader[0].ToString();tmp2 = reader[1].ToString();tmp3 = reader[2].ToString();}this.textBox1.Text = tmp1 + " " + tmp2 + " " + tmp3;*///************************用datagridview控件显示数据表************************** string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +"SERVER=localhost;" +"DATABASE=inv;" +"UID=root;" +"PASSWORD=831025;" +"OPTION=3";OdbcConnection MyConnection = new OdbcConnection(MyConString); OdbcDataAdapter oda = new OdbcDataAdapter("select * from customer ", MyConnection); DataSet ds = new DataSet();oda.Fill(ds, "employee");this.dataGridView1.DataSource = ds.Tables["employee"];*/MyConnection.Close();}}}文章出处:/course/4_webprogram//asp_netshl/2008429/112011.html1.连接:1.安装Microsoft 。
MySQL是怎样运行的
MySQL是怎样运⾏的MySQL是怎样运⾏的1 初识MySQL1.1MySQL的C/S架构根据我以往的经验,MySQL会启动⼀个服务,我们可以通过“客户端”链接到服务,进⾏对数据库的操作。
所以,它的执⾏步骤通常是这样的:1. 启动MySQL服务器程序2. 启动MySQL客户端程序,连接到服务器程序3. 在客户端程序输⼊命令语句,并将其作为请求(Http请求)发送给服务器程序。
服务器程序在收到这些请求后,根据请求的内容来操作具体的数据,并将结果返回给客户端。
代表MySQL服务器程序的进程称为MySQL数据库实例1.1.3 启动初次启动需要安装,使⽤mysqld --initialize-insecure ,使⽤console选项可以将安装结果打印在控制台上如果需要安装服务,使⽤mysqld --install即可2 启动选项和系统变量2.1 启动选项和配置⽂件2.1.1 命令⾏启动选项在命令⾏中指定启动选项的格式如下:mysqld --skip-networking其中要注意的是启动选项全称前要使⽤--,单词连接可以使⽤-或者_,且单词和值之间不要有空格2.1.2 配置⽂件中使⽤选项mysql程序在启动时会在多个路径下寻找配置⽂件,不过我们⼀般只需要在basedir,也就是mysql安装⽬录下防⽌⼀份名为my.ini或者f的配置⽂件即可3 字符集和⽐较规则3.1 字符集介绍……3.2 MySQL中⽀持的字符集和⽐较规则3.2.1 utf8和utf8mb4由于4字节字符实在不常⽤(emoji等),所以MySQL默认了两个容易混淆的概念:utf8mb3:精简的UTF-8字符集,只能表⽰1~3字节的字符,在MySQL中,utf-8==utf8mb3utf8mb4:完整的UTF-8字符集能表⽰1~4字节的字符所以,如果要在MySQL(版本低于8.0)中存储emoji,要修改MySQL字符集;版本⼤于8.0后,已经对字符集进⾏了优化,可以utf-8得以真正地等于utf-8,并且作为数据库的默认字符集出现3.2.2 查看字符集通过在控制台输⼊show charset即可查看当前⽀持的字符集,可以看到这些字符集都为⼩写形式出现,值得我们注意的就是最后⼀列的Maxlen,即最⼤字符长度+----------+-----------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+-----------------------------+---------------------+--------+| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 || dec8 | DEC West European | dec8_swedish_ci | 1 || cp850 | DOS West European | cp850_general_ci | 1 || hp8 | HP West European | hp8_english_ci | 1 || koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 || latin1 | cp1252 West European | latin1_swedish_ci | 1 || latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 || swe7 | 7bit Swedish | swe7_swedish_ci | 1 || ascii | US ASCII | ascii_general_ci | 1 || ujis | EUC-JP Japanese | ujis_japanese_ci | 3 || sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 || hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 || tis620 | TIS620 Thai | tis620_thai_ci | 1 || euckr | EUC-KR Korean | euckr_korean_ci | 2 || koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 || gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 || greek | ISO 8859-7 Greek | greek_general_ci | 1 || cp1250 | Windows Central European | cp1250_general_ci | 1 || gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 || latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 || armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 || utf8 | UTF-8 Unicode | utf8_general_ci | 3 || ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 || cp866 | DOS Russian | cp866_general_ci | 1 || keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 || macce | Mac Central European | macce_general_ci | 1 || macroman | Mac West European | macroman_general_ci | 1 || cp852 | DOS Central European | cp852_general_ci | 1 || latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 || utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 || cp1251 | Windows Cyrillic | cp1251_general_ci | 1 || utf16 | UTF-16 Unicode | utf16_general_ci | 4 || utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 || cp1256 | Windows Arabic | cp1256_general_ci | 1 || cp1257 | Windows Baltic | cp1257_general_ci | 1 || utf32 | UTF-32 Unicode | utf32_general_ci | 4 || binary | Binary pseudo charset | binary | 1 || geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 || cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 || eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |+----------+-----------------------------+---------------------+--------+40 rows in set (0.00 sec)3.2.3 查看⽐较规则使⽤show collation命令查看⽐较规则,但所有字符集的⽐较规则太多,我们只查看utf8的,show collation where charset like 'utf8';,结果如下,期中Default为Yes的就是该字符集默认的⽐较规则+--------------------------+---------+-----+---------+----------+---------+| Collation | Charset | Id | Default | Compiled | Sortlen |+--------------------------+---------+-----+---------+----------+---------+| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 || utf8_bin | utf8 | 83 | | Yes | 1 || utf8_unicode_ci | utf8 | 192 | | Yes | 8 || utf8_icelandic_ci | utf8 | 193 | | Yes | 8 || utf8_latvian_ci | utf8 | 194 | | Yes | 8 || utf8_romanian_ci | utf8 | 195 | | Yes | 8 || utf8_slovenian_ci | utf8 | 196 | | Yes | 8 || utf8_polish_ci | utf8 | 197 | | Yes | 8 || utf8_estonian_ci | utf8 | 198 | | Yes | 8 || utf8_spanish_ci | utf8 | 199 | | Yes | 8 || utf8_swedish_ci | utf8 | 200 | | Yes | 8 || utf8_turkish_ci | utf8 | 201 | | Yes | 8 || utf8_czech_ci | utf8 | 202 | | Yes | 8 || utf8_danish_ci | utf8 | 203 | | Yes | 8 || utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 || utf8_slovak_ci | utf8 | 205 | | Yes | 8 || utf8_spanish2_ci | utf8 | 206 | | Yes | 8 || utf8_roman_ci | utf8 | 207 | | Yes | 8 || utf8_persian_ci | utf8 | 208 | | Yes | 8 || utf8_esperanto_ci | utf8 | 209 | | Yes | 8 || utf8_hungarian_ci | utf8 | 210 | | Yes | 8 || utf8_sinhala_ci | utf8 | 211 | | Yes | 8 || utf8_german2_ci | utf8 | 212 | | Yes | 8 || utf8_croatian_ci | utf8 | 213 | | Yes | 8 || utf8_unicode_520_ci | utf8 | 214 | | Yes | 8 || utf8_vietnamese_ci | utf8 | 215 | | Yes | 8 || utf8_general_mysql500_ci | utf8 | 223 | | Yes | 1 |+--------------------------+---------+-----+---------+----------+---------+27 rows in set (0.00 sec)这其中的规律是:“utf8”前缀:表⽰规则所属的字符集紧跟前缀:表⽰规则所应⽤的语⾔“ci”后缀:表⽰是否区分语⾔中的重⾳、⼤⼩写等后缀全称含义_ai accent insensitive不区分重⾳_as accent sensitive区分重⾳_ci case insensitive不区分⼤⼩写_cs case sensitive区分⼤⼩写_bin binary以⼆进制⽅式⽐较⽰例:utf8_spanish_ci表⽰以西班⽛语⽐较,且不区分⼤⼩写3.3 字符集和⽐较规则的应⽤3.3.1 各级别的字符集和⽐较规则MySQL存在4个级别的字符集和⽐较规则,分别是服务器级别、数据库级别、表级别、列级别1 服务器级别MySQL通过两个系统变量来管理服务器级别的字符集和⽐较规则,通过show variables like 'character_set_server\collation_server';查看这两个变量系统标量描述character_set_server服务器级别的字符集collation_server服务器级别的字符集⽐较规则可以通过在ini配置⽂件中配置这两个变量来制定具体的字符集和规则,2 数据库级别在创建和修改数据库时就可以制定该数据库的字符集和⽐较规则:create database demo01character set gb2312collate gb2312_chinese_ci;在创建完数据并选择中数据库后,可以使⽤show variables like 'character_set_database';show variables like 'collation_data%';来查看这两个变量,但是,我们只能通过这两个变量来查看数据库级别的字符集和⽐较规则,⽽不能通过这两个变量进⾏修改3 表级别指定⽅式相同:create table t(col varchar(10))character set utf8collate utf8_general_ci;既然是表的属性,⾃然可以通过alter关键字进⾏修改alter table tcharacter set gbkcollate gbk_chinese_ci;alter table tcharacter set utf8collate utf8_general_ci;4 列级别制定⽅式:create table t(col varchar(10) character set utf8 collate utf8_general_ci);修改⽅式:alter table t modify col varchar(10) character set gbk collate gbk_chinese_ci;要注意的是,在修改字符集和⽐较规则的时候,如果两个字符集的字符不能相互表⽰就会引起错误,⽐如将ASCⅡ的转换成utf85 仅修改字符集或者⽐较规则只修改字符集,⽐较规则会⾃动变成字符集默认的⽐较规则只修改⽐较规则,字符集会变成与之对应的了解字符集和⽐较规则后,我们就能够清楚地判断⼀条记录的实际⼤⼩了3.3.2 客户端和服务器通信过程中使⽤的字符集对于同⼀个字符,如果编码和解码使⽤的字符集不⼀样就会产⽣不必要的误解,因此我们需要⼀套字符集转换的系统:即按照utf8字符集对0xE68891进⾏解码,随后按照GBK字符集编码成0XCED2,这样就完成了汉字“我”跨字符集的转换。
cmd命令窗口连接mysql的命令大全
cmd命令窗⼝连接mysql的命令⼤全连接:mysql -h主机地址 -u⽤户名-p⽤户密码(注:u与root可以不⽤加空格,其它也⼀样)断开:exit (回车)创建授权:grant select on 数据库.* to ⽤户名@登录主机 identified by \"密码\"修改密码:mysqladmin -u⽤户名 -p旧密码 password 新密码删除授权: revoke select,insert,update,delete om *.* fromtest2@localhost;显⽰数据库:show databases;显⽰数据表:show tables;显⽰表结构:describe 表名;创建库:create database 库名;删除库:drop database 库名;使⽤库:use 库名;创建表:create table 表名 (字段设定列表);删除表:drop table 表名;修改表:alter table t1 rename t2查询表:select * from 表名;清空表:delete from 表名;备份表: mysqlbinmysqldump -h(ip) -uroot -p(password) databasenametablename > tablename.sql恢复表: mysqlbinmysql -h(ip) -uroot -p(password) databasenametablename < tablename.sql(操作前先把原来表删除)增加列:ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,ADDINDEX (c);修改列:ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b cCHAR(20);删除列:ALTER TABLE t2 DROP COLUMN c;备份数据库:mysql\bin\mysqldump -h(ip) -uroot -p(password) databasename> database.sql恢复数据库:mysql\bin\mysql -h(ip) -uroot -p(password) databasename< database.sql复制数据库:mysql\bin\mysqldump --all-databases >all-databases.sql修复数据库:mysqlcheck -A -o -uroot -p54safer⽂本数据导⼊: load data local infile \"⽂件名\" into table 表名;数据导⼊导出:mysql\bin\mysqlimport database tables.txt第⼀招、mysql服务的启动和停⽌net stop mysqlnet start mysql第⼆招、登陆mysql语法如下: mysql -u⽤户名-p⽤户密码键⼊命令mysql -uroot -p,回车后提⽰你输⼊密码,输⼊12345,然后回车即可进⼊到mysql中了,mysql的提⽰符是:mysql>注意,如果是连接到另外的机器上,则需要加⼊⼀个参数-h机器IP第三招、增加新⽤户格式:grant 权限 on 数据库.* to ⽤户名@登录主机 identified by "密码"如,增加⼀个⽤户user1密码为password1,让其可以在本机上登录,并对所有数据库有查询、插⼊、修改、删除的权限。
MySQL的跨库查询与连接
MySQL的跨库查询与连接数据库是一个存储和管理数据的系统,而MySQL则是其中最受欢迎的关系型数据库管理系统之一。
在实际的开发过程中,经常会遇到需要在多个数据库之间进行查询和连接的情况。
本文将探讨MySQL的跨库查询与连接的实现方法及其使用场景。
一、跨库查询跨库查询是指在两个或多个不同的数据库之间进行数据查询的操作。
在MySQL中,可以使用关键字“USE”和“JOIN”来实现跨库查询。
1. 使用USE关键字USE关键字用于指定当前会话所使用的数据库。
通过在查询语句之前使用USE 关键字,可以切换当前会话的数据库,从而实现跨库查询。
例如,假设有两个数据库db1和db2,分别存储了不同的数据表。
要查询db1中的表table1和db2中的表table2,可以按以下步骤进行操作:1) 打开MySQL客户端,并登录到MySQL服务器。
2) 使用USE关键字切换到db1数据库:USE db1;3) 在db1中查询table1表的数据:SELECT * FROM table1;4) 使用USE关键字切换到db2数据库:USE db2;5) 在db2中查询table2表的数据:SELECT * FROM table2;通过这种方式,可以在当前会话中实现对不同数据库的查询。
但需要注意的是,使用USE关键字切换数据库后,在查询其他数据库的表时,无需再指定数据库的名称。
2. 使用JOIN关键字JOIN关键字用于在两个或多个表之间建立关联,并实现跨库查询。
在MySQL 中,常用的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。
首先,假设有两个数据库db1和db2,分别存储了不同的数据表。
要查询db1中的表table1和db2中的表table2,并根据某个字段建立关联,可以按以下步骤进行操作:1) 打开MySQL客户端,并登录到MySQL服务器。
2) 在查询语句中使用JOIN关键字,并指定要查询的字段:SELECT db1.table1.field1, db2.table2.field2FROM db1.table1JOIN db2.table2ON db1.table1.field3 = db2.table2.field4;通过JOIN关键字可以实现多个数据表之间的连接查询,从而实现跨库查询的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL返回被一个更新操作修改的行数,但其他许多数据库将仅仅因为记录匹配where字句而把它视为已经更新过。
通常对于mysql_函数,返回值0表示没有行受到影响,正数则是实际的结果,一般表示受语句影响的行数。
my_ulonglong mysql_num_rows(MYSQL_RES *result);
现在得到来数据,可使用mysql_fetch_row来处理它,也可以使用mysql_data_seek,mysql_row_seek和mysql_row_tell在数据集中来回移动。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
这样找到位置就可以编译了:
gcc -I/usr/include/mysql connect1.c -lmysqlclient -L/usr/lib/mysql -o connect1
编译成功,于是就可以运行了,在此之前,确保mysqld已经在运行了:
sudo /etc/rc.d/init.d/mysqld restart
}
然后编译:
#gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1
connect1.c:4:19: 错误:mysql.h:没有那个文件或目录
提示是没有找到mysql.h,产生这个错误的原因是没有mysql.h文件,它在mysql-devel包中,需要安装这个包:
#include <stdlib.h>
#include <stdio.h>
#include "mysql.h"
int main (int argc, char *argv[])
{
MYSQL *conn_ptr;
conn_ptr=mysql_init(NULL); //连接初始化
b)select语句的使用:
select语句是SQL语句中使用最频繁的操作。
一个完整的提取数据过程应该包含以下四个步骤:执行查询,提取数据,处理数据,清理。
使用mysql_query来发送SQL语句,使用mysql_store_result或者mysql_use_result来提取数据。然后使用 mysql_fetch_row调用来处理数据,最后,使用mysql_free_result来释放查询占用的内存资源。
#在以上这一段编译这个connect1.c的文件过程了,出过两次错误,分别记录如上,看起来 #
#解决的办法很简单,但是自己当时确实是很迷茫,不知什么原因,网上搜索的结果大都不得#
#要领,最终还是靠自己静下心来看gcc的手册,man gcc才解决。 #
if(!conn_ptr){
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
}
conn_ptr = mysql_real_connect(conn_ptr, "localhost", "moldao","newpassword","moldao_test", 0, NULL, 0); //建立实际连接
# gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld 返回 1
链接库有问题,找不到mysqlclient链接库,man gcc发现可以在后面用-L指定搜索位置,于是我们先找到mysqlclient库的位置:
}
else {
printf("Connection failed\n");
}
mysql_close(conn_ptr); //关闭连接
return EXIT_SUCCESS;
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);
locate *mysqlclient*
/usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.so
/usr/lib/mysql/libmysqlclient.so.15
/usr/lib/mysql/libmysqlclient.so.15.0.0
此函数从上面得到的结果集中提取一行,并把它放在一个行结构中。当数据用完或者出错时返回NULL。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
此函数允许结构集当前指针的跳转,设置会被下一个mysql_fetch_row操作返回的行。offset是行号,在0到总行数减1的范围内。传递0,则返回初始位置。
如果无法连接,返回NULL。完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。
void mysql_close(MYSQL * connection);
现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。内容如下:
数据库的主要操作包括select, insert, update, delete四种。
a)sql语句的嵌入:
执行SQL语句的主要API函数是:
int mysql_query(MYSQL *connection, const char * query)
初始化成功后,则使用mysql_real_connect来创建一个实际的连接:
MYSQL * mysql_real_connect(MYSQL * connection,
const char * server_host,
const char * sql_user_name,
unsigned int flags
);
connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机,可以使用 localhost来优化连接类型。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认 设置。
然后执行生成的可执行文件:
./connect1
Connection success
打印出了我们设计好了的连接成功的打印信息。这样就通过C语言进入了MySQL数据库了。
##########################################
#P.S. man gcc真长。 要冷静! #
##########################################
2. 操作数据库
进入数据库中之后,就可以开始对数据库进行读写操作了。
c连接mysql.txt有没有人像我一样在听到某些歌的时候会忽然想到自己的往事_______如果我能回到从前,我会选择不认识你。不是我后悔,是我不能面对没有你的结局。使用C语言操作MySQL数据库
1.连接数据库。
从C语言连接MySQL数据库包含两个步骤:
a)初始化连接句柄结构;
b)实际创建连接。
首先使用mysql_init初始化连接句柄:
MYSQL * mysql_init (MYSQL *);
通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,他将被重新初始化。如果出错,返回NULL。
mysql_use_result和mysql_store_result都是返回一个指向结果集结构(result set structure)的指针,如果失败则返回NULL。区别在于store将查询到的数据库中的结果直接放在这个结果集中,而use则不直接将最终数据库 的数据结果放在这个结果集中。store其实就是把数据直接读到本地内存中,因此它比较适合数据量较小的查询。use则类似于一种流的操作,并不是一次就 返回所有的结果。因此,对于这个结果集,必须反复调用mysql_fetch_row直到提取所有的数据。
sudo yum install mysql-devel -y
然后找一下:
#locate mysql.h
/usr/include/mysql/mysql.h
这样就可以找到这个头文件了(-I的含义是在指定位置搜索头文件,参见man gcc)。再次尝试编译:
1)一次获取所有的数据:
MYSQL_RES *mysql_store_result(MYSQL *connection);
在成功调用mysql_query之后使用此函数,将立即保存在客户端中返回的所有数据,并将指向此结果集的指针返回。如果失败则返回NULL。
成功之后,可以用mysql_num_rows来得到返回记录的数目,一般应该是个正数,若没有返回行匹配,则返回0.
//参数分别为:初始化的连接句柄指针,主机名(或者IP),用户名,密码,数据库名,0,NULL,0)后面三个参数在默认安装mysql>的情况下不用改
if(conn_ptr){
printf("Connection success\n");
const char * sql_password,
Байду номын сангаас const char *db_name,