当前位置:首页 » 操作系统 » c数据库操作类

c数据库操作类

发布时间: 2023-10-30 04:59:22

㈠ 如何在Linux下用C/C++语言操作数据库sqlite3

1.SQLite数据库特点(1)SQLite数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它。(2)事务的处理是原子的,一致的,独立的,可持久化的(ACID),即使在系统崩溃和掉电后。(3)SQLite数据库通过独占性与共享锁来实现事务的独立处理。(4)一个单独的跨平台的磁盘文件就能够存储一个数据库。(5)能支持2TB级的数据。(6)自包含,无外部依赖性。(7)支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等数据类码凳型。迟迹旅(8)SQLite数据库没有用户帐户的概念。数据库的权限仅依赖于文件系统。2.SQLite数据库的基本操作(1)建立数据库sqlite3data.sqlite3在当前目录下建立了名为data.sqlite3的数据库。(2)建立数据表createtablecall_list(idINTEGERPRIMARYKEY,typeNUMERIC,telnumNUMERIC,bttimeTEXT,tcountNUMERIC,charge_rateNUMERIC,charge_sumNUMERIC);建立了名为call_list的数据表,有7个字段,分别为id,type,telnum,bttime,tcount,charge_sum.charge_rate.(3)向数据表中插入数据insertintocall_listvalues($num,1,2,'new',4,5,6);(4)查询数据表中的数据select*fromcall_list;(5)修改call_list表中的数据updatecall_listsetid=00001000whereid=10001;(6)删除表中的数据记录deletefromcall_listwhereid=1000;(7)SQlite中的其它常用命令.tables-列出所有的数据库中的数据表.schematablename-列出指定数据表的结构.quit-离开数据库(8)SQLite数据库的导入与导出a.将data.sqlite数据库的数据全部导出:sqlite3data.sqlite>.outputdd.sql>.mp这样,数据就保存在dd.sql的文件中,注意这个文件不是数据库,而是SQL语句。然后再把这些数据导入到另外一个数据库data1.sqlite数据库中。sqlite3data1.sqlite>.readdd.sql这样,数据就从data.sqlite数据库复制到data1.sqlite数据库中去了。b.将数据表中的数据导出到a.txt中去.outputa.txt//输州告出重定向到a.txtselect*fromcall_list;c.将导出的表中的数据导入到另一个数据库的新建的表中去如:当从data.sqlite中的call_list表中导出了数据,再导入到另外一个数据库表call中去。首先建立表call.然后.importa.txtcall即可。3.c语言操作Sqlite数据库API:intsqlite3_open(constchar*filename,sqlite3**ppdb);第一个参数用来指定数据库文件名。第二个参数是一个数据库标识符指针。如果打开数据库成功,则返回0,否则返回一个错误代码。intsqlite3_close(sqlite3*);传递的参数是数据库标识符指针用来关闭数据库,操作成功是返回0,否则返回一个错误代码。intsqlite3_errcode(sqlite3*db);constchar*sqlite3_errmsg(sqlite3*db);constchar*sqlite3_errmsg16(sqlite3*db);这三个函数都是返回错误信息,第一个函数返回的是最近调用数据库接口的错误代码,第二,第三个函数是返回最近调用数据库接口的错误信息。第二个函数返回的错误信息是用UTF-8编码的,第三个函数返回的错误信息是用UTF-16编码的。intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);这个函数非常重用,是用来执行SQLite数据库的SQL语句的。第一个参数是sqlite数据库标识符指针。第二个参数是要执行的SQL语句。第三个参数是一个回调函数,在执行查询操作时用到,其它的操作可以传空值即NULL。第四个参数是传递给回调函数第一个参数的实参。第五个参数是一个错误信息。回调函数:intcallback(void*,intargc,char**argv,char**cname);第一个参数是从sqlite3_exec传递过来的参数,可以为任意的类型。第二个参数是查询的列数。第三个参数是查询结果集的值。第四个参数是列名。intsqlite3_get_table(sqlite3*db,constchar*sql,char***result,int*row,int*col,char**errmsg);这个函数主要是用来查询的。第一个参数是数据库描述符指针第二个参数是SQL语句。第三个参数是查询的结果集。第四个参数是结果集中的行数。第五个参数是结果集中的列数。第六个参数是错误信息。它查询出的行数是从字段名开始的。即第0行是字段名。实例:/**本例主要实现用Sqlite的回调函数进行查询intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,errmsg);第一个参数是数据库标识符第二个参数是要执行的sql命令第三个参数是回调函数第四个参数是回调函数的第一个参数第五个参数是用于指示错误信息其中回调函数的形式:int_sql_callback(void*arg,intargc,char**argv,char**cname);第二个参数指示结果集中的列数第三个参数是保存结果集的字符串第四个参数是结果集中的列名**/#include#include#include#include#include#includeint_call_back(void*arg,intargc,char**argv,char**cname);intmain(){intres;constchar*dbfile="data.sqlite1";char*errmsg=NULL;sqlite3*db;res=sqlite3_open(dbfile,&db);if(res!=0){perror("数据库打开失败");exit(EXIT_FAILURE);}//创建一张数据表constchar*sqlcreate="createtablecall_list(idINTEGERPRIMARYKEY,typeNUMERIC,telnumNUMERIC,bttimeTEXT,tcountNUMERIC,charge_rateNUMERIC,charge_sumNUMERIC)";res=sqlite3_exec(db,sqlcreate,NULL,NULL,&errmsg);if(res!=0){perror("建立数据表失败");exit(EXIT_FAILURE);}//插入100000条数据intnum=0;structtimevaltv;gettimeofday(&tv,NULL);longold=tv.tv_sec;while(num<100000){constchar*sqlinsert="insertintocall_listvalues($num,1,2,'new',4,5,6)";res=sqlite3_exec(db,sqlinsert,NULL,NULL,&errmsg);//插入时不需要用到回调函数if(res!=0){perror("插入失败");exit(EXIT_FAILURE);}num++;}gettimeofday(&tv,NULL);printf("插入100000条数据的时间为:%d秒/n",(tv.tv_sec-old));//更新constchar*sqlupdate="updatecall_listsetid=00001000whereid=10001";res=sqlite3_exec(db,sqlupdate,NULL,NULL,&errmsg);if(res!=0){perror("更新数据失败");exit(EXIT_FAILURE);}//删除constchar*sqldelete="deletefromcall_listwhereid=1000";res=sqlite3_exec(db,sqldelete,NULL,NULL,&errmsg);if(res!=0){perror("删除数据失败");exit(EXIT_FAILURE);}//查询constchar*sqlquery="select*fromcall_list";res=sqlite3_exec(db,sqlquery,&_call_back,NULL,&errmsg);if(res!=0){printf("%s/n",errmsg);perror("执行失败/n");exit(EXIT_FAILURE);}res=sqlite3_close(db);if(res!=0){perror("数据库关闭失败");exit(EXIT_FAILURE);}exit(EXIT_SUCCESS);}int_call_back(void*arg,intargc,char**argv,char**cname){inti;//二重指针可以看成指针数组for(i=0;i

