《Java面向对象》课件-8.1 JDBC编程_第1页
《Java面向对象》课件-8.1 JDBC编程_第2页
《Java面向对象》课件-8.1 JDBC编程_第3页
《Java面向对象》课件-8.1 JDBC编程_第4页
《Java面向对象》课件-8.1 JDBC编程_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

模块八数据库编程目录/Contents01JDBC编程02数据库连接池03DbUtilsJDBC编程任务一学习目标了解JDBC概述,能够简述JDBC的概念及优点

先定一个小目标!掌握JDBC的常用API,能够简述JDBC常用API的作用掌握JDBC编程,能够独立编写JDBC程序操作数据库中的数据JDBC概述数据库编程是指使用编程语言与数据库进行交互的过程,主要涉及与数据库建立连接、执行SQL语句、读取和写入数据等操作。其中,驱动程序是根据数据库的规范和要求实现的程序,是连接和操作数据库的必要组件,不同的数据库可能有不同的规范和要求,因此提供的驱动程序也会有所差异。JDBC概述在JDBC(JavaDatabaseConnectivity,Java数据库互联)出现之前,各数据库厂商提供自己独立的数据库驱动程序,开发人员想要操作不同类型的数据库,需要编写专门针对每个数据库的程序。例如,要访问MySQL数据库就需要编写一种程序,要访问Oracle数据库就需要编写另一种程序。这种情况下,应用程序的可移植性非常差,因为每次切换数据库都需要修改和适配程序。JDBC概述JDBC的出现解决了上述问题,JDBC是一套访问数据库的标准Java类库,它定义了应用程序访问和操作数据库的API。通过JDBC,开发人员可以使用相同的API操作MySQL、Oracle或其他关系型数据库。JDBC概述Java应用程序通过JDBC访问不同关系型数据库的流程如下图所示。JDBC常用APIJDBC的API主要位于java.sql包中,该包定义了一系列访问数据库的接口和类,Java程序开发人员可以利用这些接口和类,编写操作数据库数据的JDBC程序。下面将针对java.sql包内常用的接口和类进行讲解。(1)Driver接口Driver接口是JDBC驱动程序的核心接口之一,它定义了与数据库驱动程序进行通信的方法。每个数据库厂商都会提供自己的驱动程序并实现Driver接口,以支持应用程序与该数据库的连接。在编写JDBC程序时,需要把所使用的数据库驱动程序或类库加载到项目的classpath中。JDBC常用API(2)DriverManager类DriverManager类是用于管理JDBC驱动程序的类,该类中定义了注册驱动程序及获取数据库连接对象的静态方法,其常用方法如下表所示。方法声明功能描述staticvoidregisterDriver(Driver

driver)用于在DriverManager中注册给定的JDBC驱动程序staticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)用于建立和数据库的连接,并返回表示连接的Connection对象需要注意的是,在编写代码时,一般不会使用registerDriver(Driver

driver)方法注册驱动。因为DriverManager类中有一个静态代码块,该静态代码块内部会执行DriverManager对象的

registerDriver()方法注册驱动,所以,如果使用registerDriver()方法注册驱动,相当于注册了两次驱动程序。JDBC常用API(2)DriverManager类如果想要手动注册驱动,只需加载Driver类就可以实现,手动注册驱动程序的示例如下。com.mysql.cj.jdbc.Driver为需要注册到DriverManager的驱动类。需要注意的是,使用Class类的forName()方法注册驱动时,参数中指定的驱动类必须是类的全限定名。Class.forName("com.mysql.cj.jdbc.Driver");JDBC常用API(2)DriverManager类JDBC根据URL的信息与数据库建立连接,其URL需要按照特定的语法格式来配置。具体的URL格式会根据不同的数据库类型和驱动程序而有所变化,其中连接到MySQL数据库的URL语法格式如下。jdbc:mysql://[hostname]:[port]/database-name[?参数键值对1&参数键值对2…]JDBC常用API(2)DriverManager类对连接到MySQL数据库的URL语法格式中的各项解释如下。“jdbc:mysql://”:表示JDBC驱动程序使用

