当前位置:文档之家› 利用MySQL自带的C API函数实现数据库功能调用

利用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 API函数实现的。

3.2 CDatabase类在VC中的应用

第一步建立初始化MySQL对象,并且将其初始化。即定义CDatabase类对象,这样程序就会自动调用构造函数CDatabase(),完成初始化。

构造函数实现如下:

CDatabase::CDatabase ()

{

mysql_init (&mysql);

}

完成初始化只需定义CDatabase类对象,即

CDatabase base;

第二步连接服务器,并连接需要的数据库。即调用ConnectDB(Database_Param *p)函数,结构体Database_Param中存放数据库参数,包括主机名、用户名、密码、数据库名等。该函数如返回TRUE表示连接成功,否则表示失败。

连接函数实现如下:

BOOL CDatabase::ConnectDB(Database_Param *p)

{

if(!mysql_real_connect(&mysql,p->host,p->user,p->password,p->db,p->po rt,p->unix_socket,p->client_flag))

{

OutErrors(); // 输出错误信息

return false;

}

return true;

}

第三步对数据库进行加锁。即调用LockTable(char* TableName,char* PRIORITY),对相应的表TableName完成相应属性PRIORITY的加锁,使程序兼容多线程功能。加锁函数实现如下:

BOOL CDatabase::LockTable(char* TableName,char* PRIORITY)

{

char str[50];

sprintf(str,"LOCK TABLES %s %s",TableName,PRIORITY);

if(mysql_query(&mysql,str))

return false;

return true;

}

第四步完成数据库操作。即根据需要调用UpdateRecord(Data_Param *para)、SelectRecord(Data_Param *para)、InsertRecord(Data_Param *para)、DelRecord(Data_Param *para)等操作。其中的结构体Data_Param中存放数据库操作参数。上述两个结构体的定义在global.h中。 InsertRecord函数实现如下,其它实现方法相似:

BOOL CDatabase::InsertRecord(Data_Param *para)

{

char str[80];

sprintf(str,"insert into %s

values(%s)",para->tab_name,para->insert_val);

if(mysql_query(&mysql,str))

return false;

return true;

}

第五步解锁数据库。即调用UnLockTable(),完成对上述被加锁的表的解锁。解锁函数实现如下:

BOOL CDatabase::UnLockTable()

{

if(mysql_query(&mysql,"UNLOCK TABLES"))

return false;

return true;

}

第六步关闭数据库连接。即调用析构函数~CDatabase(),关闭数据库,并自动释放初始化时定义的CDatabase类对象。析构函数如下:

CDatabase::~CDatabase()

{

if(query)

mysql_free_result(query);

mysql_close(&mysql);

}

注意:在编译程序时,必须加入MySQL的库文件libmySQL.lib。

4 MySQL性能测试

4.1 ODBC API

通过索引读取200万行:528秒

插入35万行: 750秒

4.2 C API

通过索引读取200万行:412秒

插入35万行:435秒

4.3 其它数据库(以MS_SQL为例,WINNT环境)

通过索引读取200万行:1634秒

插入35万行:4012秒

注:以上数据是多次测量的平均值,不可避免一定的误差,仅供参考。

5 结束语

MySQL作为一个免费的SQL数据库,虽然功能不够十分强大,且灵活性较差,但是,已经能够满足一般应用软件的要求,而且MySQL 数据库的开发者也在力求使之更加完善。并且,由MySQL性能测试可以看出,它对数据的处理速度明显快于其它数据库服务器。因此,如果应用软件对数据库的性能要求较高,而同时对数据库操作的功能及灵活性的要求不是很高的话,并且前期投入资金较少时,MySQL数据库服务器不失为一个最佳的选择。

s

脉冲响应函数简析

3-2 脉冲响应函数 对于线性定常系统,其传递函数)(s Φ为 )() ()(s R s C s =Φ 式中)(s R 是输入量的拉氏变换式,)(s C 是输出量的拉氏变换式。 系统输出可以写成)(s Φ与)(s R 的乘积,即 )()()(s R s s C Φ= (3-1) 下面讨论,当初始条件等于零时,系统对单位脉冲输入量的响应。因为单位脉冲函数的拉氏变换等于1,所以系统输出量的拉氏变换恰恰是它的传递函数,即 )()(s s C Φ= (3-2) 由方程(3-2)可见,输出量的拉氏反变换就是系统的脉冲响应函数,用)(t k 表示,即 1 ()[()]k t s -=Φ 脉冲响应函数)(t k ,是在初始条件等于零的情况下,线性系统对单位脉冲输入信号的响应。可见,线性定常系统的传递函数与脉冲响应函数,就系统动态特性来说,二者所包含的信息是相同的。所以,如果以脉冲函数作为系统的输入量,并测出系统的响应,就可以获得有关系统动态特性的全部信息。在具体实践中,与系统的时间常数相比,持续时间短得很多的脉动输入信号就可以看成是脉冲信号。 设脉冲输入信号的幅度为11t ,宽度为1t ,现研究一阶系统对这种脉动信号的响应。如 果输入脉动信号的持续时间t )0(1t t <<,与系统的时间常数T 相比足够小,那么系统的响应将近似于单位脉冲响应。为了确定1t 是否足够小,可以用幅度为12,持续时间(宽度)为 21t 的脉动输入信号来进行试验。如果系统对幅度为11t ,宽度为1t 的脉动输入信号的响应,与系统对幅度为12t ,宽度为21t 的脉动输入信号的响应相比,两者基本上相同,那么1t 就可以认为是足够小了。图3-3(a)表示一阶系统脉动输入信号的响应曲线;图3-3(c)表示一阶系统对脉冲输入信号的响应曲线。应当指出,如果脉动输入信号T t 1.01<(图3-3(b)所示), 则系统的响应将非常接近于系统对单位脉冲信号的响应。 这样,当系统输入为一个任意函数)(t r 时,如图3-4所示。那么输入量)(t r 可以用n 个连续脉冲函数来近似。只要把每一个脉冲函数的响应求出来,然后利用叠加原理,把每个脉冲函数的响应叠加起来,就可得到系统在任意输入函数)(t r 作用下的响应。

常用MySQL语句大全

MySQL服务的配置和使用 修改MySQL管理员的口令:mysqladmin –u root password 密码字符串 如:mysqldmin –u root password 111111 连接MySQL服务器,使用命令:mysql [-h 主机名或IP地址] [-u 用户名] [-p] 如:mysql –u root –p 如已有密码需修改root密码用命令: mysqladmin –u root –p password 新密码字符串 如:mysqladmin –u root –p password 111111 创建数据库格式为:CREATE DATABASE 数据库名称; 如:mysql>create database abc; 默认创建数据库保存在/var/lib/mysql中 查看数据库是 mysql>show abc; 选择数据库是 USE 数据库名称; 如:mysql>use abc; 删除数据库是 DROP DATABASE 数据库名称;如:mysql>drop database abc; 数据库的创建和删除 创建表是CREATE TABLE 表名称(字段1,字段2,…[表级约束]) [TYPE=表类型]; 其中字段(1,2 )格式为:字段名字段类型[字段约束] 如创建一个表student,如下: mysql>create table student ( sno varchar(7) not null, 字段不允许为空 sname varchar (20 )not null, ssex char (1) default …t?, sbirthday date, sdepa char (20), primary key (sno) 表的主键 ); 可用describe命令查看表的结构。 默认表的类型为MYISAM,并在/var/lib/mysql/abc 目录下建立student.frm(表定

c语言连接数据库mysql

下面是C语言连接mysql数据库简单例子: 编译方式: gcc -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ -l mysqlclient select.c -o select 源码: #include #include #include #include "/usr/local/mysql/include/mysql.h" int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "192.168.1.99"; char *user = "test"; char *password = "test_passwd"; char *database = "count"; double tvalue1 = 0.93; char st[123]; time_t s; s = time((time_t*)NULL ); sprintf(st, "%d", s); conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } char sql[1024]="SELECT * FROM money_change WHERE c_datetime <= "; strcat(sql,st); strcat(sql,"-3000 AND c_datetime > "); strcat(sql,st); strcat(sql,"-5000 AND c_type = 0 UNION ALL SELECT * FROM money_change WHERE

常用函数大全

常用函数大全 mysql_affected_rows
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数 mysql_fetch_array —从结果集中取得一行作为关联数组或数字数组或二者兼 有:
mysql_fetch_array($result, MYSQL_NUM) , MYSQL_NUM 可用 MYSQL_BOTH 或
MYSQL_ASSOC 代替,也可以不写,默认为 MYSQL_BOTH
mysql_fetch_row — 从结果集中取得一行作为枚举数组: mysql_fetch_row($result); mysql_fetch_assoc($result)
mysql_fetch_row()从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果 的列储存在一个数组的单元中,偏移量从 0 开始。 依次调用 mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回 FALSE。 mysql_fetch_assoc — 从结果集中取得一行作为关联数组 :
mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它 仅仅返回关联数组。这也是 mysql_fetch_array()起初始的工作方式。如果在关联索引之外还需要数字 索引,用 mysql_fetch_array()。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,要么用 mysql_fetch_row()来取得数字索引或给该列起个别名。参见 mysql_fetch_array() 例子中有关别名说 明。 有一点很重要必须指出,用 mysql_fetch_assoc()并不明显 比用 mysql_fetch_row()慢,而且还提供了 明显更多的值。
mysql_query()
仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,
如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query()在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明 任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

mysql的日期和时间函数

mysql的日期和时间函数 这里是一个使用日期函数的例子。下面的查询选择所有 date_col 值在最后 30 天内的记录。mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; DAYOFWEEK(date) 返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的标准。mysql> SELECT DAYOFWEEK(’1998-02-03’); -> 3 WEEKDAY(date) 返回 date 的星期索引(0 = Monday, 1 = Tuesday, ... 6 = Sunday): mysql> SELECT WEEKDAY(’1998-02-03 22:23:00’); -> 1 mysql> SELECT WEEKDAY(’1997-11-05’); -> 2 DAYOFMONTH(date) 返回 date 是一月中的第几天,范围为 1 到 31: mysql> SELECT DAYOFMONTH(’1998-02-03’); -> 3 DAYOFYEAR(date) 返回 date 是一年中的第几天,范围为 1 到 366: mysql> SELECT DAYOFYEAR(’1998-02-03’); -> 34 MONTH(date) 返回 date 中的月份,范围为 1 到 12: mysql> SELECT MONTH(’1998-02-03’); -> 2 DAYNAME(date) 返回 date 的星期名: mysql> SELECT DAYNAME("1998-02-05"); -> ’Thursday’ MONTHNAME(date) 返回 date 的月份名: mysql> SELECT MONTHNAME("1998-02-05"); -> ’February’ QUARTER(date) 返回 date 在一年中的季度,范围为 1 到 4:

常用函数 类参考

全局函数1、common.func.php 公用函数 获得当前的脚本网址 function GetCurUrl() 返回格林威治标准时间 function MyDate($format='Y-m-d H:i:s',$timest=0) 把全角数字转为半角 function GetAlabNum($fnum) 把含HTML的内容转为纯text function Html2Text($str,$r=0) 把文本转HTML function Text2Html($txt) 输出Ajax头 function AjaxHead() 中文截取2,单字节截取模式 function cn_substr($str,$slen,$startdd=0) 把标准时间转为Unix时间戳 function GetMkTime($dtime) 获得一个0000-00-00 00:00:00 标准格式的时间 function GetDateTimeMk($mktime) 获得一个0000-00-00 标准格式的日期 function GetDateMk($mktime) 获得用户IP function GetIP() 获取拼音以gbk编码为准 function GetPinyin($str,$ishead=0,$isclose=1)

dedecms通用消息提示框 function ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0) 保存一个cookie function PutCookie($key,$value,$kptime=0,$pa="/") 删除一个cookie function DropCookie($key) 获取cookie function GetCookie($key) 获取验证码 function GetCkVdValue() 过滤前台用户输入的文本内容 // $rptype = 0 表示仅替换html标记 // $rptype = 1 表示替换html标记同时去除连续空白字符// $rptype = 2 表示替换html标记同时去除所有空白字符// $rptype = -1 表示仅替换html危险的标记 function HtmlReplace($str,$rptype=0) 获得某文档的所有tag function GetTags($aid) 过滤用于搜索的字符串 function FilterSearch($keyword) 处理禁用HTML但允许换行的内容 function TrimMsg($msg) 获取单篇文档信息 function GetOneArchive($aid)

MySQL常用函数

一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然对数的底)的x次方 FLOOR(x) 返回小于x的最大整数值 GREATEST(x1,x2,...,xn)返回集合中最大的值 LEAST(x1,x2,...,xn) 返回集合中最小的值 LN(x) 返回x的自然对数 LOG(x,y)返回x的以y为底的对数 MOD(x,y) 返回x/y的模(余数) PI()返回pi的值(圆周率) RAND()返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。 ROUND(x,y)返回参数x的四舍五入的有y位小数的值 SIGN(x) 返回代表数字x的符号的值 SQRT(x) 返回一个数的平方根 TRUNCATE(x,y) 返回数字x截短为y位小数的结果 二、聚合函数(常用于GROUP BY从句的SELECT查询中) AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的个数 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的所有值之和 GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果 三、字符串函数 ASCII(char)返回字符的ASCII码值 BIT_LENGTH(str)返回字符串的比特长度 CONCAT(s1,s2...,sn)将s1,s2...,sn连接成字符串 CONCAT_WS(sep,s1,s2...,sn)将s1,s2...,sn连接成字符串,并用sep字符间隔 INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果 FIND_IN_SET(str,list)分析逗号分隔的list列表,如果发现str,返回str在list中的位置LCASE(str)或LOWER(str) 返回将字符串str中所有字符改变为小写后的结果 LEFT(str,x)返回字符串str中最左边的x个字符 LENGTH(s)返回字符串str中的字符数

MySQL加密函数用法

加密函数 a) 函数AES_ENCRYPT(str ,key_str ) , AES_DECRYPT(crypt_str ,key_str ) 函数使用说明:这些函数允许使用官方AES 进行加密和数据加密( 高级加密标准) 算法, 即以前人们所熟知的“Rijndael” 。保密关键字的长度为128 比特,不过你可以通过改变源而将其延长到256 比特。我们选择了128 比特的原因是它的速度要快得多,且对于大多数用途而言这个保密程度已经够用。 b) 函数DECODE(crypt_str ,pass_str ) 函数使用说明:使用pass_str 作为密码,解密加密字符串crypt_str ,crypt_str 应该是由ENCODE() 返回的字符串。 c) 函数ENCODE(str ,pass_str ) 函数使用说明:使用pass_str 作为密码,解密str 。使用DECODE() 解密结果。 d) 函数DES_DECRYPT(crypt_str [,key_str ]) 函数使用说明:使用DES_ENCRYPT() 加密一个字符串。若出现错误,这个函数会返回NULL 。 e) 函数DES_ENCRYPT(str [,(key_num |key_str )]) 函数使用说明:用Triple-DES 算法给出的关键字加密字符串。若出现错误,这个函数会返回NULL 。 f) 函数ENCRYPT(str [,salt ]) 函数使用说明:使用Unix crypt() 系统调用加密str 。salt 参数应为一个至少包含2 个字符的字符串。若没有给出salt 参数,则使用任意值。

mysql数据库常用语句大全

mysql数据库常用语句 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice ’disk’, ’testBack’, ’c:mssql7backupMyNwind_1.dat’ --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明: 删除新表:drop table tabname 6、说明: 增加一个列:Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar 类型的长度。 7、说明: 添加主键:Alter table tabname add primary key(col) 说明: 删除主键:Alter table tabname drop primary key(col) 8、说明: 创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明: 创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围

MySQL函数大全 及用法示例

字符串函数 ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dete'); -> 100 ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。 如果是一个多字节字符,以格式返回((first byte ASCII code) *256+(second byte ASCII code))[*256+third byte ASCII code...] mysql> select ORD('2'); -> 50 CONV(N,from_base,to_base) 对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负数时N作为有符号数否则 作无符号数,CONV以64位点精度工作) mysql> select CONV("a",16,2); -> '1010' mysql> select CONV("6E",18,8); -> '172' mysql> select CONV(-17,10,-18); -> '-H' mysql> select CONV(10+"10"+'10'+0xa,10,10); -> '40' BIN(N) 把N转为二进制值并以字串返回(N是BIGINT数字,等价于CONV (N,10,2)) mysql> select BIN(12); -> '1100'

mysql sql语句大全_mysql sql语句面试题_mysql的常用sql语句推荐

mysql sql语句大全_mysql sql语句面试题_mysql的常用sql 语句推荐 今天我们向大家整理了一些【mysql的常用sql语句】系列文章,希望大家对【mysql的常用sql语句】技术点有更深的了解。 小编下面整理一下mysql sql语句大全_mysql sql语句面试题_mysql的常用sql语句的资料给大家作为参考。mysql sql 语句大全_mysql sql语句面试题_mysql的常用sql语句推荐[05-25] MySQL常用SQL语句的介绍[05-25] MySQL 存储过程执行动态SQL语句详解[05-23] MySql 常用操作的SQL语句的介绍[05-22] mysql语句插入多条数据的方法[05-21] 远程用户访问mysql服务sql语句的心得体会[05-21] MySQL 存储过程执行动态SQL语句的介绍[05-20] MySQL 复制表结构、内容到另一张表的SQL语句的介绍[05-20] mysql 查询今天、昨天、近7天、近30天、本月、上一月的SQL语句的介绍[05-20] mysql 获取一天、一周、一月时间的sql语句的方法[05-19] mysql把一个表某字段复制到另一张表的某个字段的SQL语句的方法[05-17] MySQL SQL 语句优化的介绍[05-10] mysql通过查看跟踪日志跟踪执行 的sql语句的方法[05-10] mysql语句运行时间的查看方法[05-10] mysql建表常用sql语句的介绍[05-10] MySQL字段

自增自减的SQL语句的推荐[05-04] SQL语句行列转换的两种方法case...when与pivot函数的介绍[05-04] SQL语句语法汇总的推荐[05-04] sql语句like的用法的介绍[05-04] MySQL查询数据库占用磁盘大小、单个库所有表的大小的sql语句[05-02] sql语句left_join、inner_join中的on与where 的区别介绍[05-02] MySql 获取某字段存在哪个表的sql语句的介绍[04-29] SQL语句Replace INTO与INSERT INTO 不同的介绍[04-29] 数据库字段分组显示数据的sql语句的介绍[04-29] MySQL批量删除指定前缀表的sql语句的推荐[04-29] MySQL优化sql语句查询常用30种方法的推荐[04-25] MySQL 查询当前正在运行的SQL语句[04-19] sql 语句的常用语法[04-19] PHP+Mysql常用SQL语句[04-05] 将数字标识转为汉字展示的sql语句[04-05] 数据表字段删除、添加的SQL语句[04-05] sql批量修改字段值的方法_sql 语句修改字段值[03-03] mysql 实现查看表结构的SQL语句[03-03] mysql 获取当前日期周一和周日的SQL语句[03-03] mysql 实现按年度、季度、月度、周、日查询的SQL语句[12-16] MySQL数据库操作实现的6条SQL语句[12-16] 将blob的char取出来并转成数字保存在其它字段的sql语句[12-16] mysql常用SQL语句小结[10-24] mySQL使用Explain检查测Sql语句执行效率[10-24] mysql查询当天,昨天,近7天,近30天,本月,上一月数据的SQL语句[10-18]

软件工程师的大学规划