㈡ 实例讲解如何使用C++操作MySQL数据库类

/* * project: * 通用模块 ( 用 c++ 处理 mysql 数据库类,像ADO ) * * description: * * 通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作 * 包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库,使 * 用方便 * * ( the end of this file have one sample, * welcom to use... ) * * * file:zlb_mysql.h * * author: @ zlb * * time:2005-12-12 * * * --*/ #ifndef ZLB_MYSQL_H #define ZLB_MYSQL_H #include "mysql.h" #include <iostream> #include <vector> #include <string> using namespace std; namespace zlb_mysql{ /* * 字段操作 */ class Field { public : /* 字段名称 */ vector<string> m_name; /* 字段类型 */ vector<enum_field_types> m_type; public : Field(); ~Field(); /* 是否是数字 */ bool IsNum(int num); /* 是否是数字 */ bool IsNum(string num); /* 是否是日期 */ bool IsDate(int num); /* 是否是日期 */ bool IsDate(string num); /* 是否是字符 */ bool IsChar(int num); /* 是否是字符 */ bool IsChar(string num); /* 是否为二进制数据 */ bool IsBlob(int num); /* 是否为二进制数据 */ bool IsBlob(string num); /* 得到指定字段的序号 */ int GetField_NO(string field_name); }; /* * 1 单条记录 * 2 [int ]操作 [""]操作 */ class Record { public: /* 结果集 */ vector<string> m_rs; /* 字段信息 占用4字节的内存 当记录数很大是回产生性能问题 */ Field *m_field; public : Record(){}; Record(Field* m_f); ~Record(); void SetData(string value); /* [""]操作 */ string operator[](string s); string operator[](int num); /* null值判断 */ bool IsNull(int num); bool IsNull(string s); /* 用 value tab value 的形式 返回结果 */ string GetTabText(); }; /* * 1 记录集合 * 2 [int ]操作 [""]操作 * 3 表结构操作 * 4 数据的插入修改 */ class RecordSet { private : /* 记录集 */ vector<Record> m_s; /* 游标位置*/ unsigned long pos; /* 记录数 */ int m_recordcount; /* 字段数 */ int m_field_num; /* 字段信息 */ Field m_field; MYSQL_RES * res ; MYSQL_FIELD * fd ; MYSQL_ROW row; MYSQL* m_Data ; public : RecordSet(); RecordSet(MYSQL *hSQL); ~RecordSet(); /* 处理返回多行的查询,返回影响的行数 */ int ExecuteSQL(const char *SQL); /* 得到记录数目 */ int GetRecordCount(); /* 得到字段数目 */ int GetFieldNum(); /* 向下移动游标 */ long MoveNext(); /* 移动游标 */ long Move(long length); /* 移动游标到开始位置 */ bool MoveFirst(); /* 移动游标到结束位置 */ bool MoveLast(); /* 获取当前游标位置 */ unsigned long GetCurrentPos()const; /* 获取当前游标的对应字段数据 */ bool GetCurrentFieldValue(const char * sFieldName,char *sValue); bool GetCurrentFieldValue(const int iFieldNum,char *sValue); /* 获取游标的对应字段数据 */ bool GetFieldValue(long index,const char * sFieldName,char *sValue); bool GetFieldValue(long index,int iFieldNum,char *sValue); /* 是否到达游标尾部 */ bool IsEof(); /* 返回字段 */ Field* GetField(); /* 返回字段名 */ const char * GetFieldName(int iNum); /* 返回字段类型 */ const int GetFieldType(char * sName); const int GetFieldType(int iNum); /* 返回指定序号的记录 */ Record operator[](int num); }; /* * 1 负责数据库的连接关闭 * 2 执行sql 语句(不返回结果) * 3 处理事务 */ class DataBase { public : DataBase(); ~DataBase(); private : /* msyql 连接句柄 */ MYSQL* m_Data; public : /* 返回句柄 */ MYSQL * GetMysql(); /* 连接数据库 */ int Connect(string host, string user, string passwd, string db, unsigned int port, unsigned long client_flag); /* 关闭数据库连接 */ void DisConnect(); /* 执行非返回结果查询 */ int ExecQuery(string sql); /* 测试mysql服务器是否存活 */ int Ping(); /* 关闭mysql 服务器 */ int ShutDown(); /* 主要功能:重新启动mysql 服务器 */ int ReBoot(); /* * 说明:事务支持InnoDB or BDB表类型 */ /* 主要功能:开始事务 */ int Start_Transaction(); /* 主要功能:提交事务 */ int Commit(); /* 主要功能:回滚事务 */ int Rollback(); /* 得到客户信息 */ const char * Get_client_info(); /* 主要功能:得到客户版本信息 */ const unsigned long Get_client_version(); /* 主要功能:得到主机信息 */ const char * Get_host_info(); /* 主要功能:得到服务器信息 */ const char * Get_server_info(); /*主要功能:得到服务器版本信息*/ const unsigned long Get_server_version(); /*主要功能:得到 当前连接的默认字符集*/ const char * Get_character_set_name(); /* 主要功能返回单值查询 */ char * ExecQueryGetSingValue(string sql); /* 得到系统时间 */ const char * GetSysTime(); /* 建立新数据库 */ int Create_db(string name); /* 删除制定的数据库*/ int Drop_db(string name); }; }; #endif //ZLB_MYSQL_H /* * project: * 通用模块 ( 用 c++ 处理 mysql 数据库类,像ADO ) * * description: * * 通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作 * 包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库,使 * 用方便 * * ( the end of this file have one sample, * welcom to use... ) * * * file:zlb_mysql.cpp * * author: @ zlb * * time:2005-12-12 * * * --*/ #include "stdafx.h" #include "zlb_mysql.h" namespace zlb_mysql{ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 字段操作 */ Field::Field(){} Field::~Field(){} /* * 是否是数字 */ bool Field::IsNum(int num) { if(IS_NUM(m_type[num])) return true; else return false; } /* * 是否是数字 */ bool Field::IsNum(string num) { if(IS_NUM(m_type[GetField_NO(num)])) return true; else return false; } /* * 是否是日期 */ bool Field::IsDate(int num) { if( FIELD_TYPE_DATE == m_type[num] || FIELD_TYPE_DATETIME == m_type[num] ) return true; else return false; } /* 是否是日期 */ bool Field::IsDate(string num) { int temp; temp=GetField_NO(num); if(FIELD_TYPE_DATE == m_type[temp] || FIELD_TYPE_DATETIME == m_type[temp] ) return true; else return false; } /* * 是否是字符 */ bool Field::IsChar(int num) { if(m_type[num]==FIELD_TYPE_STRING || m_type[num]==FIELD_TYPE_VAR_STRING || m_type[num]==FIELD_TYPE_CHAR ) return true; else return false; } /* * 是否是字符 */ bool Field::IsChar(string num) { int temp; temp=this->GetField_NO (num); if(m_type[temp]==FIELD_TYPE_STRING || m_type[temp]==FIELD_TYPE_VAR_STRING || m_type[temp]==FIELD_TYPE_CHAR ) return true; else return false; } /* * 是否为二进制数据 */ bool Field::IsBlob(int num) { if(IS_BLOB(m_type[num])) return true; else return false; } /* * 是否为二进制数据 */ bool Field::IsBlob(string num) { if(IS_BLOB(m_type[GetField_NO(num)])) return true; else return false; } /* * 得到指定字段的序号 */ int Field::GetField_NO(string field_name) { for(unsigned int i=0;i<m_name.size ();i++) { if(!m_name[i].compare (field_name)) return i; } return -1; } /*-----------------------------------------------------*/ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 单条记录 * 2 [int ]操作 [""]操作 */ Record::Record(Field * m_f) { m_field =m_f; } Record::~Record(){}; void Record::SetData(string value) { m_rs.push_back (value); } /* [""]操作 */ string Record::operator[](string s) { return m_rs[m_field->GetField_NO(s)]; } string Record::operator[](int num) { return m_rs[num]; } /* null值判断 */ bool Record::IsNull(int num) { if("" == m_rs[num].c_str ()) return true; else return false; } bool Record::IsNull(string s) { if("" == m_rs[m_field->GetField_NO(s)].c_str()) return true; else return false; } /* 主要-功能:用 value tab value 的形式 返回结果 */ string Record::GetTabText() { string temp; for(unsigned int i=0 ;i<m_rs.size();i++) { temp+=m_rs[i]; if(i<m_rs.size ()-1) temp+="\t"; } return temp; } /*-----------------------------------------------------*/ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 记录集合 * 2 [int ]操作 [""]操作 * 3 表结构操作 * 4 数据的插入修改 */ RecordSet::RecordSet() { res = NULL; row = NULL; pos = 0; } RecordSet::RecordSet(MYSQL *hSQL) { res = NULL; row = NULL; m_Data = hSQL; pos = 0; } RecordSet::~RecordSet() { } /* * 处理返回多行的查询,返回影响的行数 * 成功返回行数,失败返回-1 */ int RecordSet::ExecuteSQL(const char *SQL) { if ( !mysql_real_query(m_Data,SQL,strlen(SQL))) { //保存查询结果 res = mysql_store_result(m_Data ); //得到记录数量 m_recordcount = (int)mysql_num_rows(res) ; //得到字段数量 m_field_num = mysql_num_fields(res) ; for (int x = 0 ; fd = mysql_fetch_field(res); x++) { m_field.m_name.push_back(fd->name); m_field.m_type.push_back(fd->type); } //保存所有数据 while (row = mysql_fetch_row(res)) { Record temp(&m_field); for (int k = 0 ; k < m_field_num ; k++ ) { if(row[k]==NULL||(!strlen(row[k]))) { temp.SetData (""); } else { temp.SetData(row[k]); } } //添加新记录 m_s.push_back (temp); } mysql_free_result(res ) ; return m_s.size(); } return -1; } /* * 向下移动游标 * 返回移动后的游标位置 */ long RecordSet::MoveNext() { return (++pos); } /* 移动游标 */ long RecordSet::Move(long length) { int l = pos + length; if(l<0) { pos = 0; return 0; }else { if(l >= m_s.size()) { pos = m_s.size()-1; return pos; }else { pos = l; return pos; } } } /* 移动游标到开始位置 */ bool RecordSet::MoveFirst() { pos = 0; return true; } /* 移动游标到结束位置 */ bool RecordSet::MoveLast() { pos = m_s.size()-1; return true; } /* 获取当前游标位置 */ unsigned long RecordSet::GetCurrentPos()const { return pos; } /* 获取当前游标的对应字段数据 */ bool RecordSet::GetCurrentFieldValue(const char * sFieldName, char *sValue) { strcpy(sValue,m_s[pos][sFieldName].c_str()); return true; } bool RecordSet::GetCurrentFieldValue(const int iFieldNum,char *sValue) { strcpy(sValue,m_s[pos][iFieldNum].c_str()); return true; } /* 获取游标的对应字段数据 */ bool RecordSet::GetFieldValue(long index,const char * sFieldName, char *sValue) { strcpy(sValue,m_s[index][sFieldName].c_str()); return true; } bool RecordSet::GetFieldValue(long index,int iFieldNum,char *sValue) { strcpy(sValue,m_s[index][iFieldNum].c_str()); return true; } /* 是否到达游标尾部 */ bool RecordSet::IsEof() { return (pos == m_s.size())?true:false; } /* * 得到记录数目 */ int RecordSet::GetRecordCount() { return m_recordcount; } /* * 得到字段数目 */ int RecordSet::GetFieldNum() { return m_field_num; } /* * 返回字段 */ Field * RecordSet::GetField() { return &m_field; } /* 返回字段名 */ const char * RecordSet::GetFieldName(int iNum) { return m_field.m_name.at(iNum).c_str(); } /* 返回字段类型 */ const int RecordSet::GetFieldType(char * sName) { int i = m_field.GetField_NO(sName); return m_field.m_type.at(i); } const int RecordSet::GetFieldType(int iNum) { return m_field.m_type.at(iNum); } /* * 返回指定序号的记录 */ Record RecordSet::operator[](int num) { return m_s[num]; } /* -------------------------------------------------- */ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 负责数据库的连接关闭 * 2 执行sql 语句(不返回结果) * 3 处理事务 */ DataBase::DataBase() { m_Data = NULL; } DataBase::~DataBase() { if(NULL != m_Data) { DisConnect(); } } /* 返回句柄 */ MYSQL * DataBase::GetMysql() { return m_Data; } /* * 主要功能:连接数据库 * 参数说明: * 1 host 主机ip地址或者时主机名称 * 2 user 用户名 * 3 passwd 密码 * 4 db 欲连接的数据库名称 * 5 port 端口号 * 6 uinx 嵌套字 * 7 client_flag 客户连接参数 * 返回值: 0成功 -1 失败 */ int DataBase::Connect(string host, string user, string passwd, string db, unsigned int port, unsigned long client_flag) { if((m_Data = mysql_init(NULL)) && mysql_real_connect( m_Data, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(),port , NULL, client_flag)) { //选择制定的数据库失败 if ( mysql_select_db( m_Data, db.c_str () ) < 0 ) { mysql_close( m_Data) ; return -1 ; } } else { //初始化mysql结构失败 mysql_close( m_Data ); return -1 ; } //成功 return 0; } /* * 关闭数据库连接 */ void DataBase::DisConnect( ) { mysql_close(m_Data) ; } /* * 主要功能: 执行非返回结果查询 * 参数:sql 待执行的查询语句 * 返回值; n为成功 表示受到影响的行数 -1 为执行失败 */ int DataBase::ExecQuery(string sql) { if(!mysql_real_query(m_Data,sql.c_str (),(unsigned long)sql.length()) ) { //得到受影响的行数 return (int)mysql_affected_rows(m_Data) ; } else { //执行查询失败 return -1; } } /* * 主要功能:测试mysql服务器是否存活 * 返回值:0 表示成功 -1 失败 */ int DataBase::Ping() { if(!mysql_ping(m_Data)) return 0; else return -1; } /* * 主要功能:关闭mysql 服务器 * 返回值;0成功 -1 失败 */ int DataBase::ShutDown() { if(!mysql_shutdown(m_Data,SHUTDOWN_DEFAULT)) return 0; else return -1; } /* * 主要功能:重新启动mysql 服务器 * 返回值;0表示成功 -1 表示失败 */ int DataBase::ReBoot() { if(!mysql_reload(m_Data)) return 0; else return -1; } /* * 说明:事务支持InnoDB or BDB表类型 */ /* * 主要功能:开始事务 */ int DataBase::Start_Transaction() { if(!mysql_real_query(m_Data, "START TRANSACTION" , (unsigned long)strlen("START TRANSACTION") )) { return 0; } else //执行查询失败 return -1; } /* * 主要功能:提交事务 * 返回值:0 表示成功 -1 表示失败 */ int DataBase::Commit() { if(!mysql_real_query( m_Data, "COMMIT", (unsigned long)strlen("COMMIT") ) ) { return 0; } else //执行查询失败 return -1; } /* * 主要功能:回滚事务 * 返回值:0 表示成功 -1 表示失败 */ int DataBase::Rollback() { if(!mysql_real_query(m_Data, "ROLLBACK", (unsigned long)strlen("ROLLBACK") ) ) return 0; else //执行查询失败 return -1; } /* 得到客户信息 */ const char * DataBase::Get_client_info() { return mysql_get_client_info(); } /*主要功能:得到客户版本信息*/ const unsigned long DataBase::Get_client_version() { return mysql_get_client_version(); } /* 主要功能:得到主机信息 */ const char * DataBase::Get_host_info() { return mysql_get_host_info(m_Data); } /* 主要功能:得到服务器信息 */ const char * DataBase::Get_server_info() { return mysql_get_server_info( m_Data ); } /* 主要功能:得到服务器版本信息 */ const unsigned long DataBase::Get_server_version() { return mysql_get_server_version(m_Data); } /*主要功能:得到 当前连接的默认字符集*/ const char * DataBase::Get_character_set_name() { return mysql_character_set_name(m_Data); } /* * 主要功能返回单值查询 */ char * DataBase::ExecQueryGetSingValue(string sql) { MYSQL_RES * res; MYSQL_ROW row ; char *p = NULL; if(!mysql_real_query( m_Data, sql.c_str(),(unsigned long)sql.length())) { //保存查询结果 res = mysql_store_result( m_Data ) ; row = mysql_fetch_row( res ) ; p = ((row[0]==NULL)||(!strlen(row[0])))?"-1":row[0]; mysql_free_result( res ) ; } else //执行查询失败 p = "-1"; return p; } /* * 得到系统时间 */ const char * DataBase::GetSysTime() { return ExecQueryGetSingValue("select now()"); } /* * 主要功能:建立新数据库 * 参数:name 为新数据库的名称 * 返回:0成功 -1 失败 */ int DataBase::Create_db(string name) { string temp ; temp="CREATE DATABASE "; temp+=name; if(!mysql_real_query( m_Data,temp.c_str () , (unsigned long)temp.length ()) ) return 0; else //执行查询失败 return -1; } /* * 主要功能:删除制定的数据库 * 参数:name 为欲删除数据库的名称 * 返回:0成功 -1 失败 */ int DataBase::Drop_db(string name) { string temp ; temp="DROP DATABASE "; temp+=name; if(!mysql_real_query( m_Data,temp.c_str () , (unsigned long)temp.length ()) ) return 0; else //执行查询失败 return -1; } /*-----------------------------------------------------*/ }; /* * 使用例子 */ #include "zlb_mysql.h" using namespace std; void main() { zlb_mysql::DataBase zlb; //连接数据库 if(-1 == zlb.Connect("localhost"/*本地数据库,可以是远程 ip*/, "root"/*用户名*/,"apple"/*密码*/, "test"/*数据库名*/, 0,0/*两个标志,mysql文档有说明,一般为0*/)) { std::cout<<"connect failed "<<std::endl; } else { std::cout<<"connect success"<<std::endl; } //通过返回的数据库句柄,建立记录急,你可以通过返回的这个句柄建立多个记录急 zlb_mysql::RecordSet rs(zlb.GetMysql()); rs.ExecuteSQL("select * from testtable");//这个语句大家都知道是什么意思了 cout<<rs.GetRecordCount()/*返回的总的记录数*/<<endl; cout<<rs.GetFieldNum()/*返回的总的字段数*/<<endl; cout<<rs[0].GetTabText()/*返回第一条记录,你也可以rs[1].GetTabText() 如果你有多条记录, */ <<endl; /*实现遍列,也可以使用后面的遍列方式*/ for(int i=0;i<rs.GetRecordCount();++i) { for(int j =0;j<rs.GetFieldNum();++j) cout<<rs[i][j]; cout<<endl; } zlb_mysql::Field *fd = rs.GetField();/*你可以通过这样的方式,获取字段的信息*/ cout<<fd->GetField_NO("Password")/*返回我表里的 Password 字段的位置,不 是记录的位置*/ <<endl; cout<<rs[0]["Password"]<<endl;/*输出第0行第Password列的值*/ cout<<rs[0][fd->GetField_NO("Password")]<<endl;/*你也可以这样*/ cout<<rs.GetFieldName(0)/*获取字段的名字*/<<endl; cout<<rs.GetFieldType("UserName")/*获取字段的类型,是mysql里定义的*/<<endl; cout<<rs.GetCurrentPos()/*获取当前记录的位置*/<<endl; char s[50]; rs.GetCurrentFieldValue(1,s);/*获取当前记录对应字段的值*/ cout<<s<<endl; cout<<rs.Move(1)<<endl;/*移动游标,正数往前 负数往后*/ cout<<rs.GetCurrentPos()<<endl; rs.GetCurrentFieldValue(1,s); cout<<s<<endl; rs.MoveFirst();/*移动游标到最前*/ while(!rs.IsEof()/*判断是否到达游标尾,实现遍列*/) { rs.GetCurrentFieldValue("UserName",s); cout<<s<<"\t"; rs.GetCurrentFieldValue("Password",s); cout<<s<<"\t
"; rs.MoveNext(); } rs.GetFieldValue(0,"UserName",s);/*获取指定行 的记录值*/ cout<<s<<"\t"; rs.GetFieldValue(0,"Password",s); cout<<s<<"\t
"; }