MySQL协议进行连接。hostname:数据库的主机名或IP地址。port:数据库的端口号,如果连接的是本机MySQL数据库,并且使用MySQL的默认端口号3306,则URL中的[hostname]:[port]可以省略。database-name:数据库名称,如果需要在URL中定制连接的一些属性和配置,可以在数据库名称后面使用问号(?)进行声明,如果需要添加多个参数键值对,参数键值对之间使用&进行连接。JDBC常用API(2)DriverManager类编写JDBC程序中,注册驱动和获取数据库连接的示例代码如下。//注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//数据库的连接路径Stringurl="jdbc:mysql://localhost:3306/jdbc";Stringusername="root";Stringpassword="root";//获取数据库连接Connectionconn=DriverManager.getConnection(url,username,password);JDBC常用API

小提示:如果基于MySQL5之后的驱动包编写操作数据库数据的JDBC程序时,可以省略注册驱动的步骤。程序执行时会自动加载驱动包的META-INF/services/java.sql.Driver文件中的驱动类。MySQL5的驱动类名称为com.mysql.jdbc.Driver,MySQL8的驱动类为com.mysql.cj.jdbc.Driver。(2)DriverManager类JDBC常用API(3)Connection接口Connection接口用于表示与数据库的连接,是进行数据库操作的主要入口点。可以通过Connection对象与数据库建立连接,并进行各种数据库操作,包括执行SQL查询、更新数据和进行事务管理等。JDBC常用API(3)Connection接口Connection接口的常用方法如下表所示。方法声明功能描述StatementcreateStatement()用于创建一个Statement对象,Statement对象可以执行静态SQL语句PreparedStatementprepareStatement(Stringsql)用于创建一个PreparedStatement对象,PreparedStatement对象可以执行预编译的SQL语句voidcommit()用于提交事务,使所有上一次提交/回滚后进行的更改成为持久更改,并释放当前Connection对象持有的所有数据库锁voidsetAutoCommit(booleanautoCommit)用于设置是否关闭自动提交模式voidroolback()用于回滚事务,用于取消在当前事务中进行的所有更改,并释放当前Connection对象持有的所有数据库锁voidclose()用于关闭与数据库的连接并释放资源JDBC常用API(3)Connection接口Connectionconn=DriverManager.getConnection(url,username,password);Stringsql="SELECT*FROMuserWHEREid=1";//定义SQL语句Statementstmt=conn.createStatement();//获取执行SQL语句的对象

Statementtry{

conn.setAutoCommit(false);//关闭事务的自动提交,手动提交事务

stmt.executeUpdate(sql);//执行SQL语句

mit();//提交事务}catch(Exceptionthrowables){

conn.rollback();

//回滚事务 throwables.printStackTrace();}stmt.close();//释放资源conn.close();编写JDBC程序时,通过Connection进行事物管理的示例如右所示。JDBC常用API(4)Statement接口Statement接口是Java中用于执行SQL语句的重要接口之一,该接口的实例可以通过Connection对象的createStatement()方法获取,通过该接口实例可以将静态SQL语句发送到数据库中进行编译与执行,并返回数据库的处理结果。静态SQL语句是指在编译时就确定好的SQL语句,其结构和内容在程序运行期间不会发生变化。JDBC常用API(4)Statement接口Statement接口提供了三个常用方法用于执行SQL语句,具体如下表所示。方法声明功能描述booleanexecute(Stringsql)用于执行SQL语句,该方法执行SQL语句后可能会返回多个结果,如果执行后结果为ResultSet对象,则返回true;如果执行后结果为受影响的行数或没有任何结果,则返回falseintexecuteUpdate(Stringsql)用于执行SQL中的INSERT、UPDATE和DELETE语句。该方法返回一个int类型的值,表示数据库中受SQL语句影响的行数ResultSetexecuteQuery(Stringsql)用于执行SQL中的SELECT语句,该方法返回一个表示查询结果的ResultSet对象JDBC常用API(5)PrepareStatement接口使用Statement接口执行SQL语句时,如果不对输入的SQL语句进行把控,就很有可能收到SQL注入攻击。同时,手动拼接SQL语句会使代码变得冗长,难以阅读和维护。为此,JDBCAPI提供了扩展的PreparedStatement接口,该接口的对象可以执行预编译的SQL语句。预编译的SQL语句是指在执行SQL语句之前,先将SQL语句发送到数据库进行编译,生成一个预编译的执行计划,然后再执行。预编译的SQL语句在每次执行时只需传递参数,而无需重新解析和编译SQL语句,可以在SQL语句中使用占位符来代替具体的参数值。JDBC常用API(5)PrepareStatement接口PreparedStatement接口还提供了一系列setter方法,用于将具体的参数值赋值给指定的占位符,常用方法如下。方法声明功能描述intexecuteUpdate()用于执行INSERT、UPDATE或DELETE语句ResultSetexecuteQuery()用于执行SELECT语句,并返回结果集voidsetInt(int

parameterIndex,int

x)用于将SQL语句中parameterIndex位置的占位符赋值为int类型的参数xvoidsetFloat(intparameterIndex,floatf)用于将SQL语句中parameterIndex位置的占位符赋值为float类型的参数fvoidsetLong(intparameterIndex,longl)用于将SQL语句中parameterIndex位置的占位符赋值为long类型的参数lJDBC常用API(5)PrepareStatement接口接上页表格。方法声明功能描述voidsetDouble(intparameterIndex,doubled)用于将SQL语句中parameterIndex位置的占位符赋值为double类型的参数dvoidsetBoolean(intparameterIndex,booleanb)用于将SQL语句中parameterIndex位置的占位符赋值为boolean类型的参数bvoidsetString(intparameterIndex,Stringx)用于将SQL语句中parameterIndex位置的占位符赋值为String类型的参数xvoidsetObject(intparameterIndex,Objecto)用于将SQL语句中parameterIndex位置的占位符赋值为Object

