《第8章 数据库编程应用.pdf》由会员分享,可在线阅读,更多相关《第8章 数据库编程应用.pdf(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Web程序设计(一)第8章 数据库编程应用 学习内容 1 JDBCJDBC技术技术 2 数据库连接数据库连接 JDBCJDBC中常用的类和接口中常用的类和接口 3 4 对数据库的操作对数据库的操作 1 JDBC技术 介介 绍绍 JDBC制定了统一的访问各类关系数据库的制定了统一的访问各类关系数据库的标准接口标准接口。在此之前,各数据库厂商拥有各自的在此之前,各数据库厂商拥有各自的API,开发人员访问或更换数据库很困难。开发人员访问或更换数据库很困难。JDBC发布后,很快就成了发布后,很快就成了JAVA访问数据访问数据库的标准。库的标准。JDBC不能直接访问数据库,需要依赖数据不能直接访问数据库
2、,需要依赖数据库厂商提供的库厂商提供的JDBC驱动程序。驱动程序。1 JDBC技术 使开发人员免于数据库驱动程序的编写使开发人员免于数据库驱动程序的编写 支持各种数据库,增加软件可移植性支持各种数据库,增加软件可移植性 与与ODBC相似,便于开发人员理解相似,便于开发人员理解 JDBC面向对象,可以二次封装,提高代码重用性面向对象,可以二次封装,提高代码重用性 优点优点 学习内容 1 JDBCJDBC技术技术 2 数据库连接数据库连接 JDBCJDBC中常用的类和接口中常用的类和接口 3 4 对数据库的操作对数据库的操作 2.1 DriverManagerDriverManager类类 2.2
3、 ConnectionConnection接口接口 2 JDBC中常用的类和接口 2.3 StatementStatement接口接口 2.4 PreparedStatementPreparedStatement接口接口 2.5 ResultSetResultSet接口接口 2.1 DriverManager类 介介 绍绍 JDBC提供了丰富的类和接口用于数据库编提供了丰富的类和接口用于数据库编程,利用这些类和接口可以方便的进行数据程,利用这些类和接口可以方便的进行数据访问和处理,这些类和接口都位于访问和处理,这些类和接口都位于java.sql包中。包中。DriverManager 类用来管理
4、数据库中的所有类用来管理数据库中的所有驱动程序,是驱动程序,是JDBC的管理层,跟踪可用驱的管理层,跟踪可用驱动程序,并在数据库和驱动程序之间建立连动程序,并在数据库和驱动程序之间建立连接。接。DriverManager 类中的方法都是静态的,在类中的方法都是静态的,在程序中无需实例化,直接通过类名就可以调程序中无需实例化,直接通过类名就可以调用。用。2.1 DriverManager类 方法方法 说明说明 getConnection(String url,String user,String password)获取与数据库的连接,三个参数依次是:获取与数据库的连接,三个参数依次是:连接数据库
5、的连接数据库的URL、用户名、密码、用户名、密码 setLoginTimeout()获取驱动程序试图登陆到某一数据库时等获取驱动程序试图登陆到某一数据库时等待的最长时间,以秒为单位待的最长时间,以秒为单位 println(String message)将一条消息打印到当前将一条消息打印到当前JDBC日志中日志中 2.1 DriverManagerDriverManager类类 2.2 ConnectionConnection接口接口 2 JDBC中常用的类和接口 2.3 StatementStatement接口接口 2.4 PreparedStatementPreparedStatement接
6、口接口 2.5 ResultSetResultSet接口接口 2.2 Connection接口 介介 绍绍 Connection接口代表与特定数据库的连接。接口代表与特定数据库的连接。要操作数据表中的数据时,首先要获取数据要操作数据表中的数据时,首先要获取数据库连接。库连接。Connection实例就像在应用程序与数据库之实例就像在应用程序与数据库之间开通了一条渠道。间开通了一条渠道。可通过可通过DriverManager类的类的getConnection方方法获取法获取Connection实例。实例。2.2 Connection接口 方法方法 说明说明 createStatement()创建
7、创建Statement对象对象 createStatement(int resultSetType,int resultSetConcurrency)创建一个创建一个Statement对象,该对象将生成具有对象,该对象将生成具有给定类型、并发性和可保存性的给定类型、并发性和可保存性的ResultSet对对象象 prepareStatement()创建预处理对象创建预处理对象preparedStatement isReadOnly()查看当前查看当前Connection对象是否为只读形式对象是否为只读形式 setReadOnly()设置当前设置当前Connection对象的读写模式,默认对象的读
8、写模式,默认为非只读模式为非只读模式 commit()提交在事务中的更改,释放提交在事务中的更改,释放Connection对象对象持有的所有数据库锁持有的所有数据库锁 roolback()取消在事务中的更改,释放取消在事务中的更改,释放Connection对象对象持有的所有数据库锁持有的所有数据库锁 close()释放释放Connection对象的数据库和对象的数据库和JDBC资源资源 2.1 DriverManagerDriverManager类类 2.2 ConnectionConnection接口接口 2 JDBC中常用的类和接口 2.3 StatementStatement接口接口 2
9、.4 PreparedStatementPreparedStatement接口接口 2.5 ResultSetResultSet接口接口 2.3 Statement接口 介介 绍绍 Statement实例用于在已经建立连接的基础实例用于在已经建立连接的基础上向数据库发送上向数据库发送SQL语句。语句。Statement接口用来执行静态的接口用来执行静态的SQL语句。语句。Statement实例实例可通过可通过Connection实例的实例的createStatement方法获取。方法获取。语法格式语法格式 Connection conn=DriverManager.getConnection(
10、“数数据库地址据库地址”,”用户名用户名”,”密码密码”);Statement statement=conn.createStatement();2.3 Statement接口 方法方法 说明说明 execute(String sql)执行静态的执行静态的SQL语句,可返回多个结果集语句,可返回多个结果集 executeQuery(String sql)执行给定的执行给定的Select语句,返回单个语句,返回单个ResultSet对象对象 executeUpdate(String sql)执行给定的执行给定的insert、update、delete等无返回等无返回值的值的SQL语句语句 add
11、Batch(String sql)将给定的将给定的SQL语句添加到语句添加到Statement对象的当对象的当前命令列表中前命令列表中 executeBatch()将一批命令提交给数据库执行,若全部执行成将一批命令提交给数据库执行,若全部执行成功,则返回更新计数组成的数组。功,则返回更新计数组成的数组。clearBatch()清空清空Statement对象的当前命令列表对象的当前命令列表 close()释放释放Statement实例占用的数据库和实例占用的数据库和JDBC资资源源 2.1 DriverManagerDriverManager类类 2.2 ConnectionConnection
12、接口接口 2 JDBC中常用的类和接口 2.3 StatementStatement接口接口 2.4 PreparedStatementPreparedStatement接口接口 2.5 ResultSetResultSet接口接口 2.4 PreparedStatement接口 介介 绍绍 PreparedStatement接口继承接口继承Statement,用,用于执行动态的于执行动态的SQL语句。语句。通过通过PreparedStatement实例执行的实例执行的SQL语语句被预编译并保存到该实例中,可反复执行句被预编译并保存到该实例中,可反复执行该该SQL语句。语句。语法格式语法格式
13、Connection conn=DriverManager.getConnection(“数据数据库地址库地址”,”用户名用户名”,”密码密码”);PreparedStatement preps=conn.prepareStatement(sql);2.4 PreparedStatement接口 方法方法 说明说明 execute()执行任意类型的执行任意类型的SQL语句语句 executeQuery()执行执行Select语句,返回查询结果集语句,返回查询结果集ResultSet对象对象 executeUpdate()执行给定的执行给定的insert、update、delete等无返回等无返
14、回值的值的SQL语句语句 2.1 DriverManagerDriverManager类类 2.2 ConnectionConnection接口接口 2 JDBC中常用的类和接口 2.3 StatementStatement接口接口 2.4 PreparedStatementPreparedStatement接口接口 2.5 ResultSetResultSet接口接口 2.5 ResultSet接口 介介 绍绍 ResultSet接口类似于一张数据表,用来暂存接口类似于一张数据表,用来暂存数据库查询操作所获得的结果集。数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指
15、针,实例具有指向当前数据行的指针,指针开始位置在结果集第一条记录的前面。指针开始位置在结果集第一条记录的前面。可通过可通过next()方法将指针向下移,若存在下方法将指针向下移,若存在下一行,则返回一行,则返回true,否则返回,否则返回false。该接口提供了从当前行检索不同类型值的该接口提供了从当前行检索不同类型值的getXXX()方法,可通过列的索引编号或名称方法,可通过列的索引编号或名称检索。检索。更新方法更新方法updateXXX(),可通过列的索引编可通过列的索引编号或号或名称更新当前行的指定列。名称更新当前行的指定列。2.5 ResultSet接口 方法方法 说明说明 getIn
16、t(列列)以以int形式获取形式获取ResultSet对象对象当当前行的指定列值前行的指定列值 getFloat(列列)以以float形式获取形式获取ResultSet对象当前行的指定列值对象当前行的指定列值 getDate(列列)以以date形式获取形式获取ResultSet对象当前行的指定列值对象当前行的指定列值 getBoolean(列列)以以boolean形式获取形式获取ResultSet对象当前行的指定列值对象当前行的指定列值 getString(列列)以以string形式获取形式获取ResultSet对象当前行的指定列值对象当前行的指定列值 getObject(列列)以以objec
17、t形式获取形式获取ResultSet对象当前行的指定列值对象当前行的指定列值 next(列列)将指针向下移一行将指针向下移一行 2.5 ResultSet接口 方法方法 说明说明 updateInt(列列,值值)用用int值更新指定列值更新指定列 updateFloat(列列,值值)用用float值更新指定列值更新指定列 updateLong(列列,值值)用用long值更新指定列值更新指定列 updateString(列列,值值)用用string值更新指定列值更新指定列 updateObject(列列,值值)用用object值更新指定列值更新指定列 updateNull(列列)将指定的列值修改
18、为将指定的列值修改为NULL updateDate(列列,值值)用用date值更新指定列值更新指定列 updateDouble(列列,值值)用用double值更新指定列值更新指定列 学习内容 1 JDBCJDBC技术技术 2 数据库连接数据库连接 JDBCJDBC中常用的类和接口中常用的类和接口 3 4 对数据库的操作对数据库的操作 3 数据库连接数据库连接 访问步骤访问步骤 1 4 2 3 5 关闭连接关闭连接 加载数据库驱动加载数据库驱动 获取数据库连接获取数据库连接 获取结果集获取结果集 用用SQL语句操作数据库语句操作数据库 3.1 加载数据库驱动加载数据库驱动 3.2 创建数据库连接
19、创建数据库连接 3 数据库连接数据库连接 3.3 用用SQLSQL语句操作数据库语句操作数据库 3.4 获取查询结果集获取查询结果集 3.5 关闭连接关闭连接 3.1 加载数据库驱动数据库驱动类 介介 绍绍 SUN公司提供公司提供JDBC技术用于与数据库建立技术用于与数据库建立联系,但是它只提供了接口,由数据库提供联系,但是它只提供了接口,由数据库提供商实现这些接口,这就是所谓的数据库驱动商实现这些接口,这就是所谓的数据库驱动 由于不同的数据库厂商实现由于不同的数据库厂商实现JDBC接口不同接口不同,就产生了不同的数据库驱动包。,就产生了不同的数据库驱动包。数据库驱动包中包含了一些类,他们负责
20、与数据库驱动包中包含了一些类,他们负责与数据库建立连接,把数据库建立连接,把SQL语句传到数据库。语句传到数据库。SQL Server数据库驱动包:数据库驱动包:msbase.jar、mssqlserver.jar、msutil.jar、jtds.jar。MySQL数据库数据库驱动包驱动包:mysql-connector-java.jar。3.1 加载数据库驱动加载数据库驱动类 介介 绍绍 将下载的数据库驱动文件添加到项目中后,将下载的数据库驱动文件添加到项目中后,首先需要加载数据库驱动程序,才能进行数首先需要加载数据库驱动程序,才能进行数据库操作。据库操作。Java加载数据库驱动程序的方法是
21、调用加载数据库驱动程序的方法是调用Class类的静态方法类的静态方法forName。驱动加载成功后会将加载的驱动类注册给驱动加载成功后会将加载的驱动类注册给DriverManager,如果失败则会抛出,如果失败则会抛出ClassNotFoundException异常。异常。格格 式式 Class.forName(String driveManager)例例 子子 try Class.forName(“com.mysql.jdbc.Driver”);catch(ClassNotFoundException e)e.printStackTrace();3.1 加载数据库驱动加载数据库驱动类 3.1
22、 加载数据库驱动加载数据库驱动 3.2 创建数据库连接创建数据库连接 3 数据库连接数据库连接 3.3 用用SQLSQL语句操作数据库语句操作数据库 3.4 获取查询结果集获取查询结果集 3.5 关闭连接关闭连接 说说 明明 在进行数据库操作时,只需要第一次访问在进行数据库操作时,只需要第一次访问数据库时加载驱动程序,然后每次访问数数据库时加载驱动程序,然后每次访问数据库时,创建一个据库时,创建一个Connection对象,然后对象,然后执行执行SQL语句。语句。在程序中加载数据库驱动程序前需要向项在程序中加载数据库驱动程序前需要向项目中导入数据库的驱动。目中导入数据库的驱动。MySQL数据库
23、驱动到其官网数据库驱动到其官网http:/www.mysql.org下载下载 SQL Server数据库驱动到微软官网数据库驱动到微软官网http:/下载下载 3.2 创建数据库连接 3.2 创建数据库连接MySQL数据库连接 import java.sql.Connection;import java.sql.DriverManager;public class GetConn public Connection conn=null;public Connection getConnection()try Class.forName(com.mysql.jdbc.Driver);String
24、 url=jdbc:mysql:/localhost:3306/db_database15;String user=root;String passWord=111;conn=DriverManager.getConnection(url,user,passWord);if(conn!=null)System.out.println(数据库连接成功);catch(Exception e)3.2 创建数据库连接MySQL数据库连接 e.printStackTrace();return conn;public static void main(String args)GetConn getConn
25、=new GetConn();Connection conn1=getConn.getConnection();3.2 创建数据库连接SQL Server2005数据库连接 import java.sql.Connection;import java.sql.DriverManager;public class GetConn Connection con=null;public Connection getConnection()try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);con=DriverManager.
26、getConnection(jdbc:sqlserver:/localhost:1433;databaseName=db_database15,sa,111);if(con!=null)System.out.println(数据库连接成功);catch(Exception e)3.2 创建数据库连接SQL Server2005数据库连接 e.printStackTrace();return con;public static void main(String args)GetConn getconn=new GetConn();Connection conn1=getconn.getConne
27、ction();数据库名数据库名 驱动驱动 URL Oracle Thin oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:PostgreSQL(v6.5 and earlier)postgreaql.Driver jdbc:postgresql:/:/PostgreSQL(v7.0 and laer)org.postgresql.Driver jdbc:postgresql:/:/Sybase(Connect4.2 and earlier)com.sybase.jdbc.SybDriver jdbc:sybase:Tds:Sybase(Con
28、nect5.2)com.sybase.jdbc2.jdbc.SybDriver jdbc:sybase:Tds:3.2 创建数据库连接其他数据库驱动 3.1 加载数据库驱动加载数据库驱动 3.2 创建数据库连接创建数据库连接 3 数据库连接数据库连接 3.3 用用SQLSQL语句操作数据库语句操作数据库 3.4 获取查询结果集获取查询结果集 3.5 关闭连接关闭连接 格格 式式 try Statement state=conn.createStatement();ResultSet res=state.executeQuery(“sql”);catch(SQLException e)e.pri
29、ntStackTrace();3.3 用SQL语句操作数据库 3.1 加载数据库驱动加载数据库驱动 3.2 创建数据库连接创建数据库连接 3 数据库连接数据库连接 3.3 用用SQLSQL语句操作数据库语句操作数据库 3.4 获取查询结果集获取查询结果集 3.5 关闭连接关闭连接 说说 明明 Statement接口的接口的executeUpdate方法用方法用于执行数据的插入、修改或删除操作,于执行数据的插入、修改或删除操作,返回影响数据库记录的条数。返回影响数据库记录的条数。executeQuery方法方法用于用于执行查询语句,执行查询语句,返回一个返回一个ResultSet型的结果集。型的
30、结果集。通过遍历查询结果集的内容,可取得查通过遍历查询结果集的内容,可取得查询结果。询结果。例例 子子 ResultSet res=state.executeQuery(“select*from table1”);3.4 获取查询结果集 例例 子子 while(res.next()String name=res.getString(“name”);String person=res.getString(“person”);String date=res.getString(“date”);3.4 获取查询结果集 3.1 加载数据库驱动加载数据库驱动 3.2 创建数据库连接创建数据库连接 3 数
31、据库连接数据库连接 3.3 用用SQLSQL语句操作数据库语句操作数据库 3.4 获取查询结果集获取查询结果集 3.5 关闭连接关闭连接 说说 明明 在访问数据库时,在访问数据库时,Connection、Statement、ResultSet实例都会占用系统实例都会占用系统资源。资源。每次访问数据库后及时释放这些对象占每次访问数据库后及时释放这些对象占用的资源是一个很好的编程习惯。用的资源是一个很好的编程习惯。例例 子子 resultset.close();statement.close();connection.close();3.5 关闭连接 学习内容 1 JDBCJDBC技术技术 2 数
32、据库连接数据库连接 JDBCJDBC中常用的类和接口中常用的类和接口 3 4 对数据库的操作对数据库的操作 4.1 创建数据表创建数据表 4.2 在数据表中删除数据在数据表中删除数据 在数据表中增加数据在数据表中增加数据 4.3 4.4 在数据表中修改数据在数据表中修改数据 4 对数据库的操作 查询数据表中的数据查询数据表中的数据 4.5 4.1 创建数据表创建DBConfig接口 public interface DBConfig String DRIVER=“com.mysql.jdbc.Driver;String URL=jdbc:mysql:/localhost:3306/db_dat
33、abase15;String USERNAME=root;String PASSWORD=111;4.1 创建数据表创建DBHelper类 import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class DBHelper implements DBConfig public static void main(String args)try Class.forName(DRIVER);catch(ClassNot
34、FoundException e)e.printStackTrace();try Connection conn=null;conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);4.1 创建数据表创建DBHelper类 Statement stat=null;stat=conn.createStatement();String sql=create table student(id int primary key auto_increment,name varchar(20),gender char(2),age int,+depart
35、ment varchar(50),email varchar(50);stat.executeUpdate(sql);catch(SQLException e)e.printStackTrace();finally try stat.close();conn.close();catch(SQLException e)e.printStackTrace();4.1 创建数据表创建数据表 4.2 在数据表中删除数据在数据表中删除数据 在数据表中增加数据在数据表中增加数据 4.3 4.4 在数据表中修改数据在数据表中修改数据 4 对数据库的操作 查询数据表中的数据查询数据表中的数据 4.5 4.2
36、在数据表中增加数据创建DBConfig类 public interface DBConfig String DRIVER=com.mysql.jdbc.Driver;String URL=jdbc:mysql:/localhost:3306/db_database15;String USERNAME=root;String PASSWORD=111;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class
37、 DBHelper implements DBConfig public static void main(String args)try Class.forName(DRIVER);catch(ClassNotFoundException e)e.printStackTrace();try Connection conn=null;conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);4.2 在数据表中增加数据创建DBHelper Statement stat=null;stat=conn.createStatement();Stri
38、ng sql=insert into student(name,gender,age,department,email)values(小明,男,20,生物,sl*);stat.executeUpdate(sql);catch(SQLException e)e.printStackTrace();finally try stat.close();conn.close();catch(SQLException e)e.printStackTrace();4.2 在数据表中增加数据创建DBHelper 4.1 创建数据表创建数据表 4.2 在数据表中删除数据在数据表中删除数据 在数据表中增加数据在数
39、据表中增加数据 4.3 4.4 在数据表中修改数据在数据表中修改数据 4 对数据库的操作 查询数据表中的数据查询数据表中的数据 4.5 4.2 在数据表中删除数据创建DBConfig类 public interface DBConfig String DRIVER=com.mysql.jdbc.Driver;String URL=jdbc:mysql:/localhost:3306/db_database15;String USERNAME=root;String PASSWORD=111;import java.sql.Connection;import java.sql.DriverMan
40、ager;import java.sql.SQLException;import java.sql.Statement;public class DBHelper implements DBConfig public static void main(String args)try Class.forName(DRIVER);catch(ClassNotFoundException e)e.printStackTrace();try Connection conn=null;conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);4.2
41、在数据表中删除数据创建DBHelper Statement stat=null;stat=conn.createStatement();String sql=delete from student;stat.executeUpdate(sql);catch(SQLException e)e.printStackTrace();finally try stat.close();conn.close();catch(SQLException e)e.printStackTrace();4.2 在数据表中删除数据创建DBHelper 4.1 创建数据表创建数据表 4.2 在数据表中删除数据在数据表中
42、删除数据 在数据表中增加数据在数据表中增加数据 4.3 4.4 在数据表中修改数据在数据表中修改数据 4 对数据库的操作 查询数据表中的数据查询数据表中的数据 4.5 4.2 在数据表中修改数据创建DBConfig类 public interface DBConfig String DRIVER=com.mysql.jdbc.Driver;String URL=jdbc:mysql:/localhost:3306/db_database15;String USERNAME=root;String PASSWORD=111;import java.sql.Connection;import ja
43、va.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class DBHelper implements DBConfig public static void main(String args)try Class.forName(DRIVER);catch(ClassNotFoundException e)e.printStackTrace();try Connection conn=null;conn=DriverManager.getConnection(URL,USERNAM
44、E,PASSWORD);4.2 在数据表中修改数据创建DBHelper Statement stat=null;stat=conn.createStatement();String sql=update student set department=土木 where department=生物;stat.executeUpdate(sql);catch(SQLException e)e.printStackTrace();finally try stat.close();conn.close();catch(SQLException e)e.printStackTrace();4.2 在数据表
45、中修改数据创建DBHelper 4.1 创建数据表创建数据表 4.2 在数据表中删除数据在数据表中删除数据 在数据表中增加数据在数据表中增加数据 4.3 4.4 在数据表中修改数据在数据表中修改数据 4 对数据库的操作 查询数据表中的数据查询数据表中的数据 4.5 4.2查询数据表中的数据创建DBConfig类 public interface DBConfig String DRIVER=com.mysql.jdbc.Driver;String URL=jdbc:mysql:/localhost:3306/db_database15;String USERNAME=root;String P
46、ASSWORD=111;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class DBHelper implements DBConfig public static void main(String args)try Class.forName(DRIVER);catch(ClassNotFoundException e)e.printStackTrace();try Connection conn=n
47、ull;conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);4.2查询数据表中的数据创建DBHelper Statement stat=null;stat=conn.createStatement();String sql=select*from student;ResultSet rs=null;rs=stat.executeQuery(sql);while(rs.next()System.out.println(“序号:”+rs.getInt(“id”);System.out.println(“姓名:”+rs.getString(
48、“name”);System.out.println(“性别:”+rs.getString(“gender”);System.out.println(“年龄:”+rs.getInt(“age”);System.out.println(“学院:”+rs.getString(“department”);System.out.println(“Email:”+rs.getString(“email”);catch(SQLException e)4.2查询数据表中的数据创建DBHelper e.printStackTrace();finally try rs.close();stat.close();conn.close();catch(SQLException e)e.printStackTrace();4.2查询数据表中的数据创建DBHelper 本章作业 本章作业 本章作业 编程题:(1)在数据库db_database15中删除数据表student(2)在数据库db_database15的数据表student中删除年龄为20的全部记录(3)在数据库db_database15的数据表student中将年龄为20的记录统一改成22