使用java实现数据库编程_第1页
使用java实现数据库编程_第2页
使用java实现数据库编程_第3页
使用java实现数据库编程_第4页
使用java实现数据库编程_第5页
免费预览已结束,剩余30页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章JDBC预习检查JDBC的主要作用是什么?JDBC访问数据时常用的类和接口有哪些,它们的作用是什么?JDBC访问数据的步骤是什么?PreparedStatement与Statement相比,具有什么优势?集中测试2/35回顾与作业点评为什么要进行用户权限管理?如何实现创建用户并授权?普通用户是否可以修改root用户密码?转账过程为什么需要进行事务处理?提问作业点评点评作业的提交情况和共性问题3/35本章任务使用纯Java方式连接数据库使用JDBC查询所有宠物主人信息使用JDBC插入宠物信息4/35本章目标理解JDBC原理掌握Connection接口的使用掌握Statement接口的使用掌握ResultSet接口的使用掌握PreparedStatement接口的使用5/35为什么需要JDBCJDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力Java应用程序JDBCJDBCJSP/Servlet客户端数据库服务器应用服务器数据库服务器客户端6/35JDBC的工作原理JDBCAPI提供者:Sun公司内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:DriverManager类Connection接口Statement接口ResultSet接口DriverManager提供者:Sun公司作用:管理各种不同的JDBC驱动JDBC驱动提供者:数据库厂商作用:负责连接各种不同的数据库MySQLOracleJDBCAPIJDBCDriverManagerJDBC驱动JDBC驱动Java应用程序7/35JDBCAPIJDBCAPI主要功能:与数据库建立连接、执行SQL语句、处理结果DriverManager:依据数据库的不同,管理JDBC驱动Connection:负责连接数据库并担任传送数据的任务Statement:由Connection产生、负责执行SQL语句ResultSet:负责保存Statement执行后所产生的查询结果ConnectionDriverManagerStatementResultSet客户端数据库服务器12348/35try{Class.forName(JDBC驱动类);}……try{Connectioncon=DriverManager.getConnection(URL,数据库用户名,密码);

Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMtable1;");

while(rs.next()){intx=rs.getInt("a");Strings=rs.getString("b");floatf=rs.getFloat("c");}rs.close();stmt.close();con.close();}……2、与数据库建立连接3、发送SQL语句,并得到返回结果4、处理返回结果1、加载JDBC驱动URL用来标识数据库5、释放资源JDBC编程模板