㈢ c语言操作数据库

都是可以的

C/C++与数据库交互,像 mssql / mysql / oracle 等,一般都有成熟的第三方库,这些库里面无非就是封装了与数据库通讯的方式和通讯协议
搜一下你要用的数据库相关的 API 文档,会说得很清楚

任何文件都是二进制数据,关键是数据存储的组织方式
通用扩展名的文件,像gif/doc/jpg/wav,格式都是固定的
读出数据来以后按照一定的规律去解析就能可以正确解读
这个规律,就是文件存储格式,也可以搜到相关的文档

㈣ C#的数据库操作

下面的介绍和参考资料希望能多少帮助你点

SQL SERVER 和ACCESS/excel的数据导入导出
常规的数据导入导出:
使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:
1)在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
2)Services(数据转换服务),然后选择 czdImport Data(导入数据)。
3)在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
4)在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
5)在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
6)在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。

Transact-SQL语句进行导入导出:
1.在SQL SERVER里查询access数据:

Select * FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:DB.mdb";User ID=Admin;Password='')...表名

2.将access导入SQL server
在SQL SERVER 里运行:
Select * INTO newtable FROM OPENDATASOURCE (''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:DB.mdb";User ID=Admin;Password='' )...表名

3.将SQL SERVER表里的数据插入到Access表中
在SQL SERVER 里运行:
insert into OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source=" c:DB.mdb";User ID=Admin;Password='')...表名 (列名1,列名2) select 列名1,列名2 from sql表

