语句vb连接数据库

vb连接数据库  时间:2021-02-26  阅读:()
第八章数据库编程思考:SQL语言有什么缺陷本章内容应用系统如何对数据库进行操作嵌入式SQL存贮过程SQL/API(ApplicationProgrammingInterface)一组函数和程序SQL/CLI:"Call-LevelInterface"从宿主语言主程序中调用一个SQLDBMS库,而SQL语句是这个调用的参数.
ODBCJDBCSQL概述——嵌入式SQL将SQL语句嵌入到高级语言(宿主语言)使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句嵌入式SQL——系统实现实现框图:主语言+嵌入式SQL预处理主语言+函数调用主语言编译器SQLlibrary目标代码程序嵌入式SQL将SQL访问数据库的能力,与宿主语言的过程化处理的能力进行综合将SQL语句嵌入宿主语言中产生的问题:1)宿主语言如何识别SQL语句2)SQL语句如何识别宿主语言变量3)如何进行数据交换4)集合操作如何转换为记录操作嵌入式SQL——形式SQL语句加上前缀,区别于宿主语言的语句ExecSql;ex.
:ExecsqlDeleteFromStudent;预编译将具有前缀的语句,转换成宿主语言的调用语句由宿主语言的编译器生成目标码嵌入式SQL——SQLCASQLCA——SQLCommunicationAreasql通讯区域数据库工作单元←→宿主语言工作单元之间的通讯区域宿主语言→DB:请求、参数DB→宿主语言:执行的状态信息、出错信息DB→宿主语言:(查询)执行的结果嵌入式SQL——SQLCASqlca.
sqlcode(Sybase数据库):errorcode0:successSUCCESS)break;printf("sno:%s,cno:%s:%d",sno,cno,grade);}ExecsqlCloseC1;}光标的定义,打开和关闭嵌入式SQL——简单操作说明性语句数据定义语句数据控制语句涉及单行的数据操纵语句嵌入式SQL——简单操作说明性语句ExecsqlBeginDeclareSetcion;……ExecsqlEndDeclareSetcion;嵌入式SQL——简单操作涉及变量的处理变量名以':'标识,区别于数据库中的对象(表名、视图名、属性名….
.
.
)嵌入式SQL——简单操作查询Select…Into[],…From…Where…GroupBy…Having…OrderBy.
.
.
指示变量:用来指示所指的主变量的值或条件,例如主变量是否为空值是否被截断嵌入式SQL——简单操作ExecsqlSelectsno,cno,gradeInto:sno,:cno,:grade:grade_idFromscWheresno=:given_snoandcno=:given_cno;CursorFor;打开游标ExecsqlOpen;//执行查询//定位于第一行的前一行移动指针/获取数据ExecsqlFetchInto,.
.
.
嵌入式SQL——游标的使用判断是否到底sqlca.
sqlcode关闭游标ExecsqlClose;嵌入式SQL——游标的使用Current形式的Update定义游标ExecsqlDeclareCursorforForUpdateOf;打开游标Fetch游标UpdateExecsqlUpdate……WhereCurrentOf嵌入式SQL——游标的使用Current形式的Delete定义游标ExecsqlDeclareCursorfor;打开游标Fetch游标DeleteExecsqldeleteFrom…WhereCurrentOf嵌入式SQL——动态SQLSQL语句在编译时未知在运行时才知道嵌入式SQL——动态SQL主语言程序:接受用户输入的字符串转换成可执行的SQL语句两种方式:ExecSqlPrepareFROM;ExecSqlexecute;ExecSqlExecuteImmediate;EXECSQLBEGINDECLARESECTION;/*主变量说明开始*/charDeptname[20];charHsno[9];charHsname[20];charHssex[2];intHSage;intNEWAGE;EXECSQLENDDECLARESECTION;/*主变量说明结束*/longSQLCODE;EXECSQLINCLUDESQLCA;/*定义SQL通信区*/程序实例:依次检查某个系的学生记录,交互式更新某些学生年龄.
intmain(void)/*C语言主程序开始*/{intcount=0;charyn;/*变量yn代表yes或no*/printf("Pleasechoosethedepartmentname(CS/MA/IS):");scanf("%s",deptname);/*为主变量deptname赋值*/EXECSQLCONNECTTOTEST@localhost:54321USER"SYSTEM"/"MANAGER";/*连接数据库TEST*/EXECSQLDECLARESXCURSORFOR/*定义游标SX*/SELECTSno,Sname,Ssex,Sage/*SX对应的语句*/FROMStudentWHERESDept=:deptname;EXECSQLOPENSX;/*打开游标SX,指向查询结果的第一行*/for用循环结构逐条处理结果集中的记录*/{EXECSQLFETCHSXINTO:HSno,:Hsname,:HSsex,:HSage;/*推进游标,将当前数据放入主变量*/if(SQLCA.
SQLCODE!
=0)/*SQLCODE!
=0,表示操作不成功*/break;/*利用SQLCA中的状态信息决定何时退出循环*/if(count++==0)/*如果是第一行的话,先打出行头*/printf("\n%-10s%-20s%-10s%-10s\n","Sno","Sname","Ssex","Sage");printf("%-10s%-20s%-10s%-10d\n",HSno,Hsname,Hssex,HSage);/*打印查询结果*/printf("UPDATEAGE(y/n)");/*询问用户是否要更新该学生的年龄*/do{scanf("%c",&yn);}while(yn!
='N'&&yn!
='n'&&yn!
='Y'&&yn!
='y');if(yn=='y'||yn=='Y')/*如果选择更新操作*/{printf("INPUTNEWAGE:");scanf("%d",&NEWAGE);/*用户输入新年龄到主变量中*/EXECSQLUPDATEStudent/*嵌入式SQL更新语句*/SETSage=:NEWAGEWHERECURRENTOFSX;}/*对当前游标指向的学生年龄进行更新*/}EXECSQLCLOSESX;/*关闭游标SX,不再和查询结果对应*/EXECSQLCOMMITWORK;/*提交更新*/EXECSQLDISCONNECTTEST;/*断开数据库连接*/}过程化SQL关系数据库管理系统自己的过程化语言.
例如:OraclePL/SQL,MicrosoftSQLServer的Transact-SQL,IBMDB2的SQLPL等过程化SQL基本结构定义部分DECLARE变量,常量,游标等执行部分BEGINSQL语句,过程化语句,异常处理部分END过程化SQL的用处SQL2003标准给出了基于过程化SQL,来实现:存贮过程函数PL/SQL:数据库过程化语言基本结构定义部分DECLARE变量,常量,异常等说明执行部分BEGINEXCEPTIONENDPL/SQL:数据库过程化语言变量常量的定义变量定义:变量名数据类型[NOTNULL]:初值表达式常量定义:常量名数据类型CONSTANT:=常量表达式赋值语句变量名称:=表达式PL/SQL:数据库过程化语言各种控制语句IF…THEN…ENDIFIF…THEN…ELSE…ENDIFLOOP…ENDLOOPWHILE…ENDLOOPFOR…IN…LOOP…ENDLOOP存贮过程的创建,执行和删除CREATEProcedure过程名([参数1,参数2,…])AS块CALL/PERFORMProcedure过程名(参数列表)或EXECSQLCALLProcedure过程名DROPPROCEDURE过程名()存贮过程的实例CREATEPROCEDURETRANSFER(inAccountINT,outAccountINT,amountFLOAT)ASDECLARE/*定义存储过程TRANSFER,其参数为转入账户、转出账户、转账额度*/totalDepositOutFLOATtotalDepositInFloat;inAccountnumINT;BEGIN….
.
END存贮过程的实例(续)BEGIN/*检查转出账户的余额*/SELECTTotalINTOtotalDepositOutFROMAccountWHEREaccountnum=outAccount;IFtotalDepositOutISNULLTHEN/*如果转出账户不存在或账户中没有存款*/ROLLBACK;/*回滚事务*/RETURN;ENDIF;存贮过程的实例(续)IFtotalDepositOut()RETURNSAS;函数的执行作为一个表达式放到适合返回值的地方.
修改函数ALTERFUNCTION函数名1renameto函数名2课堂练习用存贮过程实现学生通过课程名来搜索该课程信息CreateproceduresearchByCname(INcourse_namechar(10))asSelectC.
CID,C.
cname,C.
teacherfromcoursesCWhereC.
cname=course_name调用该存贮过程在交互式环境中CALLsearchByCname(Database)在嵌入式环境中EXECSQLBEGINDECLARESECTIONCHARcoursename[10]EXECSQLENDDECLARESECTIONEXECSQLCALLseachByCname(:coursename)SQL/API的样例#include"sqlcli.
h"SQLHSTMThstmt;…SQLPrepare(hstmt,"InsertIntocustomervalues(……)");SQLExcute(hstmt);…是微软公司开放服务体系(WindowsOpenServicesArchitecture,WOSA)中有关数据库的一个组成部分提供了一组访问数据库的应用程序编程接口(ApplicationProgrammingInterface,API)ODBC工作原理请求连接数据库发送SQL语句为结果分配存贮空间获取执行结果或错误信息进行数据处理并提交结果事务提交或回滚断开连接用户应用程序ODBCAPI标准接口驱动程序管理器DRIVER1DRIVER2DRIVER3SybaseOracleDB2应用场景假设某个学校在SQLServer和KingbaseES上创建了两个数据库:学校人事数据库和教学科研数据库.
学校的信息系统要从这两个数据库中存取数据为了方便地与两个数据库连接,为学校人事数据库创建一个数据源名PERSON,为教学科研数据库创建一个名为EDU的数据源当要访问每一个数据库时,只要与PERSON和EDU连接即可,不需要记住使用的驱动程序、服务器名称、数据库名.
ODBC数据结构Environments:representtheDBMSinstallation.
(环境句柄)Connections:(连接句柄)loginstothedatabase.
Statements:(语句句柄)SQLstatementstobepassedtoaconnection.
Descriptions:描述符句柄,描述SQL语句的参数,结果集的元数据集合句柄是32位整数值,代表一个指针应用程序句柄之间的关系ODBC应用程序环境句柄(1:1)连接句柄(1:n)(1:1)(1:n)(1:n)数据源语句句柄描述符句柄ODBC的工作流程JDBCJAVA作为主语言JavaDatabaseConnectivity(JDBC)是一个库,定义SQL嵌入到JAVA的一系列函数驱动器管理与连接到数据源importjava.
sql.
*;Class.
forName(com.
mysql.
jdbc.
Driver);ConnectionmyCon=DriverManager.
getConnection(…);TheJDBCclasses加载mySql驱动器;URLofthedatabaseyourname,andpasswordgohere.
LoadedbyforName执行SQL语句JDBC有两种类型的语句类:1.
Statement=anobject可以有一个SQL语句作为参数,也可以没有.
2.
PreparedStatement=anobject已经有了一个SQL语句作为参数.
创建语句TheConnectionclass有方法来创建Statement和preparedStatement.
Statementstat1=myCon.
createStatement();PreparedStatementstat2=myCon.
createStatement("SELECTsid,snameFROMStudents"+"WHERESdept='cs'");createStatement不带参数,返回aStatement对象;带参数,则返回aPreparedStatement对象.
执行SQL语句JDBC查询和更新是不同的.
Statement和PreparedStatement对象有方法executeQuery和executeUpdate.
Statements类对象:需要参数才可以查询或更新.
PreparedStatements对象:不需要属性.
举例:更新stat1是一个Statement类对象:stat1.
executeUpdate("INSERTINTOStudents"+"VALUES(01111,'BrassRail',25)");举例:查询stat2是一个PreparedStatement对象,已经有参数,即查询语句"SELECTsid,snameFROMStudentsWHERESdept='cs'".
executeQuery返回一个ResultSet类对象.
ResultSetCSstudents=stat2.
executeQuery();存取结果集ResultSet类型的对象像一个光标.
该类型对象有方法:Methodnext()会把光标移到下一个,如果结束,next()返回值false.
存取元组中的分量ResultSet对象存取某一个分量,使用:MethodgetX(i),X是某种类型,i是第几个分量,它的类型是X.
例如:getString(1),getFloat(2)举例:存取元组分量CSstudents是ResultSet对象是查询句"SELECTsid,snameFROMStudentsWHERESdept='cs'"的结果.
while(CSstudents.
next()){SID=Menu.
getString(1);Sname=Menu.
getString(2);/*对变量SID以及Sname处理*/}小结:数据库编程嵌入式SQL:把SQL嵌入到传统编程语言中.
存贮过程/函数:提供一种标准的面向SQL的编程语言.
数据库之间互相连接的规范(一组函数):ODBC,JDBC作业课堂作业:PYTHON和SQLite语言如何结合答案:一般步骤#importsqlite3moduleimportsqlite3#createaconnectionobjectconn=sqlite3.
connect('.
')#createacursorobjectcur=conn.
cursor()#callthecursor'sexecute()methodtoperformSQLcommandscur.
execute('')#save(commit)thechangesconn.
commit()#closetheconnectionconn.
close()课堂作业用Python实现和mydb数据库的连接,并执行如下查询语句:1.
查找年龄小于25岁的学生,并按年龄排序2.
查找每个系学生的最大年龄创建一个表65Triple-quotes–forstringliteralsthatspanmultiplelines.
Weneedtocommitoncewearecertainaboutthechanges.
InSQLite3,beforecommitting,ajournalfileismaintained.
cur.
execute('''DROPTABLEIFEXISTSstudents;''')cur.
execute('''CREATETABLEstudents(sidintPRIMARYKEY,namechar[10]NOTNULL,deptchar[2],ageintDEFAULT20);''')conn.
commit()插入cur.
execute('''INSERTINTOstudentsVALUES(1,'smith','cs',35))conn.
commit()Use""asaplaceholderandprovidethevaluesinatuple插入多个元组tmp=[(2,'martin','cs',20),(3,'Bern','cs',28),(4,'Hone','cs',23),(5,'Lihong','ee',18),(6,'John','ee',29),(7,'Flower','ee',25),(8,'martin','ee',20),(9,'smith','ma',21),(10,'wang','ma',19)]cur.
executemany('INSERTINTOstudentsVALUES(tmp)conn.
commit()Batchinsertmultiplerows,preparingthetuplesofvaluesinalistandcallcur.
executemany()删除cur.
execute('DELETEFROMstudentsWHEREage>30')conn.
commit()修改cur.
execute('''UPDATEstudentsSETage=17WHEREname='martin'ANDdept="cs"''')conn.
commit()70查询cur.
execute('''SELECT*FROMstudentsWHEREage<25ORDERBYage''')forrowincur:printrowToretrievedataafterexecutingaSELECTstatement,thecursorcanbetreatedasaniterator.
cur.
execute('''SELECTdept,MAX(age)FROMstudentsGROUPBYdept''')forrowincur:print"dept.
=",row[0]print"MAX(age)=",row[1],"\n"

618云上Go:腾讯云秒杀云服务器95元/年起,1C2G5M三年仅288元起

进入6月,各大网络平台都开启了618促销,腾讯云目前也正在开展618云上Go活动,上海/北京/广州/成都/香港/新加坡/硅谷等多个地区云服务器及轻量服务器秒杀,最低年付95元起,参与活动的产品还包括短信包、CDN流量包、MySQL数据库、云存储(标准存储)、直播/点播流量包等等,本轮秒杀活动每天5场,一直持续到7月中旬,感兴趣的朋友可以关注本页。活动页面:https://cloud.tencent...

HostHatch(15美元)大硬盘VPS,香港NVMe,美国、英国、荷兰、印度、挪威、澳大利亚

HostHatch在当地时间7月30日发布了一系列的促销套餐,涉及亚洲和欧美的多个地区机房,最低年付15美元起,一次买2年还能免费升级双倍资源。商家成立于2011年,提供基于KVM架构的VPS主机,数据中心包括中国香港、美国、英国、荷兰、印度、挪威、澳大利亚等国家的十几个地区机房。官方网站:https://hosthatch.com/NVMe VPS(香港/悉尼)1 CPU core (12.5%...

瓜云互联:全场9折优惠,香港CN2、洛杉矶GIA高防vps套餐,充值最高返300元

瓜云互联怎么样?瓜云互联之前商家使用的面板为WHMCS,目前商家已经正式更换到了魔方云的面板,瓜云互联商家主要提供中国香港和美国洛杉矶机房的套餐,香港采用CN2线路直连大陆,洛杉矶为高防vps套餐,三网回程CN2 GIA,提供超高的DDOS防御,瓜云互联商家承诺打死退款,目前商家提供了一个全场9折和充值的促销,有需要的朋友可以看看。点击进入:瓜云互联官方网站瓜云互联促销优惠:9折优惠码:联系在线客...

vb连接数据库为你推荐
spgnuxps = getCon().prepareStatement(sql);啥意思,求注释,要是不嫌麻烦帮我把下面的也给注释了工信部备案怎样在工信部进行域名备案?要详细伪静态静态与伪静态的区别?2012年正月十五2012年正月十五 几月几号宕机人们说的宕机是什么意思gbk编码表如何制作GBK与Unicode的对照表三星s8什么时候上市大约什么时候买S8合适防钓鱼什么是IP防钓鱼和域名防钓鱼?手工杀毒手工杀毒与杀毒软件杀毒有什么区别?office2007简体中文版office2007绿色下载 office2007下载安装
万网域名 万网域名空间 duniu 主机 国外服务器网站 godaddy支付宝 mysql主机 长沙服务器 52测评网 空间论坛 中国电信测速器 重庆电信服务器托管 supercache ssl加速 rewritecond hdsky sonya 百度新闻源申请 godaddy中文 globalsign 更多