JDBC接口的基本介绍_第1页
JDBC接口的基本介绍_第2页
JDBC接口的基本介绍_第3页
JDBC接口的基本介绍_第4页
JDBC接口的基本介绍_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

为什么需要JDBC,JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力,Java应用程序,JDBC,JDBC,JSP/Servlet,客户端,数据库服务器,应用服务器,数据库服务器,客户端,JDBC程序的工作原理,JDBCAPI提供者:sun公司内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:DriverManager类Connection接口Statement接口ResultSet接口DriverManager提供者:sun公司作用:载入各种不同的JDBC驱动JDBC驱动提供者:数据库厂商作用:负责连接各种不同的数据库,SqlServer,Oracle,JDBCAPI,JDBCDriverManager,JDBC驱动,JDBC驱动,Java应用程序,JDBCAPI,JDBCAPI可做三件事:与数据库建立连接、执行SQL语句、处理结果,Connection,DriverManager,Statement,ResultSet,DriverManager:依据数据库的不同,管理JDBC驱动Connection:负责连接数据库并担任传送数据的任务Statement:由Connection产生、负责执行SQL语句ResultSet:负责保存Statement执行后所产生的查询结果,客户端,数据库服务器,1,2,3,4,JDBC程序的工作模板,tryClass.forName(JDBC驱动类);catch(ClassNotFoundExceptione)System.out.println(无法找到驱动类);tryConnectioncon=DriverManager.getConnection(JDBCURL,数据库用户名,密码);Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable1);while(rs.next()intx=rs.getInt(a);Strings=rs.getString(b);floatf=rs.getFloat(c);con.close();catch(SQLExceptione)e.printStackTrace();,获得数据库连接,发送Sql语句,处理结果,注册JDBC驱动,JDBCURL用来标识数据库,必须处理的异常,释放资源,必须处理的异常,JDBC驱动,JDBC驱动由数据库厂商提供在个人开发与测试中,可以使用JDBC-ODBC桥连方式在生产型开发中,推荐使用纯Java驱动方式,DBServer,DBServer,JDBCAPI,JDBCDriverManager,纯Java驱动,JDBCODBC桥,Java应用程序,ODBC,JDBC驱动,桥连将对JDBCAPI的调用,转换为对另一组数据库连接API的调用优点:可以访问所有ODBC可以访问的数据库缺点:执行效率低、功能不够强大,JDBC-ODBC桥,Java应用程序,JDBCAPI,ODBCAPI,ODBC层,DBServer,JDBC驱动,纯Java驱动由JDBC驱动直接访问数据库优点:100%Java,快又可跨平台缺点:访问不同的数据库需要下载专用的JDBC驱动,JDBC驱动,Java应用程序,JDBCAPI,DBServer,JDBC驱动,使用纯Java驱动方式进行直连1、下载数据库厂商提供的驱动程序包2、将驱动程序包引入工程中3、编写代码,通过纯Java驱动方式与数据库建立连接,-语法-StringURL=jdbc:mysql:/localhost:3306/databaseName;Class.forName(com.mysql.jdbc.Driver);Connectioncon=DriverManager.getConnection(URL,“root”,“密码);,sqlserver数据库驱动类的完全限定类名,演示:在工程中引入JDBC驱动程序包,数据库名称,小结,JDBC桥连与纯Java驱动两种方式的优缺点分别是什么?JDBCURL的作用是什么?,10,JDBC程序访问数据库的步骤,开始,导入java.sql包,加载并注册驱动程序,创建一个Connection对象,创建一个Statement对象,执行语句,关闭ResultSet对象,关闭Statement对象,关闭连接,结束,使用ResultSet对象,开始,导入java.sql包,加载并注册驱动程序,创建一个Connection对象,创建一个Statement对象,执行语句,关闭ResultSet对象,使用ResultSet对象,创建数据表:FirstLevelTitle,JDBC应用,要求对新闻标题进行管理:1、新闻标题存储在MySQL中2、通过JDBC对新闻标题进行增、删、改、查操作,操作步骤,使用Statement插入数据,使用PreparedStatement增、删、改、查数据,1,2,JDBC查询,SQL查询字符串,executeQuery()方法,作为参数传递,ResultSet,返回查询数据,SELECTname,email,phoneFROMcolleagues;,使用SQL语句,查询可编写为:,Stringstr=SELECTemp_id,lname,fnameFROMcolleagues;Statementstmt=con.createStatement();ResultSetrset=stmt.executeQuery(str);,使用JDBC编写此查询,则代码为:,Statement接口,使用PreparedStatement插入数据,使用桥连方式向FirstLevelTitle表中插入一条记录,代码片断publicstaticvoidmain(Stringargs)Connectioncon=null;PreparedStatementstatement=null;tryStringstrSql=insertintoFirstLevelTitlevalues(1,军事,网管,getdate();tryClass.forName(com.mysql.jdbc.Driver);catch(ClassNotFoundExceptione)System.out.println(无法找到驱动类);con=DriverManager.getConnectionjdbc:mysql:/localhost:3306/databaseName“,sa,sa);statement=con.createStatement();statement.executeUpdate();catch(SQLExceptionsqlE)sqlE.printStackTrace();finallycloseStatement(statement);closeConnection(con);,建立连接,执行sql语句,数据库连接使用完毕,及时释放,载入JDBC-ODBC桥驱动类,异常处理,异常处理,使用PreparedStatement插入数据,使用纯Java驱动方式向FirstLevelTitle表中插入一条记录,代码片断publicstaticvoidmain(Stringargs)Connectioncon=null;Statementstatement=null;tryStringstrSql=insertintoFirstLevelTitlevalues(1,军事,网管,getdate();tryClass.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);catch(ClassNotFoundExceptione)System.out.println(无法找到驱动类);con=DriverManager.getConnection(“jdbc:mysql:/localhost:3306/databaseName“,“root”,”密码);statement=con.createStatement();statement.executeUpdate(strSql);catch(SQLExceptionsqlE)sqlE.printStackTrace();finally/释放连接,载入sqlserver数据库驱动类,建立连接,执行sql语句,小结,在使用纯Java驱动方式进行数据库连接时,如果程序在运行时抛出异常:java.sql.SQLException:Nosuitabledriverfoundforjdbc:sqlserver:/localhost:1433;DatabaseName=news那么出错的原因是什么?如何解决?请单独建立一个类ConnectionManager,专门负责建立数据库连接、以及关闭连接,并思考这样做带来的好处是什么,找不到合适的驱动类,原因:没有把数据库驱动包引入工程,好处在于:既便于管理、又可以提高代码的复用性,PreparedStatement,PreparedStatement接口(预编译的SQL语句),Statement接口,当SQL语句将运行多次时,尽量使用PreparedStatement,以便提高运行效率,PreparedStatement接口继承Statement接口PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率,使用PreparedStatement插入数据,publicclassNewsFirstTitleDB2publicstaticvoidmain(Stringargs)Connectioncon=null;PreparedStatementpStatement=null;trySimpleDateFormathmFromat=newSimpleDateFormat(yyyy-MM-ddhh:mm:ss);con=ConnectionManager.getConnection();StringstrSql=insertintoFirstLevelTitlevalues(?,?,?,?);pStatement=con.prepareStatement(strSql);pStatement.setInt(1,1);pStatement.setString(2,军事);pStatement.setString(3,管理员);pStatement.setString(4,hmFromat.format(newDate();pStatement.executeUpdate();catch(SQLExceptionsqlE)sqlE.printStackTrace();finallyConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);,参数化的查询语句,设置每个?参数的值,列号从1开始,执行sql语句,使用PreparedStatement删除数据,publicclassNewsFirstTitleDB3publicstaticvoidmain(Stringargs)Connectioncon=null;PreparedStatementpStatement=null;trycon=ConnectionManager.getConnection();StringstrSql=deletefromFirstLevelTitlewhereTitleName=?;pStatement=con.prepareStatement(strSql);pStatement.setString(1,军事);introw=pStatement.executeUpdate();System.out.println(“成功删除了+row+行数据!);catch(SQLExceptionsqlE)sqlE.printStackTrace();finallyConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);,返回删除记录的行数,使用PreparedStatement更新数据,publicclassNewsFirstTitleDB4publicstaticvoidmain(Stringargs)Connectioncon=null;PreparedStatementpStatement=null;trycon=ConnectionManager.getConnection();StringstrSql=updateFirstLevelTitlesetCreator=?whereId=?;pStatement=con.prepareStatement(strSql);pStatement.setString(1,编辑);pStatement.setInt(2,1);introw=pStatement.executeUpdate();System.out.println(成功更新了+row+行数据!);catch(SQLExceptionsqlE)sqlE.prin

温馨提示

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

评论

0/150

提交评论