实例:
insert into OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''C:db.mdb'';''admin'';'''', Test) select id,name from Test

Insert INTO OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''c:trade.mdb''; ''admin''; '''', 表名) Select * FROM sqltablename

二、SQL SERVER 和Excel的数据导入导出

1、在SQL SERVER里查询Excel数据:

Select * FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'')...[Sheet1$]

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
Select * FROM OpenDataSource ( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'')...xactions

2、将Excel的数据导入SQL server :
Select * into newtable FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'')...[Sheet1$]

实例:
Select * into newtable FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'')...xactions

3、将SQL SERVER中查询到的数据导成一个Excel文件
T-SQL代码:
EXEC master..xp_cmdshell ''bcp 库名.dbo.表名out c:Temp.xls -c -q -S"servername" -U"sa" -P""''
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式

实例:EXEC master..xp_cmdshell ''bcp saletesttmp.dbo.CusAccount out c:temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"''

EXEC master..xp_cmdshell ''bcp "Select au_fname, au_lname FROM pubs..authors orDER BY au_lname" queryout C: authors.xls -c -Sservername -Usa -Ppassword''

在VB6中应用ADO导出Excel文件代码:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell ''bcp "Select col1, col2 FROM 库名.dbo.表名" queryout E:DT.xls -c -Sservername -Usa -Ppassword''"

