
Mysql C API编程步骤
1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:
#include <WinSock2h> // 进行网络编程需要winsock2h
#include <mysqlh>
#pragma comment(lib, “libmysqllib”)
2、创建MYSQL变量。如:
MYSQL mysql;
3、初始化MYSQL变量。
mysql_init(&mysql);
4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:
MYSQL STDCALL 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 long clientflag);
参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。
5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:
int STDCALL mysql_real_query(MYSQL mysql, const char q, unsigned long length);
参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。
查询成功则该函数返回0。
6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。
两个函数的原型分别为:
MYSQL_RES STDCALL mysql_store_result(MYSQL mysql);
MYSQL_RES STDCALL mysql_use_result(MYSQL mysql);
这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。
7、调用mysql_fetch_row函数读取结果集数据。
上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES result);
参数result就是mysql_store_result或mysql_use_result的返回值。
该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。
8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:
void STDCALL mysql_free_result(MYSQL_RES result);
9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:
void STDCALL mysql_close(MYSQL sock);
这主要取决于您对那个开发软件的熟悉程度和接受程度更高些。一般来说,VB、Delphi作为面向对象化的开发平台,比较容易上手些。C++难度稍大。再就是使用asp语言来写一个B/S小程序,不过连接数据库或者读写数据库没有前面说的面向对象化开发平台方便,前者直接可以采用控件完成。如果用net,虽然也是面向对象化 *** 作,但是难度比较大。另外,直接用access也可以设计一些小程序,您可以设计程序界面、按钮、下拉框、等,可直接调用数据库,应该说更轻松一些。
不知道我的答复能否给予您一定的帮助!
字符串的连接最好用&符号数据库中的关键字可用[]括起来, 以免发生语法错误, 你这边的错误, 我想是因为tel字符是字符型
exe="insert into guestbook ([name],tel,message) values('" & name & "','" & tel & "','" & message & "')"
1建立数据库database,建立数据表student。
字段:
sid 学号 文本
sname 姓名 文本
ssex 性别 文本(2字节)
saddress 地址 文本
stel 电话 文本
2类代码
/
使用:
设置数据库路径、sql语句、最大返回行数,使用getHTMLTable()返回html表格形式的字符串
executeSQL(String,String)执行SQL语句返回一个对象,请自己根据SQL语句转换成具体对象
//////////////////////////////////////////////////////
import javasql;
public class ListTableArea{
private String sqlString;
private String databasePath;
private int top;
private Statement stat=null; //连接数据库
public void setSQL(String SQL){
sqlString=SQL;
}
public void setDatabasePath(String path){
databasePath=path;
}
public void setTop(int frontIndex){
top=frontIndex;
}
private void linkDatabase(){
String strurl = "jdbc:odbc:driver={Microsoft Access Driver (mdb)}; DBQ="+databasePath;
try {
ClassforName("sunjdbcodbcJdbcOdbcDriver");
Connection conn = DriverManagergetConnection(strurl,"","");
stat = conncreateStatement(ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_UPDATABLE);
}catch(Exception e){
Systemoutprintln(e);
}
}
public Object executeSQL(String sqlSentence,String database){
Object r=null;
try{
setSQL(sqlSentence);
setDatabasePath(database);
linkDatabase();
r=statexecuteQuery(sqlString);
}catch(Exception e){
Systemoutprintln(e);
}
return r;
}
public void closeStatement(){
try{
statclose();
}catch(Exception e){
Systemoutprintln(e);
}
}
public String getHTMLTable(){
Statement sta=null;
String htmlTable=null;
Connection conn=null;
int width=100;
String strurl = "jdbc:odbc:driver={Microsoft Access Driver (mdb)}; DBQ="+databasePath;
try {
ClassforName("sunjdbcodbcJdbcOdbcDriver");
conn = DriverManagergetConnection(strurl,"","");
sta = conncreateStatement(ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_UPDATABLE);
ResultSet rs=staexecuteQuery(sqlString);
ResultSetMetaData rsmd=rsgetMetaData();
int cols=rsmdgetColumnCount();
htmlTable=htmlTable+"<TABLE ALIGN=center BORDER=1>";
htmlTable=htmlTable+"<TR>";
for(int i=1;i<=cols;i++)
{
width=1200/cols;
htmlTable=htmlTable+"<TD ALIGN=center WIDTH="+width+">"+rsmdgetColumnLabel(i)+"</TD>";
}
htmlTable=htmlTable+"</TR>";
while(rsnext())
{
htmlTable=htmlTable+"<TR>";
for(int j=1;j<=cols;j++)
{
Object obj=(Object)rsgetObject(j);
if(obj==null) htmlTable=htmlTable+"<TD HEIGHT=20 WIDTH=100></TD>";
else
{
String area=objtoString();
if(arealength()>20) {area=areasubstring(0,17);area=area+"";}
htmlTable=htmlTable+"<TD ALIGN=center WIDTH="+width+">"+area+"</TD>";
}
}
htmlTable=htmlTable+"</TR>";
}
htmlTable=htmlTable+"</TABLE>";
connclose();
staclose();
} catch(Exception e){
Systemoutprintln(egetMessage());
}
return htmlTable;
}
}
3编写一个main()
例如:
public class App{
static public void main(String[] srge){
ListTableArea lta=new ListTableArea();
ltasetTop(10);
Object o=ltaexecuteSQL("INSERT INTO student(sid,sname,ssex,saddress,stel) VALUES('20060102\',\'曾凯\',\'男\',\'四川资中\',\'13888888888\')","D:\databasemdb");
//参数1是SQL语句,参数2是数据库路径
//插入了一条记录
int i=(int)o;
if(i==1) Systemoutprintln("插入成功1条");
}
}
不知你这句话的确切含义是什么,只能估摸着回答了
数据库本身是一种软件,一种对数据进行系统管理的软件写这种软件的人多半都是大型软件公司在很多人的参与之下,写成的,一个人或者一般计算机水平的人,要写这样的软件,只能是蛤蟆想吃天鹅蛋
向数据库写数据,要比写数据库简单,但也要一些功夫,首先你得选用一种数据库软件,现在流行的有几种,桌面数据库:ACCESS,可以作服务器的大型数据库容量为TB级的:SQL SERVER,还有一种超大型的是奥月科,中文意思是甲骨文,安装文件就是10G当然还有其它的
有数据库后,接下就是在数据库软件中建立一个你所需要的数据库
建立好数据库后,接下来就是建立数据表,建表的规则很多,它与一般的纸张表格类似,但又有区别,数据表要求一事一表,也就数据表的列尽可能少,不要搞的很多
表建立完之后,就可以直接向表中填写数据了,但这种方法一般都没有人用,都是用专门的应用程序来读写数据表中的数据至于这些应用程序用什么语言来写,与数据库无关现在流行的程序开发工具都可以用来编写数据库 *** 作程序
你在写数据的时候要看你数据库允许的锁定级别是什么,每种数据库都不一样,如果是最高级别的锁你在写数据的时候其他事务是无法对他进行写 *** 作的,如果是读就会发生 (1)读事务读取的数据不同(2)发生对未提交的更新的依赖。
则读事务在读数据的时候需要申请读锁。建议是你不要通过扫数据库来查找更新,把数据放到内存中通过缓冲区进行交换那样更好
以上就是关于c语言读取mysql库中的数据的程序头文件怎么设置全部的内容,包括:c语言读取mysql库中的数据的程序头文件怎么设置、我想编一个简单的用到数据库的小程序,请问用哪个软件来编比较好一些啊、ASp数据库读写问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)