《JDBC与数据库连接.ppt》由会员分享,可在线阅读,更多相关《JDBC与数据库连接.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、JSPJSP中使用数据库中使用数据库1JSP与与JDBC数据库连接数据库连接数据库数据库JSPJSP中使用数据库中使用数据库2JDBCJDBC技术技术 JDBC(Java DataBase Connectivity):是一种可用于执是一种可用于执行行SQL语句的语句的API(Application Programming Interface,应用程序设计接口应用程序设计接口)JDBC是第一个标准化地把关系数据库和是第一个标准化地把关系数据库和Java程序集成程序集成到一起的尝试到一起的尝试;JDBC已经发挥了可以集成到已经发挥了可以集成到Java小程序和应用程序中小程序和应用程序中的所有的关系
2、数据库的能力。的所有的关系数据库的能力。JSPJSP中使用数据库中使用数据库3JDBCJDBC的能力的能力JDBC能实现的功能:能实现的功能:与一个数据库建立连接;与一个数据库建立连接;向数据库发送向数据库发送SQLSQL语句;语句;处理数据库返回的结果。处理数据库返回的结果。JSPJSP中使用数据库中使用数据库4JDBCJDBC两层模型两层模型客户机Java applet或java应用数据库服务器SQL请求请求结果存储器两层模型中,一个Java Applet或者一个Java应用程序直接同数据库连接;数据库可以在同一机器上,也可以在另外一台机器上,通过网络进行连接,此即为客户机服务器结构,用户
3、的计算机作为客户机,运行数据库的计算机作为服务器JSPJSP中使用数据库中使用数据库5JDBCJDBC三层模型三层模型客户机Java applet或java应用中间件业务规定客户机库SQL请求请求结果存储器数据库服务器存储器JSPJSP中使用数据库中使用数据库6使用使用JDBC-ODBC桥接器访问数据库桥接器访问数据库v利用ODBC驱动程序访问JDBC访问;v建立这种桥接器后,使得JDBC有能力访问所有类型的数据库;v必须设置数据源。JSPJSP中使用数据库中使用数据库7课堂练习:数据库的建立与数据源的设置课堂练习:数据库的建立与数据源的设置建立数据库建立数据库“students”(本课采用本
4、课采用SQL Server 2000数据库数据库);建立表:建立表:students;表的字段:学号姓名数学成绩英语成绩物理成绩设置数据源:设置数据源:“sun”步骤:控制面板ODBC数据源系统系统(用户)DSN添加不同数据库驱动程序完成数据源名选择数据库测试程序:测试程序:Example5_1.jspJSPJSP中使用数据库中使用数据库8JDBC-ODBCJDBC-ODBC桥接器桥接器加载桥接器驱动程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class是包java.lang中的一个类,该类调用静态方法forName就可以建立桥接器。注意:
5、处理异常。注意:处理异常。tryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);catch(ClassNotFoundExceptione)JSPJSP中使用数据库中使用数据库9连接到数据库连接到数据库使用包java.sql中的Connection类声明一个对象;使用类DriverManager调用静态方法getConnection创建这个连接对象Connectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,”loginname”,”password”);JSPJSP中使用数据库中使用数据库1
6、0例:与数据库例:与数据库studentsstudents建立连接建立连接 假设数据库students的数据源的名称为sun,建立的方法为:try)Connectioncon=DriverManage.getConnection(“jdbc:odbc:sun”,”sa”,”);catch(SQLExceptione)JSPJSP中使用数据库中使用数据库11向数据库发送向数据库发送SQLSQL语句语句首先用Statement声明一个SQL语句对象;调用连接数据库的对象con调用方法createStartment()创建SQL对象;tryStatementsql=con.createStateme
7、nt();Catch(SQLExceptione)JSPJSP中使用数据库中使用数据库12处理查询结果处理查询结果利用SQL语句对象,调用方法对表查询和修改;查询对象放在一个ResultSet类声明的对象中,即返回一个ResultSet对象:ResultSetrs=sql.executeQuery(“select*from表名”);ResultSet对象一次只能看到一个数据行,使用next()方法移到下一数据行:rs.next()JSPJSP中使用数据库中使用数据库13取得数据表中的数据取得数据表中的数据 为取得记录指针当前指向记录的各个字段的数据,可以根据字段的数据类型使用getXXX方法。
8、语法格式:语法格式:rs.getXXX(“字段名称”);针对数据库中不同字段的数据类型,取得字段数据的getXXX方法。例如:rs.getString(1)rs.getInt(“数学成绩”)JSPJSP中使用数据库中使用数据库14利用利用WhileWhile循环获取数据表中所有记录循环获取数据表中所有记录利用ResultSet对象在建立时,记录指针指向第一条记录之前,结合ResultSet对象提供的next方法,在while循环中移动记录指针,向下逐条地将数据库中的记录依次获取,在移动到记录的最后一条,由next方法返回值false来结束循环。语法结构:语法结构:while(rs.next()
9、while(rs.next()rs.getXXX(“rs.getXXX(“字段名称字段名称”);”);JSPJSP中使用数据库中使用数据库15练习拓展v将程序Example.jsp改为在dreamweaver中设计页面;v查询英语成绩大于80分的同学,结果只显示“姓名”和“英语成绩”;v增加“班级”字段,在页面显示数据。JSPJSP中使用数据库中使用数据库16思考如何在结果集中前后移动?如何按照逆序输出记录?如何指定显示一条记录?JSPJSP中使用数据库中使用数据库17游动查询(重点内容)游动查询(重点内容)Statement对象的建立:Statementstatement=con.creat
10、eStatement(inttype,intconcurrency);Type(滚动方式)默认值:TYPE_FORWARD_ONLYconcurrency(数据一致性)默认值:COUCUR_READ_ONLY此时,指针只能向前移动,而且ResultSet对象中的数据只能读而不能修改;JSPJSP中使用数据库中使用数据库18typetype的取值的取值 type的取值决定滚动方式,取值还可以是:TYPE_SCROLL_SENSITIVE指针能够向前或向后自由移动,其他ResultSet对象变动指针时,会影响指针的位置;TYPE_SCROLL_INSENSITIVE指针能够向前或向后自由移动,其他
11、ResultSet对象变动指针时,不会影响指针的位置。JSPJSP中使用数据库中使用数据库19ConcurrencyConcurrency取值取值 Concurrency取值决定是否可以用数据集更新数据库CONCUR_READ_ONLY:不能用结果集更新数据库中的表;CONCUR_UPDATEABLE:ResultSet对象中的数据可以读也可以修改,不能用结果集更新数据库中的表;JSPJSP中使用数据库中使用数据库20ResultSetResultSet的一些方法:的一些方法:previous()、beforeFirst()、afterLast()、first()、last()、isAfter
12、Last()、isBeforeFirst()、isFirst()、isLast()、getRow()、absolute(introw)。注意注意absolute(introw):absolute(introw):如果row取负值,就是倒数的行数;absolute(-1)表示移到最后一行,当移动到第一行前面或最后一行的后面时,该方法返回false。JSPJSP中使用数据库中使用数据库21逆序取得数据表中的记录逆序取得数据表中的记录顺序查找:顺序查找:Statementsql=con.createStatement();逆序查找:逆序查找:Statementsql=con.createStatem
13、ent(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);/返回可滚动的结果集,返回可滚动的结果集,rsrs的创建方法不改变。的创建方法不改变。的创建方法不改变。的创建方法不改变。JSPJSP中使用数据库中使用数据库22逆序取得数据表中的记录逆序取得数据表中的记录(2)v把记录指针移动到数据表记录的最后一条;v结合ResultSet对象提供的previous方法,在while循环中移动记录指针,向上逐条地将数据库中的记录依次获取;v在移动到记录的最前一条,由previous方法返回值false来结束循环。rs.last();
14、out.print(该表共有+rs.getRow()+条记录);rs.afterlast();while(rs.previous()rs.getXXX(“字段名称”);JSPJSP中使用数据库中使用数据库23SQLSQL语言语言SQL(StructuredQueryLanguage,结构查询语言):是关系型数据库管理系统的标准语言,主要功能是与各种数据库进行联系、通信,实现对数据库的控制与管理;关系数据库系统:Oracle、Sybase、MicrosoftSQLServer、Acess等,都采用SQL作为数据库的操作语言。JSPJSP中使用数据库中使用数据库24DML(Data Manipul
15、ation Language,数据操作语言);用于执行数据库的检索或者修改数据,其分为以下几个语句:SELECT用于检索数据;INSERT用于增加数据到数据库;UPDATE用于从数据库中修改现存的数据;DELETE用于从数据库中删除数据;JSPJSP中使用数据库中使用数据库25SELECT语句是SQL的核心,主要用于查询数据库并检索匹配指定条件的选择数据,语法格式为:SELECT字段名称,字段名称2,FROM数据表名,数据表名2GROUPBY”字段名称”HAVING”分组条件”ORDERBY”字段名称”升序(ASC)|降序(DESC)JSPJSP中使用数据库中使用数据库26练习数据库:数据库:
16、student数据源:数据源:student程序:程序:sql_select.jsp(数据查询语句测试数据查询语句测试)sql_recordPoint.jsp(数据插入、删除、修改测试数据插入、删除、修改测试)sql_while.jsp(逆序获取记录逆序获取记录)sql_iud.jsp(记录指针记录指针)要求:利用要求:利用4个个jsp程序,练习程序,练习sql语句。语句。JSPJSP中使用数据库中使用数据库27SELECT基本语句的应用基本SELECT语句是指将数据表中的数据在不经过条件提取的情况下提取的全部数据;格式:SELECT*FROMSTUDENT(表名)例如:SELECTID,NA
17、ME,CHINESE,MATHS,PYSICS,CHEMISTRYFROMSTUDENTJSPJSP中使用数据库中使用数据库28WHEREWHERE子句的应用子句的应用可选语句,是对数据表中的数据进行有条件的查询;语法结构:语法结构:where“查询数据满足的条件”;LIKE运算符:满足与用户规定格式相同的记录,可与”%”,”_”,”#”配合使用;通配符”%”:用来代替一个未知的字符串例如:select*fromstudentwherenamelike李%,查找姓李的所有同学的数据JSPJSP中使用数据库中使用数据库29通配符通配符“_”“_”用来代替一个未知的字符例如:select*from
18、studentwherenamelike李_语句意义:查找只有两个字符,而且第一个字符必须为“李”的同学的数据;JSPJSP中使用数据库中使用数据库30比较运算符比较运算符运算符意义 =等于等于 大于大于 =大于等于大于等于 =小于等于小于等于 不等于不等于JSPJSP中使用数据库中使用数据库31运用比较运算符运用比较运算符(1)等于运算符等于运算符(=)语句实例语句实例:select*fromstudentwherechinese=92大于运算符大于运算符:()语句实例语句实例:select*fromstudentwherechinese75小于运算符小于运算符:()语句实例语句实例:sel
19、ect*fromstudentwherechinese=)语句实例:语句实例:select*fromstudentwherechinese=75小于等于运算符:(=)语句实例:语句实例:select*fromstudentwherechinese=75不等于运算符:()语句实例:语句实例:select*fromstudentwherechinese75JSPJSP中使用数据库中使用数据库33NOTNOT运算符运算符语法结构:语法结构:wherenotwherenot字段名称字段名称1like1like;或者或者wherenotwherenot字段名称字段名称1notlike1notlike;语
20、句实例:语句实例:select*from student where not name like select*from student where not name like 李李李李%;或者:或者:select*from student where name not like select*from student where name not like 李李李李%;语句意义:语句意义:查询不姓李的同学的数据。查询不姓李的同学的数据。JSPJSP中使用数据库中使用数据库34ININ运算符语法结构运算符语法结构语法结构:语法结构:wherewhere字段名称字段名称in(in(值值1 1,值
21、,值);语句实例:语句实例:select*fromstudentwherenamein(select*fromstudentwherenamein(李凌霜李凌霜,高山高山雪雪)语句意义:语句意义:查询姓名为李凌霜,高山雪二位同学的数据。查询姓名为李凌霜,高山雪二位同学的数据。JSPJSP中使用数据库中使用数据库35BETWEENANDBETWEENAND运算符运算符语法结构:语法结构:wherewhere字段名称字段名称betweenbetween值值1and1and值值2;2;语句实例:语句实例:select*fromstudentwheremathsbetween80and90;selec
22、t*fromstudentwheremathsbetween80and90;语句意义:语句意义:查询数学成绩在查询数学成绩在8080分分9090分之间的同学的数据分之间的同学的数据.JSPJSP中使用数据库中使用数据库36ANDAND运算符运算符语法结构:语法结构:wherewhere查询条件查询条件1and1and查询条件查询条件2and;2and;语句实例:语句实例:select*fromstudentwheremaths80andchinese80andchinese90;语句意义:语句意义:查询数学成绩高于查询数学成绩高于8080分并且语文成绩低于分并且语文成绩低于9090分的同学的数
23、据分的同学的数据。JSPJSP中使用数据库中使用数据库37OROR运算符运算符语法结构:语法结构:where where 查询条件查询条件查询条件查询条件1 or 1 or 查询条件查询条件查询条件查询条件2 or;2 or;语句实例:语句实例:select*from student where maths60 and chinese60;select*from student where maths60 and chinese60;havingavg(chinese)60;语句意义:语句意义:得到班级语文平均成绩高于得到班级语文平均成绩高于6060分的班级以及语文成绩分的班级以及语文成绩平均
24、分数。平均分数。JSPJSP中使用数据库中使用数据库41INSERTINSERT语句语句用于往表格中插入或者增加一行数据。用于往表格中插入或者增加一行数据。语法格式:语法格式:insertintinsertint数据表名称(字段名称数据表名称(字段名称1 1,字段名称字段名称N N)values(values(字段字段1 1的值,的值,字段,字段N N的值的值);语法实例:语法实例:insertintostudent(name,sex,class,chinese,maths,physics,chemistry)valuesinsertintostudent(name,sex,class,chi
25、nese,maths,physics,chemistry)values(乔峰乔峰,男男,天龙班天龙班,99,79,67,88),99,79,67,88)语句意义:语句意义:向数据表向数据表向数据表向数据表studentstudent中插入一个同学的成绩。中插入一个同学的成绩。中插入一个同学的成绩。中插入一个同学的成绩。JSPJSP中使用数据库中使用数据库42UPDATAUPDATA语句语句 用于更新或者改变匹配指定条件的记录,通过构造一个where子句来实现的。语句格式:语句格式:updataupdata数据表名称数据表名称setset字段名称字段名称1=1=更新的值更新的值11,字段名称,字
26、段名称2=2=更新更新的值的值2where2where字段名称字段名称11运算符运算符 值值and|or;and|or;语句实例:语句实例:updatestudentsetname=updatestudentsetname=刘成功刘成功,chinese=90,maths=92,chinese=90,maths=92wherename=wherename=刘成忠刘成忠 语句意义:语句意义:把数据表把数据表studentstudent中名字为刘成忠的同学的名字改为刘成功,并把中名字为刘成忠的同学的名字改为刘成功,并把语文成绩改为语文成绩改为9090分,数学成绩改为分,数学成绩改为9292分。分。J
27、SPJSP中使用数据库中使用数据库43DELETEDELETE语句语句用来从表中删除记录或者行。用来从表中删除记录或者行。语句格式:语句格式:deletefromdeletefrom数据表的名称数据表的名称wherewhere字段名称字段名称11运算符运算符 值值1and|or;1and|or;语句实例:语句实例:deletestudentwherename=deletestudentwherename=李凌霜李凌霜 语句意义语句意义:把数据表把数据表studentstudent中名字为李凌霜的同学的记录删除去。中名字为李凌霜的同学的记录删除去。JSPJSP中使用数据库中使用数据库44随机查询
28、随机查询 方法方法:用Math类的静态方法random()可以产生一个大于0小于1的随机数;公式:公式:inti=(int)(Math.random()*number+1);意义意义:产生一个1到number之间的随机数,根据这个随机数将游标移动到相应的行,并输出该行。JSPJSP中使用数据库中使用数据库45关键程序代码解析:关键程序代码解析:intj=0;while(抽取数目0)inti=(int)(Math.random()*number+1);/随机获取一个1到number之间的数。booleanboo=false;for(intm=0;mold_i.length;m+)/查找该行是否已
29、被取出。if(i=old_im)boo=true;if(boo)continue;/假如该行已被取出,结束本次循环,继续产生随机数。rs.absolute(i);JSPJSP中使用数据库中使用数据库46参数查询参数查询 学习的重点在于如何根据查询条件的关键字,进行数据查询。Stringname=request.getParameter(name);trycon=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition=SELECT*FROMstudentsWHERE姓名=+n
30、ame+;rs=sql.executeQuery(condition);JSPJSP中使用数据库中使用数据库47排序查询排序查询 在SQL语句中使用Orderby子语句,对记录排序,例如:按照总成绩排序查询的SQL语句,select*from student order by 数学成绩+英语成绩+物理成绩con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition=SELECT*FROMstudentsORDERBY+name;rs=sql.executeQuery(co
31、ndition);JSPJSP中使用数据库中使用数据库48更新记录更新记录 Statement对象调用的方法为:方法为:publicintexecuteUpdate(StringsqlStatement);其中,sqlStatement实现对数据库表中记录的字段值的更新;例如:例如:executeUpdate(“updatestudentsset数学成绩=88where姓名=王名”);意义:意义:对王名同学的数据成绩修改为88;注意:注意:当查询语句返回结果集后,没有立即输出结果集的结果,而是接着执行了更新语句,那么结果集就不能输出记录了,要想输出记录就必须重新返回结果集。JSPJSP中使用数
32、据库中使用数据库49代码解析:代码解析:con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition1=UPDATEstudentsSET数学成绩=+newMath+WHERE姓名=+name+,condition2=UPDATEstudentsSET英语成绩=+newEnglish+WHERE姓名=+name+,condition3=UPDATEstudentsSET物理成绩=+newPhysics+WHERE姓名=+name+;/执行更新操作:JSPJSP中使用数据库
33、中使用数据库50添加记录添加记录方法:方法:使用SQL语句添加新的记录,Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);例如:例如:executeUpdate(“insetintstudentsvalues(199911,美丽家,100,99,98)”);意义:意义:添加一条新的记录;注意:注意:当查询语句返回结果集后,没有立即输出结果集的结果,而是接着执行了添加语句,那么结果集就不能输出记录了,要想输出记录就必须重新返回结果集。JSPJSP中使用数据库中使用数据库51代码解析:代码解析:con=DriverManager.
34、getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition=INSERTINTOstudentsVALUES+(+number+,+name+,+m+,+e+,+p+);sql.executeUpdate(condition);/执行添加操作:/显示添加新记录后表中的记录:/添加新记录后的表:rs=sql.executeQuery(SELECT*FROMstudentsORDERBY学号);JSPJSP中使用数据库中使用数据库52删除记录删除记录方法:方法:使用SQL语句,利用Statement对象调用方
35、法方法:publicintexecuteUpdate(StringsqlStatement);例如:例如:executeUpdate(“deletefromstudentswhere学号=199904”);意义:意义:删除学号是19990的记录。注意:注意:当查询语句返回结果集后,没有立即输出结果集的结果,而是接着执行了删除语JSPJSP中使用数据库中使用数据库53代码解析:代码解析:con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();/删除操作:StringdeleteAll=DELETEF
36、ROMstudentsWHERE学号+=+number+;sql.executeUpdate(deleteAll);/删除记录后的表:rs=sql.executeQuery(SELECT*FROMstudentsORDERBY学号);JSPJSP中使用数据库中使用数据库54分页显示记录分页显示记录原理解析:原理解析:原理解析:原理解析:假设总记录为假设总记录为m,每页显示数量是,每页显示数量是n,那么总页数的计算公式是:那么总页数的计算公式是:如果m除以n的余数是n,总页数等于m除以n的商加1;如果m除以n的余数等于0,总页数等于m除以n的商。即:即:总的页数总的页数=(m%n)=0?(m/n
37、)(m/n+1);如果准备显示第如果准备显示第p页的内容,应当把游标移动到第页的内容,应当把游标移动到第(p-1)*n+1条记条记录处。录处。JSPJSP中使用数据库中使用数据库55关键程序代码解析:关键程序代码解析:JSPJSP中使用数据库中使用数据库56连接连接oracleoracle数据库数据库1.可以通过JDBC-ODBC桥接器和Oracle数据库建立连接,依赖ODBC,方法同SQLServer,这里介绍通过直接加载Oracle数据库驱动程序来连接数据库。2.复制classes12.zip到JDK的目录“lib/ext”下面,3.加载驱动程序:class.forName(“oracle
38、.jdbc.driver.OracleDriver”);4.建立连接:Connectionconn=DriverManager.getConnection(“jdbc:oracle:thin:主机host:端口号:数据库名”,”用户名”,”密码”);JSPJSP中使用数据库中使用数据库57关键程序代码解析:关键程序代码解析:JSPJSP中使用数据库中使用数据库58连接连接MySqlMySql数据库数据库加载驱动程序:加载驱动程序:class.forName(“org.gjt.mm.mysql.Driver”).newInstance();建立连接:建立连接:Connectionconn=Dri
39、verManage.getConnection(“jdbc:mysql:/host:Port:数据库名”,”用户名”,”密码”);JSPJSP中使用数据库中使用数据库59关键程序代码解析:关键程序代码解析:JSPJSP中使用数据库中使用数据库60查询查询ExcelExcel电子表格电子表格 有时需要查询Excel或更新删除Excel电子表格的内容,可以通过JDBC-ODBC桥接器访问Excel表格,与访问其他数据库不同。设置数据源:设置数据源:数据源的驱动程序是MicrosoftExcelDriver;选择表选择表:必须在电子表格中选出一工作区作为连接时使用的表,在Excel电子表格中拖动鼠标
40、选出范围,“插入”-“名称”-“定义”,创建“品名”JSPJSP中使用数据库中使用数据库61关键程序代码解析:关键程序代码解析:tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptione)trycon=DriverManager.getConnection(jdbc:odbc:star,);sql=con.createStatement();rs=sql.executeQuery(SELECT*FROM品名);JSPJSP中使用数据库中使用数据库62本章小结本章小结 数据库连接对动态网站来说是最为重要的部分,java连接数据库的技术是JDBC,java可以通过JDBC和JDBC-ODBC桥访问关系型数据库。JDBC是一种可用于SQL语句的javaAPI,它由一些java语言编写的类和界面组成,很多数据库系统带有JDBC驱动程序,java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等,而这些具体操作必须由SQL命令来完成。