4、在SQL SERVER里往Excel插入数据:

insert into OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="c:Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'')...table1 (A1,A2,A3) values (1,2,3)

T-SQL代码:
Insert INTO
OPENDATASOURCE(''Microsoft.JET.OLEDB.4.0'',''Extended Properties=Excel 8.0;Data source=C:traininginventur.xls'')...[Filiale1$] (bestand, prokt) VALUES (20, ''Test'')

㈤ C#中如何定义数据库操作类,并调用

以下是我编写的一个操作access数据库的类,其他数据库可以参考修改,原理差不多的。希望对你有帮助。

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Configuration;
using System.Data;

namespace AutoEmailSender
{
/// <summary>
/// 数据库交互类
/// </summary>
public class DB
{
/// <summary>
/// 获得数据库连接
/// </summary>
/// <returns></returns>
public static OleDbConnection GetDBConnection()
{
return new OleDbConnection(ConfigurationManager.AppSettings["ConnectString"]);
}

/// <summary>
/// 查询结果集
/// </summary>
/// <param name="sql">执行语句</param>
/// <returns>返回一个DataTable对象</returns>
public static DataTable ExecuteDataTable(string sql)
{
using (OleDbConnection con = GetDBConnection())
{
OleDbCommand cmd = new OleDbCommand(sql, con);
return ExecuteDataTable(cmd);
}
}

/// <summary>
/// 查询结果集
/// </summary>
/// <param name="cmd">执行语句的OleDbCommand命令</param>
/// <returns>返回一个DataTable对象</returns>
public static DataTable ExecuteDataTable(OleDbCommand cmd)
{
DataSet ds = new DataSet();
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{
try
{
da.Fill(ds);
}
catch (Exception e)
{
throw e;
}
}
if (ds.Tables.Count > 0)
{
ds.Tables[0].DefaultView.RowStateFilter = DataViewRowState.Unchanged | DataViewRowState.Added | DataViewRowState.ModifiedCurrent | DataViewRowState.Deleted;
return ds.Tables[0];
}
else
return null;
}

/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns>返回结果集中第一行的第一列的object值</returns>
public static object ExecuteScalar(string sql)
{
using (OleDbConnection con = GetDBConnection())
{
OleDbCommand cmd = new OleDbCommand(sql, con);
return ExecuteScalar(cmd);
}
}

/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
/// </summary>
/// <param name="cmd">查询命令</param>
/// <returns>返回结果集中第一行的第一列的object值</returns>
public static object ExecuteScalar(OleDbCommand cmd)
{
try
{
cmd.Connection.Open();
object obj = cmd.ExecuteScalar();
cmd.Connection.Close();
return obj;
}
catch (Exception error)
{
cmd.Connection.Close();
throw error;
}
}

/// <summary>
/// 更新数据集
/// </summary>
/// <param name="dt">要更新的数据集</param>
/// <param name="insertCmd">插入SQL语句</param>
/// <param name="updateCmd">更新SQL语句</param>
/// <param name="deleteCmd">删除SQL语句</param>
/// <returns></returns>
public static int UpdateDataSet(DataTable dt, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)
{
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.InsertCommand = insertCmd;
da.UpdateCommand = updateCmd;
da.DeleteCommand = deleteCmd;
//da.UpdateBatchSize = 0; //UpdateBatchSize:指定可在一次批处理中执行的命令的数量,在Access不被支持。0:批大小没有限制。1:禁用批量更新。>1:更改是使用 UpdateBatchSize 操作的批处理一次性发送的。
da.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
da.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
da.DeleteCommand.UpdatedRowSource = UpdateRowSource.None;
try
{
int row = da.Update(dt);
return row;
}
catch (Exception e)
{
throw e;
}
}
}

/// <summary>
/// 返回一个查询语句执行结果的表结构
/// </summary>
/// <param name="sql">查询语句,不支持复杂SQL</param>
/// <returns></returns>
public static DataTable GetTableSchema(string sql)
{
sql = sql.ToUpper();
DataTable dt = null;
using (OleDbConnection con = GetDBConnection())
{
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
using (OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly | CommandBehavior.CloseConnection))
{
dt = dr.GetSchemaTable();
}
}
return dt;
}

