JDBC与数据库连接.ppt

上传人:max****ui 文档编号:11549370 上传时间:2020-04-28 格式:PPT 页数:62 大小:230.50KB
返回 下载 相关 举报
JDBC与数据库连接.ppt_第1页
第1页 / 共62页
JDBC与数据库连接.ppt_第2页
第2页 / 共62页
JDBC与数据库连接.ppt_第3页
第3页 / 共62页
点击查看更多>>
资源描述
JSP与JDBC数据库连接,深圳职业技术学院范新灿,数据库,JDBC技术,JDBC(JavaDataBaseConnectivity):是一种可用于执行SQL语句的API(ApplicationProgrammingInterface,应用程序设计接口)JDBC是第一个标准化地把关系数据库和Java程序集成到一起的尝试;JDBC已经发挥了可以集成到Java小程序和应用程序中的所有的关系数据库的能力。,JDBC的能力,JDBC能实现的功能:与一个数据库建立连接;向数据库发送SQL语句;处理数据库返回的结果。,JDBC两层模型,两层模型中,一个JavaApplet或者一个Java应用程序直接同数据库连接;数据库可以在同一机器上,也可以在另外一台机器上,通过网络进行连接,此即为客户机服务器结构,用户的计算机作为客户机,运行数据库的计算机作为服务器,JDBC三层模型,使用JDBC-ODBC桥接器访问数据库,利用ODBC驱动程序访问JDBC访问;建立这种桥接器后,使得JDBC有能力访问所有类型的数据库;必须设置数据源。,课堂练习:数据库的建立与数据源的设置,建立数据库“students”(本课采用SQLServer2000数据库);建立表:students;表的字段:学号姓名数学成绩英语成绩物理成绩设置数据源:“sun”步骤:控制面板ODBC数据源系统(用户)DSN添加不同数据库驱动程序完成数据源名选择数据库测试程序:Example5_1.jsp,JDBC-ODBC桥接器,加载桥接器驱动程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class是包java.lang中的一个类,该类调用静态方法forName就可以建立桥接器。注意:处理异常。tryClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);catch(ClassNotFoundExceptione),连接到数据库,使用包java.sql中的Connection类声明一个对象;使用类DriverManager调用静态方法getConnection创建这个连接对象Connectioncon=DriverManager.getConnection(“jdbc:odbc:数据源名字”,”loginname”,”password”);,例:与数据库students建立连接,假设数据库students的数据源的名称为sun,建立的方法为:try)Connectioncon=DriverManage.getConnection(“jdbc:odbc:sun”,”sa”,”);catch(SQLExceptione),向数据库发送SQL语句,首先用Statement声明一个SQL语句对象;调用连接数据库的对象con调用方法createStartment()创建SQL对象;tryStatementsql=con.createStatement();Catch(SQLExceptione),处理查询结果,利用SQL语句对象,调用方法对表查询和修改;查询对象放在一个ResultSet类声明的对象中,即返回一个ResultSet对象:ResultSetrs=sql.executeQuery(“select*from表名”);ResultSet对象一次只能看到一个数据行,使用next()方法移到下一数据行:rs.next(),取得数据表中的数据,为取得记录指针当前指向记录的各个字段的数据,可以根据字段的数据类型使用getXXX方法。语法格式:rs.getXXX(“字段名称”);针对数据库中不同字段的数据类型,取得字段数据的getXXX方法。例如:rs.getString(1)rs.getInt(“数学成绩”),利用While循环获取数据表中所有记录,利用ResultSet对象在建立时,记录指针指向第一条记录之前,结合ResultSet对象提供的next方法,在while循环中移动记录指针,向下逐条地将数据库中的记录依次获取,在移动到记录的最后一条,由next方法返回值false来结束循环。语法结构:while(rs.next()rs.getXXX(“字段名称”);,练习拓展,将程序Example.jsp改为在dreamweaver中设计页面;查询英语成绩大于80分的同学,结果只显示“姓名”和“英语成绩”;增加“班级”字段,在页面显示数据。,思考,如何在结果集中前后移动?如何按照逆序输出记录?如何指定显示一条记录?,游动查询(重点内容),Statement对象的建立:Statementstatement=con.createStatement(inttype,intconcurrency);Type(滚动方式)默认值:TYPE_FORWARD_ONLYconcurrency(数据一致性)默认值:COUCUR_READ_ONLY此时,指针只能向前移动,而且ResultSet对象中的数据只能读而不能修改;,type的取值,type的取值决定滚动方式,取值还可以是:TYPE_SCROLL_SENSITIVE指针能够向前或向后自由移动,其他ResultSet对象变动指针时,会影响指针的位置;TYPE_SCROLL_INSENSITIVE指针能够向前或向后自由移动,其他ResultSet对象变动指针时,不会影响指针的位置。,Concurrency取值,Concurrency取值决定是否可以用数据集更新数据库CONCUR_READ_ONLY:不能用结果集更新数据库中的表;CONCUR_UPDATEABLE:ResultSet对象中的数据可以读也可以修改,不能用结果集更新数据库中的表;,ResultSet的一些方法:,previous()、beforeFirst()、afterLast()、first()、last()、isAfterLast()、isBeforeFirst()、isFirst()、isLast()、getRow()、absolute(introw)。注意absolute(introw):如果row取负值,就是倒数的行数;absolute(-1)表示移到最后一行,当移动到第一行前面或最后一行的后面时,该方法返回false。,逆序取得数据表中的记录,顺序查找:Statementsql=con.createStatement();逆序查找:Statementsql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);/返回可滚动的结果集,rs的创建方法不改变。,逆序取得数据表中的记录(2),把记录指针移动到数据表记录的最后一条;结合ResultSet对象提供的previous方法,在while循环中移动记录指针,向上逐条地将数据库中的记录依次获取;在移动到记录的最前一条,由previous方法返回值false来结束循环。rs.last();out.print(该表共有+rs.getRow()+条记录);rs.afterlast();while(rs.previous()rs.getXXX(“字段名称”);,SQL语言,SQL(StructuredQueryLanguage,结构查询语言):是关系型数据库管理系统的标准语言,主要功能是与各种数据库进行联系、通信,实现对数据库的控制与管理;关系数据库系统:Oracle、Sybase、MicrosoftSQLServer、Acess等,都采用SQL作为数据库的操作语言。,DML(DataManipulationLanguage,数据操作语言);,用于执行数据库的检索或者修改数据,其分为以下几个语句:SELECT用于检索数据;INSERT用于增加数据到数据库;UPDATE用于从数据库中修改现存的数据;DELETE用于从数据库中删除数据;,SELECT语句,是SQL的核心,主要用于查询数据库并检索匹配指定条件的选择数据,语法格式为:SELECT字段名称,字段名称2,FROM数据表名,数据表名2GROUPBY”字段名称”HAVING”分组条件”ORDERBY”字段名称”升序(ASC)|降序(DESC),练习,数据库:student数据源:student程序:sql_select.jsp(数据查询语句测试)sql_recordPoint.jsp(数据插入、删除、修改测试)sql_while.jsp(逆序获取记录)sql_iud.jsp(记录指针)要求:利用4个jsp程序,练习sql语句。,SELECT基本语句的应用,基本SELECT语句是指将数据表中的数据在不经过条件提取的情况下提取的全部数据;格式:SELECT*FROMSTUDENT(表名)例如:SELECTID,NAME,CHINESE,MATHS,PYSICS,CHEMISTRYFROMSTUDENT,WHERE子句的应用,可选语句,是对数据表中的数据进行有条件的查询;语法结构:where“查询数据满足的条件”;LIKE运算符:满足与用户规定格式相同的记录,可与”%”,”_”,”#”配合使用;通配符”%”:用来代替一个未知的字符串例如:select*fromstudentwherenamelike李%,查找姓李的所有同学的数据,通配符“_”,“_”用来代替一个未知的字符例如:select*fromstudentwherenamelike李_语句意义:查找只有两个字符,而且第一个字符必须为“李”的同学的数据;,比较运算符,运用比较运算符(1),等于运算符(=)语句实例:select*fromstudentwherechinese=92大于运算符:()语句实例:select*fromstudentwherechinese75小于运算符:(=75小于等于运算符:()语句实例:select*fromstudentwherechinese75,NOT运算符,语法结构:wherenot字段名称1like;或者wherenot字段名称1notlike;语句实例:select*fromstudentwherenotnamelike李%;或者:select*fromstudentwherenamenotlike李%;语句意义:查询不姓李的同学的数据。,IN运算符语法结构,语法结构:where字段名称in(值1,值);语句实例:select*fromstudentwherenamein(李凌霜,高山雪)语句意义:查询姓名为李凌霜,高山雪二位同学的数据。,BETWEENAND运算符,语法结构:where字段名称between值1and值2;语句实例:select*fromstudentwheremathsbetween80and90;语句意义:查询数学成绩在80分90分之间的同学的数据.,AND运算符,语法结构:where查询条件1and查询条件2and;语句实例:select*fromstudentwheremaths80andchinese90;语句意义:查询数学成绩高于80分并且语文成绩低于90分的同学的数据。,OR运算符,语法结构:where查询条件1or查询条件2or;语句实例:select*fromstudentwheremaths0)inti=(int)(Math.random()*number+1);/随机获取一个1到number之间的数。booleanboo=false;for(intm=0;mold_i.length;m+)/查找该行是否已被取出。if(i=old_im)boo=true;if(boo)continue;/假如该行已被取出,结束本次循环,继续产生随机数。rs.absolute(i);,参数查询,学习的重点在于如何根据查询条件的关键字,进行数据查询。Stringname=request.getParameter(name);trycon=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition=SELECT*FROMstudentsWHERE姓名=+name+;rs=sql.executeQuery(condition);,排序查询,在SQL语句中使用Orderby子语句,对记录排序,例如:按照总成绩排序查询的SQL语句,select*fromstudentorderby数学成绩+英语成绩+物理成绩con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition=SELECT*FROMstudentsORDERBY+name;rs=sql.executeQuery(condition);,更新记录,Statement对象调用的方法为:publicintexecuteUpdate(StringsqlStatement);其中,sqlStatement实现对数据库表中记录的字段值的更新;例如:executeUpdate(“updatestudentsset数学成绩=88where姓名=王名”);意义:对王名同学的数据成绩修改为88;注意:当查询语句返回结果集后,没有立即输出结果集的结果,而是接着执行了更新语句,那么结果集就不能输出记录了,要想输出记录就必须重新返回结果集。,代码解析:,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+;/执行更新操作:,添加记录,方法:使用SQL语句添加新的记录,Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);例如:executeUpdate(“insetintstudentsvalues(199911,美丽家,100,99,98)”);意义:添加一条新的记录;注意:当查询语句返回结果集后,没有立即输出结果集的结果,而是接着执行了添加语句,那么结果集就不能输出记录了,要想输出记录就必须重新返回结果集。,代码解析:,con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();Stringcondition=INSERTINTOstudentsVALUES+(+number+,+name+,+m+,+e+,+p+);sql.executeUpdate(condition);/执行添加操作:/显示添加新记录后表中的记录:/添加新记录后的表:rs=sql.executeQuery(SELECT*FROMstudentsORDERBY学号);,删除记录,方法:使用SQL语句,利用Statement对象调用方法:publicintexecuteUpdate(StringsqlStatement);例如:executeUpdate(“deletefromstudentswhere学号=199904”);意义:删除学号是19990的记录。注意:当查询语句返回结果集后,没有立即输出结果集的结果,而是接着执行了删除语,代码解析:,con=DriverManager.getConnection(jdbc:odbc:sun,sa,);sql=con.createStatement();/删除操作:StringdeleteAll=DELETEFROMstudentsWHERE学号+=+number+;sql.executeUpdate(deleteAll);/删除记录后的表:rs=sql.executeQuery(SELECT*FROMstudentsORDERBY学号);,分页显示记录,原理解析:假设总记录为m,每页显示数量是n,那么总页数的计算公式是:如果m除以n的余数是n,总页数等于m除以n的商加1;如果m除以n的余数等于0,总页数等于m除以n的商。即:总的页数=(m%n)=0?(m/n)(m/n+1);如果准备显示第p页的内容,应当把游标移动到第(p-1)*n+1条记录处。,关键程序代码解析:,连接oracle数据库,可以通过JDBC-ODBC桥接器和Oracle数据库建立连接,依赖ODBC,方法同SQLServer,这里介绍通过直接加载Oracle数据库驱动程序来连接数据库。复制classes12.zip到JDK的目录“lib/ext”下面,加载驱动程序:class.forName(“oracle.jdbc.driver.OracleDriver”);建立连接:Connectionconn=DriverManager.getConnection(“jdbc:oracle:thin:主机host:端口号:数据库名”,”用户名”,”密码”);,关键程序代码解析:,连接MySql数据库,加载驱动程序:class.forName(“org.gjt.mm.mysql.Driver”).newInstance();建立连接:Connectionconn=DriverManage.getConnection(“jdbc:mysql:/host:Port:数据库名”,”用户名”,”密码”);,关键程序代码解析:,查询Excel电子表格,有时需要查询Excel或更新删除Excel电子表格的内容,可以通过JDBC-ODBC桥接器访问Excel表格,与访问其他数据库不同。设置数据源:数据源的驱动程序是MicrosoftExcelDriver;选择表:必须在电子表格中选出一工作区作为连接时使用的表,在Excel电子表格中拖动鼠标选出范围,“插入”-“名称”-“定义”,创建“品名”,关键程序代码解析:,tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptione)trycon=DriverManager.getConnection(jdbc:odbc:star,);sql=con.createStatement();rs=sql.executeQuery(SELECT*FROM品名);,本章小结,数据库连接对动态网站来说是最为重要的部分,java连接数据库的技术是JDBC,java可以通过JDBC和JDBC-ODBC桥访问关系型数据库。JDBC是一种可用于SQL语句的javaAPI,它由一些java语言编写的类和界面组成,很多数据库系统带有JDBC驱动程序,java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等,而这些具体操作必须由SQL命令来完成。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!