与步骤类似9/35JDBC驱动5-1JDBC驱动由数据库厂商提供在个人开发与测试中,可以使用JDBC-ODBC桥连方式在生产型开发中,推荐使用纯Java驱动方式DBServerDBServerJDBCAPIJDBCDriverManager纯Java驱动JDBC–ODBC桥Java应用程序ODBC10/35JDBC驱动5-2使用JDBC-ODBC桥方式连接数据库将对JDBCAPI的调用,转换为对另一组数据库连接API的调用优点:可以访问所有ODBC可以访问的数据库缺点:执行效率低、功能不够强大JDBC-ODBC桥Java应用程序JDBCAPIODBCAPIODBC层DBServer11/35JDBC驱动5-3使用JDBC-ODBC进行桥连配置数据源:控制面板ODBC数据源系统DNS编程获取连接……Connectionconn=null;try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptione){ ……}try{

conn=DriverManager.getConnection("jdbc:odbc:myDB","root","root");//省略代码……}catch(SQLExceptione){ ……}finally{ try{ conn.close(); }catch(SQLExceptione){ …… }}关闭连接建立连接加载驱动必须进行相关异常处理12/35示例JDBC驱动5-4使用纯Java方式连接数据库由JDBC驱动直接访问数据库优点:完全Java代码,快速、跨平台缺点:访问不同的数据库需要下载专用的JDBC驱动JDBC

驱动Java应用程序JDBCAPIDBServer13/35JDBC驱动5-5……Connectionconn=null;try{ Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){ ……}try{ conn=DriverManager.getConnection(

"jdbc:mysql://localhost:3306/epet","epetadmin","0000"); //省略代码……}catch(SQLExceptione){ ……}finally{ try{ conn.close(); }catch(SQLExceptione){ …… }}关闭连接建立连接加载驱动必须进行相关异常处理演示示例1:使用纯Java方式连接数据库14/35示例学员操作——使用纯Java方式连接数据库需求说明数据库为MySQL数据库名“epet”,用户名“epetadmin”,密码“0000”使用纯Java方式连接该数据库如果连接成功,输出“建立连接成功!”如果连接失败,输出“建立连接失败!”进行相关异常处理练习完成时间:20分钟15/35常见问题及解决办法代码规范问题调试技巧共性问题集中讲解共性问题集中讲解16/35JDBC应用对宠物和主人信息进行管理宠物和主人信息存储在MySQL数据库中通过JDBC对宠物和主人进行增、删、改、查字段名字段说明字段类型其他id编号INT主键、自增name昵称VARCHAR(12)health健康值INTlove亲密度INTstrain品种VARCHAR(20)字段名字段说明字段类型其他id编号INT主键、自增name姓名VARCHAR(12)password密码VARCHAR(20)money元宝数INT17/35dogmaster使用Statement添加宠物……Connectionconn=null;Statementstmt=null;……//建立连接……stmt=conn.createStatement();StringBuffersbSql=newStringBuffer( "insertintodog(name,health,love,strain)values('");sbSql.append(name+"',");sbSql.append(health+",");sbSql.append(love+",'");sbSql.append(strain+"')");stmt.execute(sbSql.toString());…stmt.close();conn.close();执行SQL语句获取Statement对象关闭Statement对象声明Statement变量示例也可使用:stmt.executeUpdate(sbSql.toString());演示示例2:使用Statement添加宠物18/35使用Statement更新宠物Connectionconn=null;Statementstmt=null;…//建立连接……//更新狗狗信息到数据库stmt=conn.createStatement();Stringsql="updatedogsethealth=80,love=15whereid=1";intresult=stmt.executeUpdate(sql);…stmt.close();conn.close();示例执行SQL语句获取Statement对象关闭Statement对象声明Statement变量更新、添加、删除操作只是SQL语句不同演示示例3:使用Statement更新宠物19/35使用Statement和ResultSet查询宠物Connectionconn=null;Statementstmt=null;ResultSetrs=null;…//建立连接……stmt=conn.createStatement();rs=stmt.executeQuery("select*fromdog");……while(

rs.next()

){ System.out.print(

rs.getInt(1)

+"\t"); System.out.print(

rs.getString(2)

+"\t"); System.out.print(rs.getInt("health")+"\t"); ……}……rs.close();stmt.close();conn.close();执行SQL语句进行查询,结果赋给结果集变量rs注意关闭顺序遍历结果集可使用列号或列名标识列ResultSet存在一个光标,光标所指行为当前行示例演示示例4:使用Statement和ResultSet查询宠物20/35Statement常用方法方法名说明ResultSetexecuteQuery(Stringsql)执行SQL查询并获取到ResultSet对象intexecuteUpdate(Stringsql)可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数booleanexecute(Stringsql)可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet21/35ResultSet常用方法方法名说明booleannext()将游标从当前位置向下移动一行booleanprevious()游标从当前位置向上移动一行voidclose()关闭ResultSet对象intgetInt(intcolIndex)以int形式获取结果集当前行指定列号值intgetInt(StringcolLabel)以int形式获取结果集当前行指定列名值floatgetFloat(intcolIndex)以float形式获取结果集当前行指定列号值floatgetFloat(StringcolLabel)以float形式获取结果集当前行指定列名值StringgetString(intcolIndex)以String形式获取结果集当前行指定列号值StringgetString(StringcolLabel)以String形式获取结果集当前行指定列名值22/35学员操作——查询所有宠物主人信息训练要点Statement接口ResultSet接口需求说明使用JDBC查询数据表master中所有宠物主人信息并输出指导讲解需求说明23/35学员操作——查询所有宠物主人信息实现思路调用executeQuery(Stringsql)查询主人信息通过next()和getXxx()方法遍历结果集并输出指导完成时间:30分钟24/35常见问题及解决办法代码规范问题调试技巧共性问题集中讲解共性问题集中讲解25/35为什么要使用PreparedStatement使用JDBC完成主人登录验证功能演示示例5:SQL注入隐患Stringsql="select*frommasterwherename='"+name+"'andpassword='"+password+"'";System.out.println(sql);rs=stmt.executeQuery(sql);

正常登录

非正常登录SQL注入演示示例5:SQL注入隐患26/35示例提高了代码的可读性和可维护性PreparedStatement如何避免SQL注入的隐患?使用PreparedStatement接口继承自Statement接口比Statement对象使用起来更加灵活,更有效率提高了SQL语句执行的性能提高了安全性问题分析

PreparedStatement接口(预编译的SQL语句)27/35使用PreparedStatement更新宠物Connectionconn=null;PreparedStatementpstmt=null;…//建立连接……//更新狗狗信息到数据库Stringsql="updatedogsethealth=?,love=?whereid=?";pstmt=conn.prepareStatement(sql);pstmt.setInt(1,80);pstmt.setInt(2,15);pstmt.setInt(3,1);pstmt.executeUpdate();……pstmt.close();conn.close();声明PreparedStatement变量创建PreparedStatement对象设置每个输入参数的值执行SQL语句示例使用占位符的SQL语句演示示例6:使用PreparedStatement更新宠物28/35学员操作——使用PreparedStatement插入宠物信息2-1训练要点PreparedStatement接口需求说明使用PreparedStatement接口向数据表dog中插入两条狗狗的信息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论