/// <summary>
/// 根据输入的查询语句自动生成插入,更新,删除命令
/// </summary>
/// <param name="sql">查询语句</param>
/// <param name="insertCmd">插入命令</param>
/// <param name="updateCmd">更新命令</param>
/// <param name="deleteCmd">删除命令</param>
public static void GenerateUpdateSQL(string sql, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)
{
sql = sql.ToUpper();
DataTable dt = GetTableSchema(sql);
string tableName = dt.Rows[0]["BaseTableName"].ToString();
List<OleDbParameter> updatePrimarykeys = new List<OleDbParameter>();//主键参数集合
List<OleDbParameter> deletePrimarykeys = new List<OleDbParameter>();//主键参数集合,因为不能同时被OleDbCommand个命令引用,所以多申明一个
List<OleDbParameter> insertFields = new List<OleDbParameter>();//字段参数集合
List<OleDbParameter> updateFields = new List<OleDbParameter>();//字段参数集合
string columns = string.Empty, values = "", set = "", where = "";
foreach (DataRow dr in dt.Rows)
{
if (dr["IsAutoIncrement"].ToString().Equals("False"))
{
insertFields.Add(new OleDbParameter("@" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
dr["BaseColumnName"].ToString()));
updateFields.Add(new OleDbParameter("@" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
dr["BaseColumnName"].ToString()));

if (!string.IsNullOrEmpty(columns))
columns += ",";
columns += dr["BaseColumnName"].ToString();
if (!string.IsNullOrEmpty(values))
values += ",";
values += "@" + dr["BaseColumnName"].ToString();
if (!string.IsNullOrEmpty(set))
set += ",";
set += dr["BaseColumnName"].ToString() + "=@" + dr["BaseColumnName"].ToString();
}
if (dr["IsKey"].ToString().Equals("True"))
{
updatePrimarykeys.Add(new OleDbParameter("@OLD_" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
ParameterDirection.Input,
Convert.ToBoolean(dr["AllowDBNull"]),
Convert.ToByte(dr["NumericScale"]),
Convert.ToByte(dr["NumericPrecision"]),
dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));
deletePrimarykeys.Add(new OleDbParameter("@OLD_" + dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
ParameterDirection.Input,
Convert.ToBoolean(dr["AllowDBNull"]),
Convert.ToByte(dr["NumericScale"]),
Convert.ToByte(dr["NumericPrecision"]),
dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));
if (!string.IsNullOrEmpty(where))
where += " and ";
where += dr["BaseColumnName"].ToString() + "=@OLD_" + dr["BaseColumnName"].ToString();
}
}

insertCmd.CommandText = string.Format("insert into {0} ({1}) values ({2})", tableName, columns, values);
updateCmd.CommandText = string.Format("update {0} set {1} where {2}", tableName, set, where);
deleteCmd.CommandText = string.Format("delete from {0} where {1}", tableName, where);
insertCmd.Connection = GetDBConnection();
updateCmd.Connection = GetDBConnection();
deleteCmd.Connection = GetDBConnection();
foreach (OleDbParameter pa in insertFields)
{
insertCmd.Parameters.Add(pa);
}
foreach (OleDbParameter pa in updateFields)
{
updateCmd.Parameters.Add(pa);
}
foreach (OleDbParameter pa in updatePrimarykeys)
{
updateCmd.Parameters.Add(pa);
}
foreach (OleDbParameter pa in deletePrimarykeys)
{
deleteCmd.Parameters.Add(pa);
}
}
}
}

热点内容
新建文件夹2免费手机 发布:2024-05-18 12:56:13 浏览:363
自己在家搭建服务器有水冷散热吗 发布:2024-05-18 12:47:27 浏览:648
旧版的安卓手机怎么使用微信 发布:2024-05-18 12:46:36 浏览:466
我的世界服务器开多久 发布:2024-05-18 12:45:32 浏览:592
vba获取网页表格数据库数据库数据库 发布:2024-05-18 12:23:24 浏览:699
腾讯服务器为什么卡顿 发布:2024-05-18 12:02:12 浏览:305
如何知道密码锁有没有nfc 发布:2024-05-18 11:58:09 浏览:961
单片机c语言模块化编程 发布:2024-05-18 11:53:16 浏览:644
win7xp共享打印机拒绝访问 发布:2024-05-18 11:51:00 浏览:847
zkeys金属服务器怎么使用 发布:2024-05-18 11:49:31 浏览:581