📄 database.h
字号:
/*字段名参数要与查询时书写的字段名一样,如果是select * from ...则与数据库字段名一致*/
#include <stdio.h>#include <stdlib.h>#include "mysql.h"
#include "io.h"
#include "fcntl.h"
#undef NULL#undef EOF#define NULL (0)#define EOF (-1)#define M_UPDATE 0#define M_DELETE 1#define FieldValue(n) m_field_values[n]#define FieldName(n) m_fields[n].nameMYSQL mysql;int mysql_valid;MYSQL_ROW m_row;MYSQL_RES *m_result;
long *m_row_length;int m_result_valid;MYSQL_FIELD *m_fields;int m_add_flag, m_update_flag;char m_current_query[4096];int m_EOF;
/*标志GetField与GetFieldN有无结果可取 1有 0无*/void CloseRecordset ();
//释放数据缓冲区内存
int CloseDatabase (), FieldCount ();
long m_row_tell,AbsolutePosition (),_m_update_or_delete (char *table, int flag,char *msg),RecordCount ();char *parse_query (char *lookfor);/*
int OpenDatabase (char *db, char *host, char *name, char *pass,char *msg)
打开数据库msg为错误信息
-1 失败
1 成功*/int OpenDatabase (char *db, char *host, char *name, char *pass,char *msg) //char *db, *host, *name, *pass;{ if (mysql_valid == TRUE) CloseDatabase ();
//初始化mysql结构变量(申请数据库连接缓冲区内存)
mysql_init(&mysql);
//连接后的初始命令0 成功 非0失败???
mysql_valid = m_result_valid = FALSE;
if (!mysql_real_connect(&mysql,host,name,pass,db,0,NULL,0))
{
strcpy(msg,mysql_error(&mysql));
//释放数据库连接缓冲区内存
mysql_close (&mysql);
return (-1);
}
mysql_valid = TRUE; m_EOF = 0; return (1);}
/*输入SQL查询语句(单个),把结果放到MYSQL_RES结构,
并取出第一条到结果数组,query语句最长4096
-1:失败
1:成功
*/intOpenRecordset (char *query,char *msg){ char * stemp;
if (m_result_valid == TRUE) { CloseRecordset (); m_result_valid = FALSE; } m_row_tell = 0;
if (strlen(query)<4096) strncpy (m_current_query, query, 4096); if (mysql_real_query (&mysql, query,strlen(query))) { strcpy(msg,mysql_error(&mysql)); return (-1); }/* free (p); */ if (!(m_result = mysql_store_result (&mysql))) {/*如果查询成功,零。如果出现一个错误或者是insert语句,非零。
*/
stemp = (char *)malloc(sizeof(char) * (200));
strcpy(stemp,mysql_error(&mysql)); if (strlen(stemp)>0)
{
strcpy(msg,stemp);
free(stemp);
stemp= NULL;
return (-1);
}
else //insert语句
{
//m_result_valid = TRUE; 不要,因为没有结果集
free(stemp);
stemp= NULL;
return (1);}
}
m_row = mysql_fetch_row (m_result); if (!(m_fields = mysql_fetch_fields (m_result))) { strcpy(msg,mysql_error(&mysql)); return (-1); }
m_row_length = mysql_fetch_lengths(m_result);
m_result_valid = TRUE; m_EOF = 1; if (RecordCount () == 0) m_EOF = 0; return (1);}/*
1:成功
-1:失败
0:已经在最后面了
*/intMoveNext (){ long rc; rc = RecordCount (); if (m_result_valid == FALSE) return (-1); m_row_tell++; if (m_row_tell >= rc) { m_row_tell = rc - 1; m_EOF = 0; return (0); } if (!(m_row = mysql_fetch_row (m_result))) return (-1);
m_row_length = mysql_fetch_lengths(m_result); return (1);}/*
1:成功
-1:失败
0:已经在最前面了
*/intMovePrev (){ if (m_result_valid == FALSE) return (-1); m_row_tell--; if (m_row_tell < 0) { m_row_tell = 0; m_EOF = 0; return (0); } mysql_data_seek (m_result, m_row_tell); if (!(m_row = mysql_fetch_row (m_result))) { m_EOF = 0; return (-1); }
m_row_length = mysql_fetch_lengths(m_result); return (1);}/*
1:成功
-1:失败
调用MoveLast ()后不能紧跟调用MoveNext()这样会引起错误
*/intMoveLast (){ if (m_result_valid == FALSE) return (-1); m_row_tell = RecordCount () - 1; mysql_data_seek (m_result, m_row_tell); if (!(m_row = mysql_fetch_row (m_result))) return (-1); m_EOF = 1;
m_row_length = mysql_fetch_lengths(m_result); return (1);}/*
1:成功
-1:失败
调用MoveFirst ()后不能紧跟调用MovePrev()这样会引起错误
*/intMoveFirst (){ if (m_result_valid == FALSE) return (-1); mysql_data_seek (m_result, 0); m_row_tell = 0; if (!(m_row = mysql_fetch_row (m_result))) return (-1); m_EOF = 1;
m_row_length = mysql_fetch_lengths(m_result);
return (1);}/*取当前记录的值(输入字段名)
1:成功
-1:失败
*/int GetField (char *fieldname,char *value,char *msg) //char *fieldname;{ int i, l;// int handle2; if (m_result_valid == FALSE || m_EOF == 0)
{
strcpy(msg,"无数据可取");
return (-1);
}
l = mysql_num_fields (m_result); for (i = 0; i < l; i++) if (strcmp (m_fields[i].name, fieldname) == 0)
{
strcpy(value,m_row[i]);
return (1);
}
strcpy(msg,"没有该字段"); return (-1);}
/*取当前记录的BLOB值(输入字段名)
1:成功
-1:失败
*/
int
GetFieldB (char *fieldname,char *value,char *msg,long slen)
//char *fieldname;
{
int i, l;
//int handle2;
long j;
if (m_result_valid == FALSE || m_EOF == 0)
{
strcpy(msg,"无数据可取");
return (-1);
}
l = mysql_num_fields (m_result);
for (i = 0; i < l; i++)
if (strcmp (m_fields[i].name, fieldname) == 0)
{
slen=m_row_length[i];
for (j = 0;j < slen; j++)
value[j]=m_row[i][j];
/*
handle2=open("d:\\mysql\\write.jpg", O_CREAT | O_WRONLY | O_BINARY );
write(handle2,m_row[i],m_row_length[i]);
printf("%d\n",m_row_length[i]);
close(handle2);
*/
return (1);
}
strcpy(msg,"没有该字段");
return (-1);
}
/*取当前记录的值(输入位置序号0开始)
1:成功
-1:失败
*/intGetFieldN (int n,char *value,char *msg) //int n;{ //int i,
int l; if (m_result_valid == FALSE || m_EOF == 0)
{
strcpy(msg,"无数据可取"); return (-1);
} l = mysql_num_fields (m_result); if (n > -1 && n < l)
{
strcpy(value,m_row[n]);
return (1); }
else
{
strcpy(msg,"位置越界"); return (-1);
}}
/*取当前记录的值(输入位置序号0开始)
1:成功
-1:失败
*/
int
GetFieldNB (int n,char *value,char *msg,long slen)
//int n;
{
//int i,
int l;
long j;
if (m_result_valid == FALSE || m_EOF == 0)
{
strcpy(msg,"无数据可取");
return (-1);
}
l = mysql_num_fields (m_result);
if (n > -1 && n < l)
{
slen=m_row_length[n];
for (j = 0;j < slen; j++)
value[j]=m_row[n][j];
return (1);
}
else
{
strcpy(msg,"位置越界");
return (-1);
}
}
/*释放数据缓冲*/void CloseRecordset (){ if (m_result_valid == TRUE) {//释放内存 mysql_free_result (m_result); } m_result_valid = FALSE;
return;}
/*关闭数据库连接*/int CloseDatabase (){ CloseRecordset (); mysql_close (&mysql); mysql_valid = FALSE;
return 1;}/*返回记录数 -1没有结果集*/long RecordCount (){ if (m_result_valid == FALSE) return (-1); return ((long)mysql_num_rows (m_result));}/*返回字段数 -1没有结果集*/int FieldCount (){ if (m_result_valid == FALSE) return (-1); return (mysql_num_fields (m_result));}
/*与MoveNext().MovePrev ()一起使用,判断是否有记录可取
0无记录可取
1有记录可取*/
int
RecordsetEOF ()
{
return (m_EOF);
}
long AbsolutePosition (){ if (m_result_valid == FALSE) return (-1);/* return (mysql_row_tell (m_result)); */ return (m_row_tell + 1);}int Refresh (char *msg){ CloseRecordset ();
if (strlen(m_current_query) > 0)
{ if (OpenRecordset (m_current_query,msg) < 0)
return (-1);
}
else
{
strcpy(msg,"原查询语句过长不能用Refresh()或无查询语句");
return(-1);
} mysql_data_seek (m_result, m_row_tell);
return 1;}
long escape_string(char *out, char *in, long filelen)
{
return(mysql_real_escape_string(&mysql,out, in, filelen));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -