在Lua程序中使用MySQL的教程

2024-04-25

在Lua程序中使用MySQL的教程(精选8篇)

篇1:在Lua程序中使用MySQL的教程

这篇文章主要介绍了在Lua程序中使用MySQL的教程,是Lua入门学习中的基础知识,需要的朋友可以参考下

导入MySQL

我们可以用一个简单语句导入SQLite库,假设Lua中正确实现并已完成,在安装过程中,文件夹libsql包含数据库相关的文件。

代码如下:

mysql = require “luasql.mysql”

可变的MySQL将提供通过参照主MySQL表访问该功能。

建立连接

我们可以设立一个启动MySQL的环境,然后创建环境的连接。如下所示。

代码如下:

local env = mysql.mysql

local conn = env:connect(‘test‘,‘root‘,‘123456‘)

上面的连接将连接到现有的MySQL文件并建立与新创建的文件的连接。

执行函数

这将有助于我们做的创建,插入,删除,更新等,所有的数据库操作执行简单的功能。语法如下所示

代码如下:

conn:execute([[ ‘MySQLSTATEMENT‘ ]])

在上面的语法,我们需要确保conn是开放的和现有的MySQL连接并替换“MySQLSTATEMENT”使用正确的语句。

创建表的例子

一个简单的创建表的示例如下所示。它创建类型为int和varchar类型,两个参数ID和name的表。

代码如下:

mysql = require “luasql.mysql”

local env = mysql.mysql()

local conn = env:connect(‘test‘,‘root‘,‘123456‘)

print(env,conn)

status,errorString = conn:execute([[CREATE TABLE sample2 (id INTEGER, name TEXT);]])

print(status,errorString )

当运行上面的程序,表名为sample将有两列分别是id和name会被创建。

代码如下:

MySQL environment (004BB178) MySQL connection (004BE3C8)

0 nil

如果有错误,会返回nil的错误语句。下面一个简单的错误语句如下所示。

代码如下:

LuaSQL: Error executing query. MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘“id INTEGER, name TEXT)‘ at line 1

Insert语句的例子

MySQL的INSERT语句如下所示。

代码如下:

conn:execute([[INSERT INTO sample values(‘11‘,‘Raj‘)]])

Update语句的例子

对于MySQL UPDATE语句如下所示。

代码如下:

conn:execute([[UPDATE sample3 SET name=‘John‘ where id =‘12‘]])

删除Delete 语句的例子

DELETE语句-MySQL如下所示。

代码如下:

conn:execute([[DELETE from sample3 where id =‘12‘]])

Select语句的例子

就select语句而言,我们需要遍历每一行,并提取所需的数据。下面简单的SELECT语句如下所示。

代码如下:

cursor,errorString = conn:execute([[select * from sample]])

row = cursor:fetch ({}, ”a“)

while row do

print(string.format(”Id: %s, Name: %s“, row.id, row.name))

-- reusing the table of results

row = cursor:fetch (row, ”a“)

end

在上面的代码中,conn 是一个开放的MySQL连接,

由执行语句返回游标,可以通过表的反应返回获取所需的选择数据。

一个完整的例子

所有上述声明一个完整的例子给出下面的参考。

代码如下:

mysql = require ”luasql.mysql“

local env = mysql.mysql()

local conn = env:connect(‘test‘,‘root‘,‘123456‘)

print(env,conn)

status,errorString = conn:execute([[CREATE TABLE sample3 (id INTEGER, name TEXT)]])

print(status,errorString )

status,errorString = conn:execute([[INSERT INTO sample3 values(‘12‘,‘Raj‘)]])

print(status,errorString )

cursor,errorString = conn:execute([[select * from sample3]])

print(cursor,errorString)

row = cursor:fetch ({}, ”a“)

while row do

print(string.format(”Id: %s, Name: %s“, row.id, row.name))

row = cursor:fetch (row, ”a“)

end

-- close everything

cursor:close()

conn:close()

env:close()

当运行上面的程序,会得到如下的输出。

代码如下:

MySQL environment (0037B178) MySQL connection (0037EBA8)

0 nil

1 nil

MySQL cursor (003778A8) nil

Id: 12, Name: Raj

执行事务:

事务是确保数据一致性的机制。事务应该具有以下四个特性:

原子性:事务要么都完成或都没有任何变化发生。

一致性:事务必须启动一个一致的状态,让系统处于一致的状态。

隔离:一个事务的中间结果是不是当前事务外可见。

持久性:当一个事务被提交,这个效果是持久的,即使在系统出现故障。

事务开始START TRANSACTION;和commit或rollback语句结束。

开始事务

为了启动一个事务,我们需要执行在Lua下面执行语句,假设conn是一个开放的MySQL连接。

代码如下:

conn:execute([[START TRANSACTION;]])

回滚事务

我们需要做执行下面的语句来回滚执行开始事务后所做的更改。

代码如下:

conn:execute([[ROLLBACK;]])

提交事务

我们需要做执行以下语句提交执行开始事务后所做的更改。

代码如下:

conn:execute([[COMMIT;]])

我们已经在上面知道关于MySQL和下节介绍基本的SQL操作。请记住事务,但sqlite3不会再解释了,但相同的语句在sqlite3也能正常工作。

篇2:在Lua程序中使用MySQL的教程

SQLite导入

我们可以用一个简单语句导入SQLite库,假设Lua中正确实现并已完成,在安装过程中,文件夹libsql包含数据库相关的文件。

代码如下:

sqlite3 = require “luasql.sqlite3”

变量sqlite3将提供通过参照主sqlite3表访问该功能。

建立连接

我们成立了发起sqlite环境,然后创建环境的连接。它如下所示。

代码如下:

local env = sqlite3.sqlite3()

local conn = env:connect(‘mydb.sqlite‘)

上述连接将连接到现有的SQLite文件或创建一个新的源码文件,并建立与新创建的文件的连接。

执行函数

有可用的,这将有助于我们执行创建,插入,删除,更新等,所有的数据库操作基于连接执行简单的功能。语法如下所示

代码如下:

conn:execute([[ ‘SQLite3STATEMENT‘ ]])

在上面的语法,我们需要确保conn是开放的及现有的sqlite3连接,代替“SQLite3STATEMENT”使用正确的语句。

创建表的例子

一个简单的创建表的示例如下所示。它创建类型为int和varchar类型,两个参数ID和name的表。

代码如下:

sqlite3 = require “luasql.sqlite3”

local env = sqlite3.sqlite3()

local conn = env:connect(‘mydb.sqlite‘)

print(env,conn)

status,errorString = conn:execute([[CREATE TABLE sample (‘id‘ INTEGER, ‘name‘ TEXT)]])

print(status,errorString )

当运行上面的程序,表名为sample将有两列分别是id和name会被创建。

代码如下:

SQLite3 environment (003EC918) SQLite3 connection (00421F08)

0 nil

如果有错误,会返回nil的错误语句。下面一个简单的错误语句如下所示。

代码如下:

LuaSQL: unrecognized token: “”‘id‘ INTEGER, ‘name‘ TEXT)“

Insert语句的例子

SQLite的一个INSERT语句如下所示。

代码如下:

conn:execute([[INSERT INTO sample values(‘11‘,‘Raj‘)]])

Select语句的例子

就select语句而言,我们需要遍历每一行,并提取所需的数据,

下面简单的SELECT语句如下所示。

代码如下:

cursor,errorString = conn:execute([[select * from sample]])

row = cursor:fetch ({}, ”a“)

while row do

print(string.format(”Id: %s, Name: %s“, row.id, row.name))

-- reusing the table of results

row = cursor:fetch (row, ”a“)

end

在上面的代码中,conn 是一个开放的sqlite3连接。在执行语句返回游标的帮助下,可以通过表的反应返回获取所需的选择数据。

一个完整的例子

所有上述声明一个完整的例子给出下面参考。

代码如下:

sqlite3 = require ”luasql.sqlite3“

local env = sqlite3.sqlite3()

local conn = env:connect(‘mydb.sqlite‘)

print(env,conn)

status,errorString = conn:execute([[CREATE TABLE sample (‘id‘ INTEGER, ‘name‘ TEXT)]])

print(status,errorString )

status,errorString = conn:execute([[INSERT INTO sample values(‘1‘,‘Raj‘)]])

print(status,errorString )

cursor,errorString = conn:execute([[select * from sample]])

print(cursor,errorString)

row = cursor:fetch ({}, ”a“)

while row do

print(string.format(”Id: %s, Name: %s“, row.id, row.name))

row = cursor:fetch (row, ”a")

end

-- close everything

cursor:close()

conn:close()

env:close()

当运行上面的程序,会得到如下的输出。

代码如下:

SQLite3 environment (005EC918) SQLite3 connection (005E77B0)

0 nil

1 nil

SQLite3 cursor (005E9200) nil

Id: 1, Name: Raj

我们可以用这个libsql库完成所有可用的查询。所以可以试验MySQL,SQLite3和其它Lua支持DB提供各种查询语句。

★ cad安装使用教程

★ 在VB中使用API函数 (之一)VB

★ 在VB中动态创建数据库数据库教程

★ 公文包的使用基本礼仪

★ 《猫眼看天下》基础使用教程

★ 量具使用教程-5指示式量具

★ Excel中只选中包含的单元格的技巧EXCEL基本教程

★ 废电池极性材料在硝酸中的溶解条件

★ 在AdSense 帐户中使用谷歌分析工具

篇3:Lua在自动测试中的应用

在产品设计的任何一个阶段,都需要大量的测试去验证软件和硬件的设计或者是开发的结果,而这种测试如果是用人工来做,既浪费时间又浪费人力。那么自动测试无疑是最好的选择。Lua语言可以轻松的实现这个需求。

Tester是一个基于Lua的运行环境,将Lua与CC++结合起来,以实现自动测试功能的一个工具。在Tester的测试系统中,既有软件的控制,也有硬件的控制以及通讯。由于测试对象的广泛性,Tester需要支持大量的库以满足用户多方面的需求。这些库之间可以是互相联系的,也可以是相互独立的。因此,Tester采用Plugin的方式,把库和Tester的操作环境独立开来。每一个功能的添加,只需要单独编写一个C/C++或者是lua的库,就可以实现了,非常方便。

2 Lua语言介绍

Lua是一种脚本语言[1,2],可以和其他的语言相互调用。Lua被设计成很容易和传统的C/C++整合的语言。这种语言的二元性带来了极大的好处。Lua是一个小巧而简单的语言,因为Lua不致力于做C语言已经做得很好的领域,比如:性能、底层操作以及与第三方软件的接口。Lua依赖于C去完成这些任务。Lua所提供的机制是C不善于的:高级语言、动态结构、简洁、易于测试和调试等。正因为如此,Lua具有良好的安全保证,自动内存管理,简便的字符串处理功能及其他动态数据的改变。

Lua不仅是一种易于扩展的语言,也是一种易整合语言(glue language);Lua支持基于组件的,我们可以将一些已经存在的高级组件整合在一起实现一个应用软件。一般情况下,组件使用像C/C++等静态的语言编写。但Lua是我们整合各个组件的粘合剂。又通常情况下,组件(或对象)表现为具体在程序开发过程中很少变化的、占用大量CPU时间的决定性的程序,例如窗口部件和数据结构。对那种在产品的生命周期内变化比较多的应用方向使用Lua可以更方便的适应变化。除了作为整合语言外,Lu a自身也是一个功能强大的语言,它不仅可以整合组件,还可以编辑组件甚至完全使用Lua创建组件。

除了Lua外,还有很多类似的脚本语言,例如:Perl、Tcl、Ruby、Forth、Python。虽然其他语言在某些方面与Lua有着共同的特色,但下面这些特征是Lua特有的:

◆可扩展性。Lua的扩展性非常卓越,以至于很多人把Lua用作搭建领域语言的工具(注:比如游戏脚本)。Lua被设计为易于扩展的,可以通过Lua代码或者C代码扩展,Lua的很多功能都是通过外部库来扩展的。Lua很容易与C/C++、java、fortran、Smalltalk、Ada,以及其他语言接口。

◆简单。L ua本身简单,小巧;内容少但功能强大,这使得Lua易于学习,很容易实现一些小的应用。他的完全发布版(代码、手册以及某些平台的二进制文件)仅用一张软盘就可以装得下。

◆高效率。Lua有很高的执行效率,统计表明Lua是目前平均效率最高的脚本语言。

◆与平台无关。Lua几乎可以运行在所有我们听说过的系统上,如Next Step、OS/2、Play Station II(Son y)、Mac OS-9、OS X、Be OS、MS-DOS、IBM mainframes、EPOC、Palm OS、MCF5206e LITE Evaluation Boar d、RISC OS,及所有的Win dows和Un ix。Lua不是通过使用条件编译实现平台无关,而是完全使用ANSI(ISO)C,这意味着只要你有ANSI C编译器你就可以编译并使用Lua。

Lua大部分强大的功能来自于他的类库。Lua的长处之一就是可以通过新类型和函数来扩展其功能。动态类型检查最大限度允许多态出现,并自动简化调用内存管理的接口,因为这样不需要关心谁来分配内存谁来释放内存,也不必担心数据溢出。高级函数和匿名函数均可以接受高级参数,使函数更为通用。

L u a自带一个小规模的类库。在受限系统中使用Lua,如嵌入式系统,可以有选择地安装这些类库。若运行环境十分严格,我们甚至可以直接修改类库源代码,仅保留需要的函数。

总之,Lua是一种很小的(即使加上全部的标准库)并且在大部分系统下仍可以不用担心的使用全部功能的脚本语言。

3 系统设计

3.1 Tester整体框图

Tester是一个包括软件和硬件的系统,其系统框图1。

3.2 Tester硬件设计

如图2,T ester的硬件包括一个处理器,两个串口,一组的GPIO(General Purpose Input/Output Pin),一个USB接口,一个I2C接口,一个I2S接口,以及Mic和Speaker接口。

其中UART1口与PC相连,负责接收PC软件发来的命令,并对这些命令做出相应的响应,处理结果仍然通过串口返回给PC。

另外一个串口与测试对象连接,实际测试中,可以根据测试的需要来决定是否需要连接这个串口。

GPIO实现通过一些输入输出的Pin来对测试对象进行控制。通常,这些pin是去控制测试对象的一些输入pin,然后采集测试对象的输出pin,根据这个pin的状态来判断测试对象所处的状态是否正确。

USB也是一个可以控制的接口,可以通过US B跟测试对象通信,或者是从USB录音和放音。

I2C/I2S接口可以连接外围测试对象的EEPROM或者是其他的接口。

MIC和SPK可以对测试对象的音频部分进行测试。当然,测试对象的speaker和mic也可以直接接到PC的录音和放音接口。

Tester的硬件设计使得它能够处理类似于I/O口的控制,以及语音和数据通信的测试,应用非常广泛。

3.2 Tester软件设计

这里介绍的是PC上的软件的设计,MCU的软件的设计由于跟具体的测试对象结合比较紧密,就不作介绍了。

Tester的软件设计如图3:

Lua有一个CAPI,它是一个C代码与Lua进行交互的函数集。它由以下几部分组成:读写Lua全局变量的函数,调用Lua函数的函数,运行Lua代码片断的函数,注册C函数然后可以在Lua中被调用的函数,等等。

Tester采取的是从C++调用Lua的C API,将C++的库注册到Lua的环境中,然后在Lua环境中调用的方式。这种方式使得Tester具有良好的扩展性,如果需要添加新的功能,只需要在原有的C++库中添加一个函数或者是新添加一个C++或Lua的库就可以了。

1.将C/C++的库注册到T e st e r环境中

在Tester众多的C/C++库中,有一个库是特殊的,那就是Register Plugin.dll。这个库只包含一个导出的函数,它实现的功能就是根据输入的参数,把其他的库函数注册到Tester的运行环境中去。

要实现这个功能,先要定义一个函数(这里命名为fun),fun实现将一个库中的所有函数都注册到Tester环境中去的功能。也就是利用Lua的C API:

lua_register(s,n,g)[3]将一个C函数注册到Tester的运行环境。

其中s:是lua_State

n:暴露给Lua的函数名称

g:C/C++中的结合函数

而这个导出函数的名字必须是以luaopen_开头,然后加上函数名,库的名字也必须跟这个函数的名字相同。例如,需要导出的函数是:Register Plugin(),那么这个函数必须这样写:

这个库的名字也应该是Register Plugin.dll。编译好这个库之后,保存。然后在T e s t e r的运行环境中,用r eq u i r e命令获取这个函数:

regist_func=require”Register Plugin”

这个命令就是将fun的函数指针赋给regist_func。获取了这个函数之后,将一个test.dll注册到Tester环境中去:

regist_func(“test.dll”)

如果test.dll中包含一个test_max(a,b,c)的函数,并且注册到Lua环境中的函数名字也是test_max,那么在Tester环境中,就可以像使用Lu a的标准库函数一样使用这个函数了:

a=test_max(1,2,3)

print(a)

显示结果3.

2.将用Lua写的库注册到Test er环境中去

一般来说如果是用Lua语言实现起来比较困难的函数,才会用C或者是C++去实现。如果是Lua语言实现起来比较容易的,就直接用Lua去实现。用Lua写的库,直接用require”filename.lua”就可以注册到Lua运行环境了。然后,这个文件中定义的所有的函数,都可以像使用Lua的标准库函数一样使用了。也可以用dofl i e”filen ame.lua”,只是,使用这个命令时,如果前面一个文件和后面一个文件同名,后面的会覆盖前面的,而如果是用require命令,则已经注册过的不会重新注册了。

在众多的库中,难免会有相同名字的函数,如果处理不好,就会产生冲突,或者是一不小心用错了函数。解决的办法是使用名字空间。例如:跟audio有关的库函数前面加上audio前缀,跟MCU有关的加上MCU前缀。这样,使用起来也很方便。

3进行系统的测试

有了这些库的功能,进行大批量的测试就非常方便了,只需要根据测试要求写一些脚本语言控制测试的流程。例如:这是一个audio录音的测试脚本文件test.lua

保存好文件,然后在Lua的运行环境中,运行以下命令:

dofile(“test.lua”)

就可以让它自己去运行了。

4 结束语

大量的测试结果显示,此测试系统不管是测试还是扩展,使用起来都非常的灵活,整个测试的大环境搭建好之后,即使是测试人员,也可以根据自己的需要添加一些库来扩展Tester的功能,而且不同的用户可以添加不同的库去实现自己的需求,非常的方便自由,为大批量的测试节省了宝贵的时间和人力。

摘要:Lua是一种小巧的脚本语言,它的易扩展性与整合性,使得它可以与别的语言很好的融合在一起,实现各种各样的需求,因此它的应用非常的广泛。本文通过Lua在一个自动测试系统(Tester)中的应用来展现Lua语言的优点。

关键词:Lua,扩展性,整合性,自动测试系统

参考文献

[1]Roberto Ierusalimschy著,周惟迪译.Lua程序设计(第二版).北京:电子工业出版社,2008:Ⅲ-Ⅳ.

[2]Kurt Jung.Beginning Lua Programming.John Wiley&Sons,2005:1-2.

[3]R.lerusalimschy,L.H.de Figueiredo,W.Celes.Lua5.1 Reference Manual,2006.

[4]Roberto Ierusalimschy著,周惟迪译.Lua程序设计(第二版).北京:电子工业出版社,2008:Ⅲ-Ⅳ.

[5]Kurt Jung.Beginning Lua Programming.John Wiley&Sons,2007:1-2.

[6]乔中涛,冯振声.基于开发系统的远程自动测试系统设计与实现[J].测试技术学报,2005,19(2):176-180.

[7]R.lerusalimschy,L.H.de Figueiredo,W.Celes.Lua5.1 Reference Manual.2006.

[8]R.Ierusalimschy,L.H.de Figueiredo,W.Celes,LUA-an extensible extension language[J],Software:Prac-tice&Experience,1996,26(6).

[9]R.Ierusalimschy,L.H.de Figueiredo,W.Celes,The Evolution of an Extension Language:A History of LUA[C].Software:Preceedings of V Brazilian Symposium on Programming Languages,2001.

篇4:在Lua程序中使用MySQL的教程

关键词: 《剑桥国际英语教程(修订版)》 语法 听力 教学方法

我校海外本科直通车学生在综合英语课程中选用了《剑桥国际英语教程》(第三版)的2级和3级,以及《剑桥国际英语教程(修订版)》的4级和5级。这一系列教程和新概念英语等教程相比,在国内的知名度不是很高,但是在国际上受到广泛欢迎,笔者作为一名国内的英语教师,在使用这套教程的过程中对这套教程进行了反思。

首先,笔者将从单元结构、课程教学方法上简单介绍《剑桥国际英语教程(修订版)》。

本教程更全面地体现了国际上最新的英语教学方法,内容时尚新颖、语法练习多样、词汇丰富实用,在书中为学习者提供了更多的听说实践的体会。

以《剑桥国际英语教程(修订版)》的4级为例,这一教程一共有12个单元,每一个单元都围绕着一个中心话题展开,分为Lesson A 和Lesson B两课,两课分别从不同视角解析单元话题,相辅相成。如Unit 1“ Friends and family ”,分别分为A :What kind of person are you? B :Every family is different. 由这个话题引申到本单元所要掌握的grammar,vocabulary, speaking ,listening ,writing ,reading 等内容。

本教程的编写前提是,学习者已经拥有了坚实的英语基础且需要培养英语的交际能力,通过本教程的学习,学习者可以拓展英语话题的讨论和理解范围;扩展语法知识并加强语法的运用;增加词汇和词汇知识,提高口语的流利度和准确性。本书为了达到此目的,采用了“交际教学法”,主要体现为学习者可以围绕每个单元的话题进行口语练习,学习语法技能,学习者之间可以就本单元的内容相互进行讨论,可以通过课文中展示的例句,在真实的交际环境下练习语言的实际应用,从而提高对语言的掌握程度。

如Unit 1“ Friends and family”,学习者在这个单元中练习了describing personalities, expressing likes and dislikes, describing personal change, stating advantages and disadvantages, talking about rules ,在这些任务中,学习者很自然地接触了相关的词汇,如描述personalities的词汇和动名词的语法现象,并且都是以听说为先帮助学习者很自然地学会运用这些词汇和语法,这也是编者的初衷和设想。

可以说这套教程的构思和设置都是非常科学和合理的,符合语言学习者的习惯,但是不能否认的是,在国内这套教程的流行程度不如新概念,教师在使用的过程也感到了明显的水土不服。那么笔者就此问题做了大致分析。

第一,从学生的角度进行分析。

由于海外本科直通车的学生大部分都来自于江苏,学生在高中使用的是《牛津高中英语》,这套教程的难度大致相当于《剑桥国际英语教程》(第三版)的2级和3级,甚至在某些方面和《剑桥国际英语教程(修订版)》4级和5级的难度相当。另外,学生在高中已经适应了《牛津高中英语》这样的课程设置,学生会在课程开始读到一篇较长的文章,通过此文章展开一系列的学习。《剑桥国际英语教程(修订版)》的4级和5级虽然也有类似的安排和设置,如每个单元中开头都会有一个starting point,接着会就这个starting point展开后续的讨论和学习,但是这部分内容过少也比较简单,学生一读就明白,在学习过程中有一种冷饭加热的感觉,觉得毫无新意。

其次,由于本门课程主要锻炼学生的听说能力,相应的语法学习贯穿于听说练习之中,但是语法部分的内容没有系统性,也过于简单,都是围绕每个单元的一个topic进行展开的,学生在高中时都已经学习过,了然于心,对这样的内容不感兴趣,甚至有学生认为过于简单。教师在教授过程中对于应该如何教授这部分内容感到非常困惑,有些老师可能选择简单带过,有些老师则详细讲解,无论如何,应该做到从学生的角度出发。

虽然语法的内容比较简单,但是大部分学生对于课程中的听力部分却感到相当吃力,这部分内容让学生完全掌握很耗费时间,学生大部分都反映听不懂。笔者认为学生听不懂的原因主要在于听力水平低、听力内容较长、语速较快、听力材料的背景知识不足、缺乏相应的词汇。笔者感到非常费解的是,每个单元中的一篇听力材料的内容时长可以达到3~4分钟甚至更长,而且语速很快,这让学生和老师在面对这部分内容时感到很困难。

第二,从本教程设置的背景进行分析。

笔者在教授本教程的过程中发现,编者在编写此书时是考虑给international students 来使用的,也就是假设班级中的学生是来自全世界各地的,因此有些练习的安排给只有中国学生的班级使用就显得不是很合理,当然,这需要教师在课堂教学中进行变通。

第三,撇开教程自身的原因,笔者觉得中国教师陈旧的教学观念和方法才是造成本教程在中国水土不服的主要原因。

笔者认为大部分国外依照“交际教学法”所设置的教材,在中国都很难被老师和学生从内心认可和接受。笔者觉得这个还和中国人长期建立形成的课堂教学方法有关,教师一堂言依旧是主流,教师很难摆脱掉这种陈旧的教学模式,学生也依旧希望教师在课堂中多传授知识,而依照“交际教学法”所设置的教程很难按照这种传统模式进行教学,因此造成学生和老师都不适应。

瑕不掩瑜,无论是从语言的角度还是从课程安排的角度来看,这本教程都还是很经典的,这本教程的语言非常实用地道,课程安排一环套一环也非常紧凑合理。但是对于中高级学习者,这套教程的内容在难度上把握的不是非常周到,有些内容过于简单,如语法和阅读,而有些内容又偏难,如听力,无论是对于学习者还是教师都觉得很难把握。这就需要教师在使用的过程中多思考,力求让学生在活泼的课堂氛围里很好地掌握本套教程的内容。

参考文献:

[1]理查兹 (Richards, J.C.), 桑迪(Sandy, C.).剑桥国际英语教程(修订版)教师用书[M].北京:外语教学与研究出版社,2011.3 .

篇5:在Lua程序中使用MySQL的教程

1、使用mysql提供的api函数库,

很多有名的mysql客户端工具就是这样实现的,大名鼎鼎的winmysql工具就是这样的。这在大部分的开发工具中都可以实现。

比如vc,bcb,delphi,vb等,只要能调用第三方的api就能实现。但对程序员的要求很高,而且要熟悉一套mysql的api函数集,这不是对每个人都 很轻松的事。而且这种方法不能用于asp等程序,因为它不支持com对象。

2、第二种是使用myodbc驱动程序。

你可以到www.mysql.com下载myodbc驱动程序,然后照着下面的做就可以了 第一种选择是下载完全安装包,这种包很大,但对于我们来说有用的只有myodbc.dll这个文件,却要下载这么大的文件,不太合适。当然,如果你 很菜的话,我建议你选择这种方式,这样容易些,但不符合cfans的作风,是吧。

第二种是直接下载myodbc.dll文件,只有几百k,但不太容易使用,本人经过很久摸索才找到使用它的方法。

首先你将包解开,将myodbc.dll 文件放到windowssystem 或 winntsystem32目录下,这取决于你的系统是win9x还是winnt(win2k),你应该 知道吧。然后打开一纯文本编辑器,如editplus,notpad之类,(取决于你的喜好)将下面一段话保存为一文件,扩展名为.reg,知道了吧,这是注册表文件,不要搞错呀(不包括下面的一长串等号) 如果你用的是win2k请将第一行换成 Windows Registry Editor Version 5.00

==========================================================从下行开始

Windows Registry Editor Version 4.00

[HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INImyodbc driver]

“UsageCount”=dword:00000002

“Driver”=“C:WINNTSystem32myodbc.dll”

“Setup”=“C:WINNTSystem32myodbc.dll”

“SQLLevel”=“1”

“FileUsage”=“0”

“DriverODBCVer”=“02.50”

“ConnectFunctions”=“YYY”

“APILevel”=“1”

“CpTimeout”=“120”

[HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INIODBC Drivers]

“myodbc driver”=“installed”

=======================================结束于上一行

(bill.gates)就这样吧.保存后,双击刚才的文件,应该叫 xxx.reg 吧,然后选择确定,ok,搞定了,

篇6:在Lua程序中使用MySQL的教程

如果文件已连接(与终端设备相关联)到一个tty(状)的设备,isatty()方法返回True,否则返回False,

语法

以下是isatty()方法的语法:

fileObject.isatty();

参数

NA

返回值

如果该文件被连接(与终端设备相关联)到一个tty(类似终端)设备此方法返回true,否则返回false,

例子

下面的例子显示了isatty()方法的使用。

#!/usr/bin/python# Open a filefo = open(“foo.txt”, “wb”)print “Name of the file: ”, fo.nameret = fo.isatty()print “Return value : ”, ret# Close opend filefo.close()

当我们运行上面的程序,它会产生以下结果:

篇7:在Lua程序中使用MySQL的教程

关键词:触发器;trigger;MySQL

中图分类号:TP309

1 触发器的概念

触发器是一个被指定关联到一个表的数据库对象,当对一个表的特定事件出现时,它将被激活。触发器可以看作是特殊的存储过程,不同的是,执行存储过程要使用call语句来调用,只要当一个预定义的事件发生的时候,触发主体动作就会被MySQL自动调用。具体而言,触发器就是MySQL响应insert、update和delete语句而自动执行的一条或一组MySQL语句。

2 触发器的用途

(1)它可用于检查插入到表中的值。例如:每当增加一个学生到数据库的学生基本信息表时,都检查其电话号码的格式是否正确。(2)它能对更新涉及的值进行计算。例如:每当客户订购一个产品时,都从产品库存表中将库存量减去订购的数量。(3)用于创建审计跟踪,也就是可使用触发器把表的更改状态以及之前和之后的状态记录到另外一张数据表中。正确的使用触发器,这能保障数据库中数据的完整性正确性,以及多个表之间数据的一致性。

3 触发器的创建

语法格式:Create [DEFINER={user|CURRENT_USER}] TRIGGER t_name t_time t_event ON tbl_name FOR EACH ROW t_body

其说明如下:DEFINER从句:指定当触发器被触发时满足事件执行权限的安全上下文,为可选项。t_name:触发器的名称,触发器在当前数据库中必须具有唯一的名称。t_time:触发器被触发的时机,有before和after两个选项。t_event:触发事件,包括insert、update和delete,指定激活触发器的语句种类。tbl_name:标识建立触发器的表名。FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。t_body:指定触发器被触发后执行的语句,称为触发器主体。当触发器主体有多条语句时,将要执行的多条语句放begin和end語句之间,各语句之间要用分隔符“;”隔开。

4 触发器的查看

查看触发器是指查看数据库中已存在的触发器的定义、状态和语法信息等。查看当前数据库中的触发器语句为:“show TRIGGERS”,但执行该语句显示的触发器信息较为混乱,可以在show TRIGGERS命令后加“\G”,这样显示的信息就相对更有条理。在MySQL数据库中,所有的触发器定义都存放在系统自带的数据库information_schema的triggers表中,所以可以通过语句“select * from information_schema.triggers where trigger_name=触发器名称”查看满足指定条件的触发器,该方法更为实用。

5 触发器的使用

触发器是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。根据触发的事件,触发器可分为insert、delete和update触发器。

5.1 insert触发器。insert触发器可在insert语句执行之前或之后执行。需要注意以下几点:在insert触发器代码内,可引用一个名为new的虚拟表,来访问被插入的行。在before insert触发器中,new中的值也可以被更新,即允许更改被插入的值(只要具有对应的操作权限)。对于auto_increment列,new在insert执行之前包含的是0值,在insert执行之后将包含新的自动生成值。

5.2 delete触发器。delete触发器可在delete语句执行之前或之后执行。在delete触发器代码内,可以引用一个名为old的虚拟表,来访问被删除的行。但old中的值全部是只读的,不能被更新。

5.3 update触发器。相比insert触发器和delete触发器,update触发器既可使用new虚拟表,也可以使用old虚拟表。new虚拟表可以访问更新后的值,而old虚拟表可以访问(update语句执行前)的值。同样,old中的值全部是只读的,不能被更新。特别要注意的是,当触发器涉及对触发表自身的更新操作时,只能使用before update触发器,而after update触发器将不被允许。

5.4 触发器应用举例。某进销存数据库(db_jxc)中有业务统计表(persons)和销售额表(sales)等表。表person有销售人姓名、销售数量字段。表sales有姓名、销售金额字段。要求每更新一次person表后,都要更新sales表对应的销售金额字段(销售金额=销售数量*20)。

经分析,可用触发器来实现,操作步骤如下:(1)创建数据库:create database db_jxc;(2)选择数据库:use db_jxc;(3)创建表:Create table persons(name char(10),nun int);Create table sales(name char(10),sum int);(4)创建触发器:Create TRIGGER nun_sum after insert on persons FOR EACH ROW INSERT into sales values(new.name,20*new.nun);(5)向表persons中插入记录:Insert into persons values(‘jack,50),(‘luck,47);(6)检查触发器的执行情况,如图1所示。

6 触发器的删除

删除触发器指删除原来已经在某个数据库中创建的触发器,与MySQL中删除数据库的命令相似。

格式:drop TRIGGER [if exists] [schema_name.]trigger_name;

If exists为可选项,用于避免删除没有的数据库。可选项schema_name用于指定触发器所在的数据库的名称,若没有指定,则默认为当前数据库。trigger_name指定要删除的触发器的名称。当删除一个表的同时,也会自动地删除该表上的触发器。

另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,然后再重新创建。在应用完触发器后,切记一定要将触发器删除,否则在执行某些数据库操作时,会造成数据的变化。

7 使用触发器的注意事项

在使用触发器的时候需要注意:(1)在触发器的创建过程中,每个表每个事件每次只允许一个触发器。因此,每个表最多支持6个触发器,即insert、update和delete的之前与之后。(2)及时删除不再需要的触发器。触发器定义之后,每次执行触发事件,都会激活触发器并执行触发的主体动作。如果需求发生变化,而触发器没有进行相应的改变或删除,则触发器仍然会执行旧的语句,从而影响新的数据的完整性。

8 结束语

本文介绍了触发器的用途、创建、使用方法等,案例代码经多次调试运行无错误。触发器能有效地保护数据库中的数据,能解决一些复杂的问题。正确使用触发器是MySQL数据库编程人员必备的素质。

参考文献:

[1]MySQL数据库程序设计[M].北京:高等教育出版社,2013.

[2]刘增杰,张少军.MySQL5.5从零开始学[M].北京:清华大学出版社,2012.

作者简介:徐安令(1979-),云南宣威人,讲师,计算机应用技术工程硕士,研究方向:数据库应用与程序设计。

篇8:在Lua程序中使用MySQL的教程

关键词:MySQL;数据库;管理信息系统;网络

中图分类号:TP311.1 文献标识码:A文章编号:1007-9599 (2011) 07-0000-01

MySQL Database Application in Enterprise Management Information System

Lu Fang 1, Tao Guanghui 2

(1.Dagang Oilfield Material Supply Company,Tianjin300143,China;2.Dagang Oilfield Information Center,Tianjin300143,China)

Abstract:The state-owned enterprises is often a manual way to handle business-related information,along with the continuous increase of businesses,corporate manager of labor intensity increases,this backward approach has been unable to cope with changes in the situation.To this end,we propose to promote the construction of enterprise information management,using the dynamic relational database-based application system to take over the enterprise information management.

Keywords: MySQL; database; management information system; network

企业管理工作的一个重要环节,利用关系型数据库建设企业管理信息系统,可以摆脱陈旧的手工操作方式,提高办公效率,加强信息的保密性,方便相关信息的查询及频繁的维护工作。在功能上,员工不但可以及时上网办理业务、在线交流、上传资料、查询业务订单,还可以借助企业提供的业务系统进行处理工作;侵略者也可以随时管理员工信息、回复请示、安排业务,真正实现了全方位、全天候服务于现代化的企业管理工作。

一、系统需求

新型的企业信息管理系统在很大程度上接管了企业管理办公室的琐碎的事务性工作,比如车间的设立、管理员的匹配、员工信息的添加删除、员工业绩的管理、考勤情况记录等等。虽然各个企业早已配备办公计算机,但是以往的数据都是孤立的,缺乏必要的关联性,在综合处理企业信息上利用率太低。所以,企业的员工管理层要配备一套适用可用的员工信息管理系统,以高效率、规范化地管理企业工作。

二、系统特点

(一)普及性强、可移植性好。通用性是本系统的一个重要的特色。本系统不仅适用于普通高校,同样也可以运用到上游商家、下游代理商、零配件提供商、相关企业等不同层次不同类别的企业。该软件在交付用户使用时只需改动少量的参数设置,灵活调用大量的动态数据,以便用户能够自由添加,其中包括企业名称、车间名称、班组名称、参考名称等都可以后期方便地修改。

企业信息管理系统要具备良好的普及性。MIS系统不但要适用于企业的一个车间,还要适用于不同的企业,以加强系统的可移植性。设计过程中采用面向对象的开发模式,把相同的函数类进行封装,提高程序的可重用性和可维护性。

(二)安全性强、保密性好。企业管理信息系统涉及员工的个人信息、业务绩效,甚至会影响到员工的薪金问题,所以安全性一定要保证。系统的用户采用三层权限模式,不同的用户对应不同的权限。比如系统管理员拥有最高权限,可以查询、修改所有的数据和资料,成绩管理员拥有录入员工信息的权限,员工用户只能查询相关信息,而无法浏览权限外的资料。这在一定程度上满足了系统的保密性需求。

(三)界面友好、操作方便。系统采用业内先进的网络系统开发工具PHP加网页三剑客进行研发,设计的界面直观形象,内容条理清楚,易于操作,借助规范的下拉菜单和可选按钮,在很大程度上避免了误操作,无论系统后期使用者是不是计算机专业的都比较容易上手。

四、系统功能分析

(一)系统管理员。系统管理员拥有最高权限,可以根据员工入厂后的新增成绩添加数据,可以设置成绩管理员(车间主任),可以在员工离职后把车间和员工的信息进行归档锁定。

(二)车间管理员。车间管理员拥有对成绩相关信息进行处理的权限,比如增加员工、维护员工信息、安排业务、录入员工的绩效情况、对员工请假情况进行批示等等。

(三)员工拥有的功能。员工可以通过登录页面以工号和密码登录系统,选择下派的业务、查看往期绩效、上传业务完成情况和在线请假等等。

四、数据表的建设和应用

MIS系统所依据的数据库包含员工的所有重要信息,所以,所选择的数据库的安全性、可维护性和易用性是非常关键的。该系统选用强劲的关系型数据库MySQL进行开发,搭配被誉为其黄金组合的PHP网络编程语言,编写出的代码流畅、简洁,容易移植,被众多业内人士所喜爱。

(一)数据库的建立。建立数据库STMIS,选择GBK格式字符集。

CREATE DATABASE`STMIS` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

创建多个数据表。现以创建管理员表chejian_gly为例说明。

创建表chejian_gly代码:

CREATE TABLE IF NOT EXISTS `chejian_gly`(

`gly_id` int(10) NOT NULL AUTO_INCREMENT,

`gly_name` varchar(20) NOT NULL,

`gly_password` varchar(20) NOT NULL,

PRIMARY KEY (`spuser_id`)

)ENGINE=MyISAMDEFAULT CHARSET=gbk;

具体说明:

CREATE TABLE IF NOT EXISTS `chejian_gly`意思是如果数据库不存在数据表chejian_gly就创建表chejian_spuser;括号内为表的结构。

(二)对数据表中记录的操作。对数据表中的记录进行增加、编辑、删除可以用命令insert、update、delete来实现。

现在以增加员工信息为例来说明:

$ddd=time();

if(empty($ygname))

echo "姓名不能为空";

elseif(empty($_POST['ygxuehao']))

echo "工号不能为空";

elseif(empty($ygchejian))

echo "你没有选择车间";

$sortid=(float)$usec + (float)$sec;

$quer=mysql_query("insert into $xuesheng set ygname='$ ygname',ygxuehao='$ygxuehao',nianling='$ nianling',chejian='$chejian',jiguan='$jiguan',kemu='$kemu',ReleaseTime='$ddd',AmendTime='$ddd'");

if($quer)

echo "成功添加员工记录!";

else

echo "添加员工记录失败!";

?>

对记录的修改和删除方法与此类似。

五、结束语

本文所描述的应用MySQL数据库建设的企业管理信息系统可以高效、便捷、规范地管理企业信息,能够满足企业管理部门对员工管理工作的要求,值得进一步推广应用。

参考文献:

[1]刘爽.企业办公自动化管理系统的研究与设计[J].产业与科技论坛,2010,2

[2]罗建文.企业资产管理系统在发电企业中的应用研究[J].广东工业大学学报:社会科学版,2010,2

上一篇:光纤通信系统的发展与现状下一篇:彩妆项目可行性研究报告