语句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"
今天上午有网友在群里聊到是不是有新注册域名的海外域名商家的优惠活动。如果我们并非一定要在国外注册域名的话,最近年中促销期间,国内的服务商优惠力度还是比较大的,以前我们可能较多选择海外域名商家注册域名在于海外商家便宜,如今这几年国内的商家价格也不贵的。比如在前一段时间有分享到几个商家的年中活动:1、DNSPOD域名欢购活动 - 提供域名抢购活动、DNS解析折扣、SSL证书活动2、难得再次关注新网商家...
全球领先的IDC服务商华纳云“美国服务器”正式发售啦~~~~此次上线的美国服务器包含美国云服务器、美国服务器、美国高防服务器以及美国高防云服务器。针对此次美国服务器新品上线,华纳云也推出了史无前例的超低活动力度。美国云服务器低至3折,1核1G5M低至24元/月,20G DDos防御的美国服务器低至688元/月,年付再送2个月,两年送4个月,三年送6个月,且永久续费同价,更多款高性价比配置供您选择。...
imidc对日本独立服务器在搞特别促销,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制流量。注意,本次促销只有一个链接,有2个不同的优惠码,你用不同的优惠码就对应着不同的配置,价格也不一样。88美元的机器,下单后默认不管就给512G SSD,要指定用HDD那就发工单,如果需要多加一个/28(13个)IPv4,每个月32美元...官方网站:https:...
vb连接数据库为你推荐
雅虎社区福建晋江社区是什么?缓冲区溢出教程如何防止高手使用缓冲区溢出?安卓应用平台安卓手机下软件哪个网站好苹果5怎么越狱苹果5怎么越狱bt封杀北京禁用BT下载,是真的吗?为什么?网管工具网吧工具有什么?blogcn远目是什么意思?微信电话本怎么用怎么用微信打电话freebsd安装FreeBSD下如何安装ports的方法手工杀毒如何人工手动杀毒
3322动态域名 美国主机排名 韩国俄罗斯 mach5 info域名 好看的桌面背景大图 网盘申请 ibrs ftp教程 支持外链的相册 多线空间 如何建立邮箱 华为云建站 lamp什么意思 重庆服务器 阿里云邮箱怎么注册 美国主机 美国服务器 卡巴斯基免费版 ssd 更多