Java基础教程(第3版)_第10章_JDBC数据库操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) { System.out.println(e); }
2015/9/21
第 11 页
10.3.4 建立连接
编写连接数据库代码不会出现数据库的名称,只能出现数 据源的名字。 首先使用java.sql包中的Connection类声明一个对象,然后 再使用类DriverManager调用它的静态方法getConnection创建这 个连接对象,建立连接时应捕获SQLException异常 :
2015/9/21
第 20 页
10.4.3 条件查询 例子3,分别按商品号和价格查询记录。主类将查 询条件传递Query类的实例。程序运行效果如图10.10。
2015/9/21
第 21 页
10.4.4 排序查询
可以在 SQL 语句中使用 ORDER BY 子语句对记录排序, 例如,按price排序查询的SQL语句:
使用JDBC─ODBC桥接器连接数据库的优点: 使得所编写的程序可以处理几乎所有类型的数据库。 使用JDBC─ODBC桥接器连接数据库的缺点: 使得所编写的程序依赖于ODBC,移植性差。 使用纯Java数据库驱动程序连接数据库的优点: 移植性好,不依赖平台。缺点是不同的数据库需要不同的驱动程序。
2015/9/21 第 7 页
注意:开始用功了!
2015/9/21
第 1 页
《Java 基础教程(第3版)》 第10章
JDBC数据库操作
Power point 制作:耿祥义 张跃平
配合例子源代码一起使用
2015/9/21
第 2 页
主要内容
2015/9/21
第 3 页
10.1 Microsoft Access 数据库管理系统 10.1.1 建立数据库 建立一个名字为shop的数据库。 操作步骤如下: 单击“开始”→“所有程 序”→“ Microsoft Access”,在 新建数据库界面选择“空 Access 数据库”,然后命名、保存新建 的数据库,在这里我们命名的数 据库是shop,保存在C:\ch10中。
10.3 连接数据库 10.3.1使用JDBC─ODBC桥接器连接数据库 使用JDBC─ODBC桥接器连接数据库的3个步骤 (1)建ODBC数据源 (2)建立JDBC-ODBC桥接器 (3)和ODBC数据源建立连接
2015/9/21
第 8 页
10.3.2 ODBC数据源
1.创建、修改或删除数据源 选择“控制面板”→“管理工具”→“ ODBC 数据源”(某些 windows xp 系统,需选择“控制面板”→“性能和维护”→“管 理工具”→“ODBC数据源”)。 双击ODBC数据源图标,出现的界面显示了用户已有的数据源的 名称。选择“系统DSN”或“用户DSN”,单击“添加”按钮,可以 创建新的数据源;单击“配置”按钮,可以重新配置已有的数据 源;单击“删除”按钮,可以删除已有的数据源。 2.为数据源选择驱动程序 因为要访问 Access 数据库 , 选择 Microsoft Acess Driver(*.mdb)。 3.数据源名称及对应数据库的所在位置 在名称栏里为数据源起一个自己喜欢的名字,这里我们起的 名字是 myData 。这个数据源就是指某个数据库。在“数据库选 择 ” 栏 中 选 择 一 个 数 据 库 , 这 里 我 们 选 择 的 是 C:\ch10 下 的 shop.mdb数据库。
2.处理查询结果
ResultSet rs=sql.executeQuery("SELECT * FROM goods"); ResultSet rs = sql.executeQuery("SELECT name,price FROM goods");
3.查询结果放在实现了ResultSet接口的结果集类中。
2015/9/21
第 6 页
10.3 连接数据库 10.3.1 连接方式的选择 和数据库建立连接的常用两种方式是:建立JDBC─ODBC桥接 器和加载纯Java数据库驱动程序: •使用JDBC─ODBC桥接器方式的机制是,应用程序只需建立 JDBC 和ODBC之间的连接,即所谓的建立JDBC─ODBC桥接器,而和数据 库的连接由ODBC去完成。 •如果使用纯 Java 数据库驱动程序连接数据库需要得到数据库厂 商提供的纯Java数据库驱动程序。
2015/9/21 第 17 页
Statement stmt=con.createStatement(int type ,int concurrency);
• type的取值决定滚动的方式: ResultSet.TYPE_FORWORD_ONLY:结果集的 游标只能向下移动。 ResultSet.TYPE_SCROLL_INSENSITIVE:结果 集的游标可以上下移动,且当数据库变化时, 当前结果集不变。 ResultSet.TYPE_SCROLL_SENSITIVE:结果集 的游标可以上下移动,且当数据库变化时,当 前结果集同步改变。
在 shop 管理的“表”的界面上,用鼠标双击已创建 的表可以为该表添加记录。
2015/9/21
第 5 页
10.2 JDBC
Java 提 供 了 专 门 用 于 操 作 数 据 库 的 API, 即 JDBC (Java DataBase Connection) 。JDBC操作不同的数据库仅仅是连接方 式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接, 就可以使用JDBC提供的API操作数据库.程序经常使JDBC进行如下 的操作 : (1)与一个数据库建立连接。 (2)向数据库发送SQL语句。 (3)处理数据库返回的结果。
2015/9/21
第 18 页
Statement stmt=con.createStatement(int type ,int concurrency);
Concurrency取值决定是否可以用结果集去更新数 据库。 ResultSet.CONCUR_READ_ONLY 不能用结果 集去更新数据库。 ResultSet.CONCUR_UPDATABLE 能用结果集 去更新数据库。
为了能和数据源myData交换数据,建立连接时应捕获SQLException异常: try{ Connection con=DriverManager.getConnection("jdbc:odbc:myData", "",""); } catch(SQLException e){}
2015/9/21 第 12 页
try{ Connection con= DriverManager.getConnection(“jdbc:odbc:数据源名字”, "login name", " password "); } catch(SQLException e){}
Connection con=DriverManager. getConnection("jdbc:odbc:数据源名字", "","");
SELECT * FROM goods ORDER BY price
例子4 中使用例子 3 中的 Query 类的实例分别按商品 名称和价格排序 goods 表中的全部记录。 程序运行效果 如图10.11。
2015/9/21
第 22 页
10.4.5
模糊查询
可以用SQL语句操作符LIKE进行模式般配,使用“%”代替 零个或多个字符,用一个下划线“ _ ”代替一个字符,用 [abc] 代 替 a、b、c 中的任何一个。比如,下述语句查询商品名称中含有 “T”或“宝”的记录:
2015/9/21
第 14 页
ResultSet接口 • ResultSet对象包含符合指定SQL语句中条件的 所有行,即结果集
• 并且它通过一套get方法(这些get方法可以访问当前 行中的不同列)提供了对这些行中数据的访问。
• ResultSet对象使用next()方法移到下一数据行 • ResultSet对象使用getXxx方法获得字段值 • 表10.1给了出了ResultSet对象的若干方法。 • 注:无论字段是何种属性,总可以使用 getString(int columnIndex)或getString(String columnName)方法返回字段值的串表示。
2015/9/21 第 15 页
15
例子1是一个简单的Java应用程序,该程 序连接到数据源 myData,查询 goods 表 中 price 字段值大于 300000 的全部记录。 程序运行效果如图10.8。
2015/9/21
第 16 页
10.wk.baidu.com.2 控制游标
需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条 记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果 集,需使用下述方法先获得一个Statement对象: Statement stmt=con.createStatement(int type ,int concurrency); 然后根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集: ResultSet re=stmt.executeQuery(SQL语句); type的取值、 concurrency的取值见page 176 滚动查询经常用到ResultSet的下述方法:
public boolean previous() :将游标向上移动 public void beforeFirst() :将游标移动到结果集的初始位置。
更多方法见page 176
例 子 2 中 , 在查询 goods 表 时,首先将游标移动到最后一 行,然后再获取最后一行的行 号,以便获得表中的记录数目。 程序倒序输出 goods 表中的记 录,效果如图10.9。
2015/9/21 第 9 页
10.3.2 ODBC数据源_图示
2015/9/21
第 10 页
10.3.3 建立JDBC-ODBC桥接器 JDBC 使 用 java.lang 包 中 的 Class 类 建 立 JDBCODBC桥接器。建立桥接器时可能发生异常,必须捕获 这个异常,建立桥接器的代码是:
2015/9/21
第 4 页
10.1.2 创建表 在 shop 数据库中创建名字为 goods 的表。在 shop 管 理的“表”的界面上选择“使用设计器创建表”,然后 单击界面上的“设计”菜单,将出现相应的建表界面, 我们建立的表是goods,该表的字段(属性)为:
number(文本) name(文本) madeTime(日期) price(数字,双精度)。
2015/9/21
第 19 页
ResultSet re=stmt.executeQuery(SQL语句);
滚动查询经常用到的ResultSet类的方法: 1. public boolean previous()将游标向上移动,当移到结果集第 一行之前时返回false。 2. public boolean next()将游标向下移动,当移到结果集第后一 行之后时返回false。 3. public void beforeFirst()将游标移动到结果集第一行之前。 4. public void first()将游标移动到结果集第一行。 5. public void last()将游标移动到结果集第后一行。 6. public boolean absolute(int row)将游标移动到参数指定的行, row可以是负数,表示倒数第row行 7. public boolean isFirst()判断游标是否指向结果集的第一行。 8. public boolean isLast()判断游标是否指向结果集的第后一行。
10.4 查询操作
JDBC 和数据库表进行交互的主要方式是使用SQL 语句, JDBC 提供的API可以将标准的SQL语句发送给数据库,实现和数据库的 交互。
2015/9/21
第 13 页
10.4.1 顺序查询 对一个数据库中表进行查询操作的具体步骤如下。 1.向数据库发送SQL查询语句
try{ Statement sql=con.createStatement(); } catch(SQLException e ){}
2015/9/21
第 11 页
10.3.4 建立连接
编写连接数据库代码不会出现数据库的名称,只能出现数 据源的名字。 首先使用java.sql包中的Connection类声明一个对象,然后 再使用类DriverManager调用它的静态方法getConnection创建这 个连接对象,建立连接时应捕获SQLException异常 :
2015/9/21
第 20 页
10.4.3 条件查询 例子3,分别按商品号和价格查询记录。主类将查 询条件传递Query类的实例。程序运行效果如图10.10。
2015/9/21
第 21 页
10.4.4 排序查询
可以在 SQL 语句中使用 ORDER BY 子语句对记录排序, 例如,按price排序查询的SQL语句:
使用JDBC─ODBC桥接器连接数据库的优点: 使得所编写的程序可以处理几乎所有类型的数据库。 使用JDBC─ODBC桥接器连接数据库的缺点: 使得所编写的程序依赖于ODBC,移植性差。 使用纯Java数据库驱动程序连接数据库的优点: 移植性好,不依赖平台。缺点是不同的数据库需要不同的驱动程序。
2015/9/21 第 7 页
注意:开始用功了!
2015/9/21
第 1 页
《Java 基础教程(第3版)》 第10章
JDBC数据库操作
Power point 制作:耿祥义 张跃平
配合例子源代码一起使用
2015/9/21
第 2 页
主要内容
2015/9/21
第 3 页
10.1 Microsoft Access 数据库管理系统 10.1.1 建立数据库 建立一个名字为shop的数据库。 操作步骤如下: 单击“开始”→“所有程 序”→“ Microsoft Access”,在 新建数据库界面选择“空 Access 数据库”,然后命名、保存新建 的数据库,在这里我们命名的数 据库是shop,保存在C:\ch10中。
10.3 连接数据库 10.3.1使用JDBC─ODBC桥接器连接数据库 使用JDBC─ODBC桥接器连接数据库的3个步骤 (1)建ODBC数据源 (2)建立JDBC-ODBC桥接器 (3)和ODBC数据源建立连接
2015/9/21
第 8 页
10.3.2 ODBC数据源
1.创建、修改或删除数据源 选择“控制面板”→“管理工具”→“ ODBC 数据源”(某些 windows xp 系统,需选择“控制面板”→“性能和维护”→“管 理工具”→“ODBC数据源”)。 双击ODBC数据源图标,出现的界面显示了用户已有的数据源的 名称。选择“系统DSN”或“用户DSN”,单击“添加”按钮,可以 创建新的数据源;单击“配置”按钮,可以重新配置已有的数据 源;单击“删除”按钮,可以删除已有的数据源。 2.为数据源选择驱动程序 因为要访问 Access 数据库 , 选择 Microsoft Acess Driver(*.mdb)。 3.数据源名称及对应数据库的所在位置 在名称栏里为数据源起一个自己喜欢的名字,这里我们起的 名字是 myData 。这个数据源就是指某个数据库。在“数据库选 择 ” 栏 中 选 择 一 个 数 据 库 , 这 里 我 们 选 择 的 是 C:\ch10 下 的 shop.mdb数据库。
2.处理查询结果
ResultSet rs=sql.executeQuery("SELECT * FROM goods"); ResultSet rs = sql.executeQuery("SELECT name,price FROM goods");
3.查询结果放在实现了ResultSet接口的结果集类中。
2015/9/21
第 6 页
10.3 连接数据库 10.3.1 连接方式的选择 和数据库建立连接的常用两种方式是:建立JDBC─ODBC桥接 器和加载纯Java数据库驱动程序: •使用JDBC─ODBC桥接器方式的机制是,应用程序只需建立 JDBC 和ODBC之间的连接,即所谓的建立JDBC─ODBC桥接器,而和数据 库的连接由ODBC去完成。 •如果使用纯 Java 数据库驱动程序连接数据库需要得到数据库厂 商提供的纯Java数据库驱动程序。
2015/9/21 第 17 页
Statement stmt=con.createStatement(int type ,int concurrency);
• type的取值决定滚动的方式: ResultSet.TYPE_FORWORD_ONLY:结果集的 游标只能向下移动。 ResultSet.TYPE_SCROLL_INSENSITIVE:结果 集的游标可以上下移动,且当数据库变化时, 当前结果集不变。 ResultSet.TYPE_SCROLL_SENSITIVE:结果集 的游标可以上下移动,且当数据库变化时,当 前结果集同步改变。
在 shop 管理的“表”的界面上,用鼠标双击已创建 的表可以为该表添加记录。
2015/9/21
第 5 页
10.2 JDBC
Java 提 供 了 专 门 用 于 操 作 数 据 库 的 API, 即 JDBC (Java DataBase Connection) 。JDBC操作不同的数据库仅仅是连接方 式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接, 就可以使用JDBC提供的API操作数据库.程序经常使JDBC进行如下 的操作 : (1)与一个数据库建立连接。 (2)向数据库发送SQL语句。 (3)处理数据库返回的结果。
2015/9/21
第 18 页
Statement stmt=con.createStatement(int type ,int concurrency);
Concurrency取值决定是否可以用结果集去更新数 据库。 ResultSet.CONCUR_READ_ONLY 不能用结果 集去更新数据库。 ResultSet.CONCUR_UPDATABLE 能用结果集 去更新数据库。
为了能和数据源myData交换数据,建立连接时应捕获SQLException异常: try{ Connection con=DriverManager.getConnection("jdbc:odbc:myData", "",""); } catch(SQLException e){}
2015/9/21 第 12 页
try{ Connection con= DriverManager.getConnection(“jdbc:odbc:数据源名字”, "login name", " password "); } catch(SQLException e){}
Connection con=DriverManager. getConnection("jdbc:odbc:数据源名字", "","");
SELECT * FROM goods ORDER BY price
例子4 中使用例子 3 中的 Query 类的实例分别按商品 名称和价格排序 goods 表中的全部记录。 程序运行效果 如图10.11。
2015/9/21
第 22 页
10.4.5
模糊查询
可以用SQL语句操作符LIKE进行模式般配,使用“%”代替 零个或多个字符,用一个下划线“ _ ”代替一个字符,用 [abc] 代 替 a、b、c 中的任何一个。比如,下述语句查询商品名称中含有 “T”或“宝”的记录:
2015/9/21
第 14 页
ResultSet接口 • ResultSet对象包含符合指定SQL语句中条件的 所有行,即结果集
• 并且它通过一套get方法(这些get方法可以访问当前 行中的不同列)提供了对这些行中数据的访问。
• ResultSet对象使用next()方法移到下一数据行 • ResultSet对象使用getXxx方法获得字段值 • 表10.1给了出了ResultSet对象的若干方法。 • 注:无论字段是何种属性,总可以使用 getString(int columnIndex)或getString(String columnName)方法返回字段值的串表示。
2015/9/21 第 15 页
15
例子1是一个简单的Java应用程序,该程 序连接到数据源 myData,查询 goods 表 中 price 字段值大于 300000 的全部记录。 程序运行效果如图10.8。
2015/9/21
第 16 页
10.wk.baidu.com.2 控制游标
需要在结果集中前后移动、显示结果集指定的一条记录或随机显示若干条 记录等。这时,必须要返回一个可滚动的结果集。为了得到一个可滚动的结果 集,需使用下述方法先获得一个Statement对象: Statement stmt=con.createStatement(int type ,int concurrency); 然后根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集: ResultSet re=stmt.executeQuery(SQL语句); type的取值、 concurrency的取值见page 176 滚动查询经常用到ResultSet的下述方法:
public boolean previous() :将游标向上移动 public void beforeFirst() :将游标移动到结果集的初始位置。
更多方法见page 176
例 子 2 中 , 在查询 goods 表 时,首先将游标移动到最后一 行,然后再获取最后一行的行 号,以便获得表中的记录数目。 程序倒序输出 goods 表中的记 录,效果如图10.9。
2015/9/21 第 9 页
10.3.2 ODBC数据源_图示
2015/9/21
第 10 页
10.3.3 建立JDBC-ODBC桥接器 JDBC 使 用 java.lang 包 中 的 Class 类 建 立 JDBCODBC桥接器。建立桥接器时可能发生异常,必须捕获 这个异常,建立桥接器的代码是:
2015/9/21
第 4 页
10.1.2 创建表 在 shop 数据库中创建名字为 goods 的表。在 shop 管 理的“表”的界面上选择“使用设计器创建表”,然后 单击界面上的“设计”菜单,将出现相应的建表界面, 我们建立的表是goods,该表的字段(属性)为:
number(文本) name(文本) madeTime(日期) price(数字,双精度)。
2015/9/21
第 19 页
ResultSet re=stmt.executeQuery(SQL语句);
滚动查询经常用到的ResultSet类的方法: 1. public boolean previous()将游标向上移动,当移到结果集第 一行之前时返回false。 2. public boolean next()将游标向下移动,当移到结果集第后一 行之后时返回false。 3. public void beforeFirst()将游标移动到结果集第一行之前。 4. public void first()将游标移动到结果集第一行。 5. public void last()将游标移动到结果集第后一行。 6. public boolean absolute(int row)将游标移动到参数指定的行, row可以是负数,表示倒数第row行 7. public boolean isFirst()判断游标是否指向结果集的第一行。 8. public boolean isLast()判断游标是否指向结果集的第后一行。
10.4 查询操作
JDBC 和数据库表进行交互的主要方式是使用SQL 语句, JDBC 提供的API可以将标准的SQL语句发送给数据库,实现和数据库的 交互。
2015/9/21
第 13 页
10.4.1 顺序查询 对一个数据库中表进行查询操作的具体步骤如下。 1.向数据库发送SQL查询语句
try{ Statement sql=con.createStatement(); } catch(SQLException e ){}