软件工程师的大学规划 想做软件工程师的技术上需要学习计算机组成与操作系统原理、开发语言、数据库和网络等四大块的知识。实际中的开发则一般用到开发语言和数据库两部份,后面我也会对这两块着重进行介绍。 由于我们开发的管理系统基本上都是C/S模式,所以在我们对网络这部分的知识也要掌握。至少应学会如何架设一个局域网。 企业管理软件与互联网产品,基本上都是应用型的产品,不像操作系统、办公软件等基础类软件涉及大量底层技术,这也是信管电商专业的计算机方面的学习要求整体上没有计算机科学与技术、软件工程等专业高的一个原因。像计算机组成原理、操作系统原理、计算机网络、汇编语言和编译原理等课程,如果仅仅是想从事上面两种产品的开发的话,可以不用钻研得太深入。当然,这并不代表可以忽略或轻视,对所有想从事开发的人来说,这些其实都是基础,基础不打好,以后想走得更远就会很难,例如想成为架构师基本上不可能。 我们学校信管电商两个专业是不学汇编语言和编译原理这两门课的,同时在实际的开发中,基本上也用不到,但对于搞系统开发的我们来说,了解一下也是需要的,但不用太深。 基础性的东西,学习的难度比较大,好在这些课程一般都安排在大一、大二,大家有充裕的时间去钻研。 在开发语言技术当中,我们接触得最早的就是C语言和数据结构。现在实际开发当中基本不会用到C语言,但在学习C语言过程中所学习的常量、变量、运算符、表达式、条件/循环语句、数据类型、函数等概念是一切开发语言的骨架。学了C语言后,再结合数据结构这一门课程(这门课程也穿插了一些算法的讲解),基本上就掌握了程序开发的核心,书上常说的程序=数据结构+算法,就是这个道理。当然,这两门课程许多时候面对的都是很抽像的数学模型,学习的过程中我们就可以通过研究书本上的代码例子来理解,并尝试着将看过的例子自己用代码写出来。到了课程快结束时,老师会布置课程设计,任务一般是写一个像推箱子游戏这样的比较综合的小软件,这个时候,如果自己不会的,就要找别人的代码来研究,然后尝试着自己再写一次。开发技术基本都这样,单靠看是掌握不了的,还得动手,动手的过程中可以通过研究别人的代码来获得一种思路。 我们学校08、09级的信管、电商两个专业都是在大一第二学期学习C语言,并且相对来说信管的要求会高一些。由于我们系的发展发向是偏向管理系统(从专业名称也可知),所以我们的课程设计基本上都是管理系统,很少会做推箱子、贪吃蛇类的小游戏软件。而在课程设计的过程中同于需要我们自己动手敲写代码(只复制别人代码的人需要注意了!),所以是我们真正能学习到C语言的时候,我们的编程思维和编程习惯也是在这时开始培养起来的,因此一定要重视第一次的课程设计。数据结构电商是大二第一学期学习,信管是大二第二学期学习。学习这门课程一定需要有C语言的基础,不然学起来会相当费力。电商专业的学生会好一点,毕竟上一个学习才学了C语言,不会遗忘得太多,而信管专业的人就要注意了,由于大二第一学期基本上只学数学类的课程,没什么机会再次接触编程,所以要求信管的学生,在大二第一学期最后自已有空的时候复习一下C语言,或者先学习一些别的较先进的编程语言,如

MySQL-分组查询及分组函数

mysql与oracle中分组、聚合函数的区别! 今天需要这样一句sql:先用group by进行分组,然后利用聚合函数count 或者sum进行计算,并显示其它的辅助信息。

where c.media_code = m.media_code group by c.media_code,m.media_name */ --通过: selectcount(c.channel_name),m.media_name from channel c,media m where c.media_code = m.media_code groupby m.media_name --正常 select count(c.channel_name),m.media_name from channel c,media m where c.media_code = m.media_code group by c.media_code,m.media_name --正常 select count(c.channel_code),m.media_name from channel c,media m where c.media_code = m.media_code group by c.media_code,m.media_name 总结如下: 注:oracle常用分组函数: COUNT、AVE、SUM、MAX、MIN Count(*):返回表中所有的行包括空行和重复的行。 COUNT(表达式)返回表中所欲哦表达式为空的行。例如:select count(mgr) from emp; 返回表中所有mgr 为非空的行。 Max、min可用于:数字型数据、字符型数据和日期型数据。 !!!!除了Count(*)外,其他的分组函数都不处理空值(NULL) 比如Max求出的“最大值”就不是null,尽管select的结果(按照从小到大到达顺序)null排在最后的位置。 如果在一个查询中使用了分组函数,任何不在分组函数的列或表达式必须在GROUP BY子句中。 网友总结: select ……group by的时候,前面的select的字段,要么是group by的依据,要么是聚合内容。 我理解下: Select中的字段,只能包含在聚合函数中(e.g:min(price)),或是包含在group by子句中,

c语言连接数据库

使用C语言操作MySQL数据库 1.连接数据库。 从C语言连接MySQL数据库包含两个步骤: a)初始化连接句柄结构; b)实际创建连接。 首先使用mysql_init初始化连接句柄: MYSQL * mysql_init (MYSQL *); 通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。 如果传递一个已有的结构,他将被重新初始化。如果出错,返回NULL。 初始化成功后,则使用mysql_real_connect来创建一个实际的连接: MYSQL * mysql_real_connect(MYSQL * connection, const char * server_host, const char * sql_user_name, const char * sql_password, const char *db_name, unsigned int port_number, const char * unix_socket_name, unsigned int flags

); connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机, 可以使用localhost来优化连接类型。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。 如果无法连接,返回NULL。完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。 void mysql_close(MYSQL * connection); 现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。内容如下: #include #include #include "mysql.h" int main (int argc, char *argv[]) { MYSQL *conn_ptr; conn_ptr=mysql_init(NULL); //连接初始化 if(!conn_ptr){ fprintf(stderr, "mysql_init failed\n"); return EXIT_FAILURE;