类型的参数oJDBC常用API(6)ResultSet接口ResultSet接口是JDBC中用于表示数据库查询结果集的接口,执行查询语句得到的结果集会被封装到一个ResultSet对象中。可以将ResultSet对象看作一个包含多个数据行的表格,每一行代表结果集中的一条记录,每一列代表每个字段的值。ResultSet接口内部维护着一个游标,用于指示当前行的位置。初始化ResultSet对象时,游标位于第一行之前的位置。通过调用next()方法,可以将游标移动到下一行。JDBC常用API(6)ResultSet接口ResultSet接口的常用方法如下表所示。方法声明功能描述StringgetString(intcolumnIndex)通过字段的索引获取String类型的值,参数columnIndex代表字段在查询结果中的索引StringgetString(StringcolumnName)通过字段的名称获取String类型的值,参数columnName代表字段的名称intgetInt(intcolumnIndex)通过字段的索引获取int类型的值,参数columnIndex代表字段在查询结果中的索引intgetInt(StringcolumnName)通过字段的名称获取int类型的值。参数columnName代表字段的名称booleanabsolute(introw)将游标移动到结果集的第row条记录booleanprevious()将游标从结果集的当前位置移动到上一条记录JDBC常用API(6)ResultSet接口方法声明功能描述booleannext()将游标从结果集的当前位置移动到下一条记录voidbeforeFirst()将游标移动到结果集开头(第一条记录之前)voidafterLast()将游标指针移动到结果集末尾(最后一条记录之后)booleanfirst()将游标移动到结果集的第一条记录booleanlast()将游标移动到结果集的最后一条记录intgetRow()返回当前记录的行号StatementgetStatement()返回生成结果集的Statement对象voidclose()释放此ResultSet对象的数据库和JDBC资源JDBC常用API(6)ResultSet接口ResultSet移动结果集的游标和获取结果集数据的示例如下所示。//执行SQL并获取结果集ResultSetrs=stmt.executeQuery(sql);//光标向下移动一行,并且判断当前行是否有数据while(rs.next()){ //根据字段的名称获取结果集中的数据 intid=rs.getInt("id"); Stringname=rs.getString("username");//根据字段的索引获取结果集中的数据 Stringpwd=rs.getString(3);}//释放资源rs.close();JDBC编程加载并注册数据库驱动程序通过DriverManager获取数据库连接通过Connection对象获取Statement对象关闭连接,释放资源操作ResultSet结果集执行SQL语句使用JDBC的常用API编写JDBC程序的大致步骤如下。JDBC编程案例演示下面根据上述步骤编写一个JDBC程序,用于查询数据库中的数据并输出在控制台。(1)搭建数据库环境在MySQL中创建一个名称为jdbc_demo的数据库,在该数据库中创建一个tb_space表用于存储航天里程碑的信息。CREATEDATABASEIFNOTEXISTSjdbc_demoCHARACTERSETutf8mb4;USEjdbc_demo;CREATETABLEtb_space( idINTPRIMARYKEYAUTO_INCREMENT, nameV

温馨提示

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

评论

0/150

提交评论