⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.h

📁 mysql数据库操作BLOB型数据的范例
💻 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 + -