adodb常用函数

Connect($host,[$user],[$password],[$database]) 对服务器或资料来源$host 非持续性连结,使用者认证代码为$user ,密码为$password ,如果 服务器支持多数据库,则指定连结到数据库$database。 连结成功回传true ,失败则回传false 。 注意:如果你使用的是Microsoft ADO,而非OLEDB,你可以设定$database 参数为你正在使用 的OLEDB 资料供应器。 Execute($sql,$inputarr=false) 执行SQL 指令$sql ,如果成功,就回传一个对应的ADORecordSet 对象。要注意的是这个指令 如果执行成功时,一定会回传一个数据集,即使是执行insert 或update 指令也一样。 回传对应的ADORecordSet 对象。例如,如果连结的是mysql ,那么ADORecordSet_mysql 将会 被回传。当SQL指令执行失败时会回传false 值。 ErrorMsg() 回传最后状态或是错误讯息。即使没有错误发生,本函数也会回传一个字符串。一般情况下,你不 需要呼叫这个函数,除非ADODB函数因为错误状态回传了false值。 注意:如果debug 旗标被激活了,SQL 错误讯息将会在Execute函数被呼叫时发生错误后出现。 Close( ) 关闭数据库的连结。PHP4 以数据库连结结束时不需要特别去清除而享有盛名,因为其参考

计数机 制会自动帮我们清除掉。 GetOne($sql) Executes the SQL and returns the first field of the first row as an array. The recordset and remaining rows are discarded for you automatically. If an error occur, false is returned. 执行SQL指令,并且以数组的方式回传第一笔记录的第一个字段。资料集及其余的记录将会被自动 清除,如果发生错误,就回传false 值。 译者注:这个功能在验证某笔记录在不在特别有用,可以减少系统内存及资源的用量。GetRow($sql) 执行SQL指令,并且以数组的方式回传第一笔记录。资料集及其余的记录将会被自动清除,如果发生错误,就回传false 值。 Affected_Rows( ) 回传被SQL指令更新或被删除掉的数据笔数。如果数据库不支持,回传一个false 值。 目前interbase/firebird 不支持本函数。 Insert_ID( ) 回传最后插入时的自动增进值ID。如果系统不支持,回传false。 只支持有提供自动增进或对象ID 的数据库,目前像是PostgreSQL, MySQL 以及MSSQL 都有。 PostgreSQL 回传一个OID,可以在数据库重加载时改变。只有使用持续连结方式,当你完成一笔

单位脉冲函数

在物理和工程技术中, 有许多物理、力学现象具有脉冲性质. 它反映出除了连续分布的量以外,还有集中于一点或一瞬时的量,例如冲力、脉冲电压、点电荷、质点的质量等等. 研究此类问题需要引入一个新的函数,把这种集中的量与连续分布的量来统一处理。单位脉冲函数,又称狄拉克(Dirac )函数,简记为δ一函数,便是用来描述这种集中量分布的密度函数. 下面我们通过两个具体的例子,说明这种函数引入的必要性. 1在原来电流为零的电路中, 某一瞬时(设为0=t )进入一单位电量的脉冲, 现在要确定电路上的电流)(t i , 以)(t q 表示上述电路中的电荷函数, 则 )(t q =? ? ?=≠,0,1, 0,0t t 由于电流强度是电荷函数对时间的变化率, 即 )(t i = dt t dq )(=0lim →?t t t q t t q ?-?+)()(, 所以, 当0≠t 时, )(t i =0;当0=t 时,由于)(t q 不连续, 从而在普通导数意义下, )(t q 在这 一点是不能求导数的. 如果我们形式地计算这个导数, 得 )0(i =0 lim →?t t q t q ?-?+) 0()0(=0lim →?t (t ?-1).∞=, 这表明在通常意义下的函数类中找不到一个函数能够表示这样的电流强度. 为此, 引进 一称为狄拉克(Dirac)的函数. 有了这种函数, 对于许多集中于一点或一瞬时的量, 例如点电荷点源, 集中于一点的质量及脉冲技术中的非常窄的脉冲等, 就能够象处理连续分布的量那样, 以统一的方式加以解决. 1 单位脉冲函数的定义 定义1 如果函数)(t δ称满足 )i )(t δ0=,(当0≠t 时) )ii ()1=?∞ ∞ -dt t δ,或者()?=I dt t 1δ,其中I 是含有0=t 的任何一个区间,则称) (t δ为δ一函数. . 更一般的情况下,如果函数满足 )i )(a t -δ0=,(当a t ≠时) )ii ()1=-?∞ ∞ -dt a t δ,或者()?=-I dt a t 1δ,其中I 是含有a t =的任何一个区间, 则称为)(a t -δ函数. 在现实生活中,这种函数并不存在,它只是如下特殊规律的数学抽象;在某定点非常狭小的区域内,所讨论的问题取非常的值;在这个领域之外,函数值处处为0.如函数

thinksns常用函数

Thinksns常用函数一览表: 以下是extend.php : * function get_client_ip() {}获取客户端IP地址 * function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) 字符串截取,支持中文和其它编码 * function mStr($str, $length, $charset="utf-8", $suffix=true)字符串截取,支持中文和其它编码 * function rand_string($len=6,$type='',$addChars='') 产生随机字串,可用来自动生成密码默认长度6位字母和数字混合 * function build_verify ($length=4,$mode=1)获取登录验证码默认为4位数字 *function byte_format($size, $dec=2) 字节格式化把字节数格式为B K M G T 描述的大小 *function is_utf8($string) 检查字符串是否是UTF8编码 *function highlight_code($str,$show=false) 代码加亮 *function h($text,$type,$tagsMethod=true,$attrMethod=true,$xssAuto = 1,$tags=array(),$attr=array(),$tagsBlack=array(),$attrBlack=array()) 过滤得到安全的html //function h($text, $tags = null)输出安全的html //function text($text,$parseBr=false)输出纯文本 function safe($text,$type='html',$tagsMethod=true,$attrMethod=true,$xssAuto = 1,$tags=array(),$attr=array(),$tagsBlack=array(),$attrBlack=array()) *function t($text, $parse_br = false, $quote_style = ENT_NOQUOTES) 转换为安全的纯文本 //function unescape($str) 解析jsescape //function ubb($Text) 解析UBB //function build_count_rand ($number,$length=4,$mode=1) 随机生成一组字符串 function remove_xss($val) *function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) *function list_sort_by($list,$field, $sortby='asc') 对查询结果集进行排序 *function list_search($list,$condition) 在数据列表中搜索 //function send_http_status($status) 发送Http状态信息 //function send_http_header($type='utf8') 发送常用http header信息 //function imagecreatefrombmp($fname) bmp图像处理兼容函数 //function imagebmp(&$im, $filename = '', $bit = 8, $compression = 0) bmp图像处理兼容函数 *function friendlyDate($sTime,$type = 'normal',$alt = 'false') 友好的时间显示 *function dateFormat($sTime, $format = null) 时间显示 //function getMid()获取当前登录用户的UID //function getUserName($uid,$lang='zh')获取用户姓名 *function getUserAtString($uid, $type = 'uid') 获取用户Gid[Mentor项目] //function getUserSpace($uid,$class,$target,$text, $icon = true)返回解析的空间地址 //function getUserInfo($uid, $uname, $mid, $status = false)获取用户详细信息 *function getFollowState($uid,$fid,$type=0) 获取关注状态 *function isfavorited($weibo_id, $uid, $weibo_id_array = null, $key = '') 检查给定用户是否收藏给定微博 *function isBlackList($uid, $fid) 是否为黑名单成员 *function getUserFace($uid,$size) 获取用户头像 function getUserFace($uid,$size) //function convertUidToPath($uid) 将用户ID转换为三级路径 //function getUserGroupIcon($uid) 获取给定用户的用户组图标 function getSubBeKeyArray($origin, $key) *function getSubByKey($pArray, $pKey="", $pCondition="") 去一个二维数组中的每个数组的固定的键知道的值来形成一个新的一维数组

相关主题
文本预览
相关文档 最新文档