1 / 45

第 15 章

第 15 章. 数据库编程. 15.1 数据库简介 15.2 使用 JDBC 连接数据库 15.3 建立数据源 15.4 Java 数据库编程. 15-1 数据库简介. 数据库是长期存储在计算机内的、有组织的、可共享的数据集合。在当今的信息时代,数据库无处不在。本章介绍 Java 的数据库功能。. 15-1-1 关系型数据库. 数据库是管理和组织信息和数据的综合系统,关系型数据库是目前使用最为广泛的数据库系统,在各领域中得到了广泛使用。

brandi
Download Presentation

第 15 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第15章 数据库编程

  2. 15.1 数据库简介 • 15.2 使用JDBC连接数据库 • 15.3 建立数据源 • 15.4 Java数据库编程

  3. 15-1 数据库简介 数据库是长期存储在计算机内的、有组织的、可共享的数据集合。在当今的信息时代,数据库无处不在。本章介绍Java的数据库功能。

  4. 15-1-1 关系型数据库 数据库是管理和组织信息和数据的综合系统,关系型数据库是目前使用最为广泛的数据库系统,在各领域中得到了广泛使用。 目前广泛使用的大型关系型数据库产品有Oracle,Sybase,DB2和SQL Server。除此之外,小型关系型数据库产品Access、MySQL和Visual FoxPro也使用得较多。

  5. 15-1-1 关系型数据库(续) 关系型数据库中以表为单位来组织数据,表是由行和列组成的二维表格。 表由结构和记录两部分组成。表结构对应表头信息,包括表所包含的列名、数据类型和数据长度等信息。列也称为字段。 记录是表中除结构外的各行数据。每一行称为一条记录,每条记录由若干个域组成。一个域对应表中的一列。每个域的数据要符合所在列数据类型的规定。

  6. 表15-1 职工信息

  7. 表15-2 职工信息表结构

  8. 15-1-2 SQL简介 结构化查询语言SQL(Structured Query Language)是所有关系型数据库都支持的一种统一的数据库语言,在Java中对数据库操作是通过SQL语言来实现的。利用SQL可以非常方便地建立数据库表、查询数据,给数据库中输入新数据、修改数据及删除数据等。

  9. 1.定义表 要建立表,首先需建立表结构。建立数据库中表结构的语句为: CREATE TABLE 表名(列名1 数据类型1 [条件1],列名2 数据类型2 [条件2],┅ ) 如建立表15-1所对应的职工信息表employee的结构,可以使用如下的SQL语句: CREATE TABLE employee ( no char(4) not null, name char(8), sex char(2), salary float);

  10. 2.查询 利用SELECT语句从数据库中查询信息,其句型如下: SELECT 列名1, 列名2, ┅ FROM 表名1,表名2,┅ [ WHERE 条件] 例如,查询表employee中男性职员的信息,使用语句: SELECT no, name, sex, salary FROM employee WHERE sex=‘男‘;

  11. 如要查询salary在700以上职员的no和name信息,使用语句:如要查询salary在700以上职员的no和name信息,使用语句: SELECT no, name FROM employee WHERE salary>700;

  12. 3. 插入 利用INSERT语句向表中插入记录,INSERT语句的格式如下: INSERT INTO 表名 VALUES (列1值,列2值,┅) 如要向表employee中插入一条记录,其no,name,sex,salary的值分别为: 1020、孙红军、男、575.50 使用如下的INSERT语句: INSERT INTO employee VALUES(‘1020’, ‘孙红军’, ‘男’, 575.50);

  13. 4. 删除 要删除表中的一条或多条记录,可以使用DELETE语句,其格式如下: DELETE FROM 表名 WHERE 条件 例如,要删除表employee中no值为1004的记录,语句如下: DELETE FROM employee WHERE no=‘1004’;

  14. 5. 修改 要修改表中的记录,可以使用UPDATE语句,其格式如下: UPDATE 表名 SET 列名1=值1, 列名2=值2,┅ WHERE 条件 例如,要将employee中,no为1004职员的name改为“王大海”,salary改为800,其语句如下: UPDATE employee SET name="王大海", salary=800 WHERE no="1004";

  15. 15-2 使用JDBC连接数据库 15-2-1 JDBC简介 在Java程序中,连接数据库采用JDBC(Java Database Connectivity)技术。 JDBC是由Sun公司提供的与平台无关的数据库连接标准,它将数据库访问封装在少数几个方法内,使用户可以极其方便地查询数据库、插入新的数据、更改数据。 JDBC是一种规范,目前各大数据库厂商基本都提供JDBC驱动程序,使得Java程序能独立运行于各种数据库之上。

  16. 15-2-1 JDBC简介(续) JDBC提供的主要接口有: • java.sql.DriverManager:用于驱动程序的调入。 • java.sql.Connection:与特定数据库建立连接。 • java.sql.Statement:用于SQL语句的执行,包括查询语句、更新语句、创建数据库语句等。 • java.sql.ResultSet:用于保存查询所得的结果。

  17. 15-2-2 JDBC驱动程序 JDBC驱动程序有4类 • JDBC-ODBC桥驱动程序 • 原生API结合JAVA驱动程序 • 网络协议搭配完整的JAVA驱动程序 • 原生协议搭配完整的JAVA驱动程序

  18. 1.JDBC-ODBC桥驱动程序 Sun公司在Java 2中免费提供JDBC-ODBC桥驱动程序,供存取标准的ODBC数据源。如用来存取Microsoft Access数据库、Visual FoxPro 数据库等。

  19. 2.原生API结合Java驱动程序 这类驱动程序将JDBC的调用转换成个别数据库系统的原生码调用,由于使用原生码,任何错误都可能使服务器死机。

  20. 3.网络协议搭配完整的Java驱动程序 这类驱动程序将JDBC调用转换成个别数据库系统的独立网络协议,再转换成个别数据库系统的原生码调用。这类驱动程序最具弹性,最适合applet程序的开发,不过要考虑安全性及防火墙等额外负担。

  21. 4.原生协议搭配完整的Java驱动程序 这类驱动程序全由Java写成,利用随数据库而异的原生协议直接与数据库沟通,不用通过中介软件,它是属于专用的驱动程序,要靠厂商直接提供。

  22. 15-3 建立数据源 使用第1类驱动程序连接数据库,需要首先建立数据源。本节以国内广泛使用的Windows 2000操作系统和Microsoft Access 2000数据库为例,说明数据源的建立方法。

  23. 15-3-1 建立数据库 数据源是连接到数据库的接口,要建立数据源首先需建立数据库。 1.建立数据库 2.建立表的结构 3.输入记录

  24. 15-3-2 建立数据源 • 单击“开始”按钮,选择“设置”菜单中的“控制面版”,出现控制面板窗口。 • 在控制面板窗口中,双击“管理工具”图标,出现“管理工具”窗口。 • 在“管理工具”窗口中,双击“数据源(ODBC)”图标,出现“ODBC数据源管理器”窗口,选择“系统DSN”选项卡。 • 单击“添加”按钮,出现“创建新数据源”对话框,让用户选择数据源的驱动程序。

  25. 15-3-2 建立数据源(续) • 选择“Microsoft Access driver(*.mdb)”,并单击“完成”按钮,出现“ODBC Microsoft Access安装”对话框。让用户输入数据源的名称、简短说明及数据库。 • 在“数据源名”文本框中输入数据源的名称,在“说明”文本框中输入对数据源的简短说明。本例中,分别输入myDB和“职员数据库”。 • 单击“选择”按钮,出现“选择数据库”对话框。让用户选择数据库的存放位置和名称。

  26. 15-3-2 建立数据源(续) • 在“驱动器”下拉列表框中选择数据库所在的驱动器,在“目录”下拉列表框中选择数据库所在的目录,在“数据库名”列表框中选择数据库的名称。 • 单击“确定”按钮,完成数据库的选择,回到“ODBC Microsoft Access安装”对话框。 • 如果要设置数据库的用户名和密码,单击“高级”按钮,出现“设置高级选项”对话框, • 单击“确定”按钮,完成数据源的建立。

  27. 15-4 Java数据库编程 本节首先介绍数据库编程的一般过程,然后通过几个有代表性的实例介绍数据库编程方法。

  28. 15-4-1 数据库编程的一般过程 • 加载驱动程序 要连接数据库,首先要加载JDBC驱动程序。加载JDBC驱动程序的语句如下: Class.forName(JDBC驱动程序名) 例如,要加载JDBC-ODBC桥驱动程序,使用以下语句; Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) 使用JDBC-ODBC桥驱动程序,可以通过ODBC数据源连接数据库。

  29. 连接数据库 加载了JDBC驱动程序后,便可以连接数据库了。连接数据库使用以下语句; Connection 连接变量=DriverManager. getConnection(数据库URL,用户帐号, 用户密码) 例如Connection conn=DriverManager. getConnection(“jdbc:odbc:myDB”, “li”, “1234”) 如果连接成功,对数据库的任何操作都可以通过conn来进行了。

  30. 执行SQL 要对连接的数据库进行查询、更改或添加数据,可通过SQL语句。执行SQL语句需要建立SQL语句(Statement)对象变量。建立SQL语句变量的句型如下: Statement SQL语句变量=连接变量. createStatement() 如已经建立了连接变量conn,可以用下面的语句建立SQL语句变量stmt: Statement stmt=conn.CreateStatement() 建立了SQL语句变量,便可以执行SQL语句。使用下列语句: rs=stmt.executeQuery("SELECT * FROM employee WHERE sex=’男’ ”) ResultSet对象以类似表中记录的组织方式来组织查询到的结果。使用下列的循环语句对查询结果逐行处理。 while (rs.next()) { 对每行记录进行处理 }

  31. 关闭连接 对数据库操作完成后,应该将与数据库的连接关闭。关闭连接使用的方法是close()。其句型是: 连接变量.close() 例如,要关闭前面建立的连接conn,使用以下语句: conn.close() 执行完SQL语句,还应该将SQL语句变量关闭。同样,如果执行的是查询语句SELECT,执行完后,还应该关闭结果集。

  32. 15-4-2 数据库编程实例 1 查询数据库 例:查询数据库 假定对数据库myDB.mdb已经建立了数据源myDB,myDB.mdb中有一个表employee。该实例利用JDBC-ODBC桥驱动程序,访问Access数据库myDB.mdb,显示表中所有职员的no(编号)、name(姓名)、sex(性别)和salary(工资)。 import java.sql.*; class Query { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  33. try { Connection con = DriverManager.getConnection("jdbc:odbc:myDB"); Statement stmt = con.createStatement(); ResultSet rs=stmt.executeQuery("select * from employee"); while (rs.next()) { System.out.println( "编号" + rs.getString(no) + "\t" + "姓名 " + rs.getString(name) + "\t" + "性别 " + rs.getString(sex) + "\t" + "工资 " + rs.getFloat(salary) ); } rs.close(); stmt.close(); } catch (SQLException e) { System.out.println("SQLException:"+e.getMessage()); } } }

  34. 2.插入记录 假定对数据库myDB.mdb已经建立了数据源myDB,myDB.mdb中有一个表employee,该实例利用JDBC-ODBC桥驱动程序,访问Access数据库myDB.mdb,在表中插入2条记录,其数据分别为:2001,邢雪花,女,650和2020,翟建设,男,746。 import java.sql.*; class Insert1 { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  35. try { Connection con = DriverManager.getConnection("jdbc:odbc:myDB","li","1234"); Statement stmt = con.createStatement(); String sqlstr = "insert into employee values('2001', '邢雪花','女',650)"; stmt.executeUpdate(sqlstr); stmt.executeUpdate("insert into employee values('2020','翟建设','男',746)"); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQLException:"+e.getMessage()); } } }

  36. 3.修改记录 该实例利用JDBC-ODBC桥驱动程序访问Access数据库myDB.mdb,修改表中2条记录,将name为翟建设的记录的no改为3000,将no值为2001记录中的salary改为900。 import java.sql.*; class Update1 { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  37. try { Connection con = DriverManager.getConnection("jdbc:odbc:myDB","li","1234"); Statement stmt = con.createStatement(); String sql = "update employee set no= '3000'" + "where name= '翟建设'"; stmt.executeUpdate(sql); sql = "update employee set salary=900 "+"where no = ‘2001'"; stmt.executeUpdate(sql); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQLException:"+e.getMessage()); } } }

  38. 4. 删除记录 该实例利用JDBC-ODBC桥驱动程序,访问Access数据库mdDB.mdb,删除employee表中no值为1004的记录。 import java.sql.*; class Delete { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  39. 4. 删除记录(续) try{ Connection con = DriverManager.getConnection("jdbc:odbc:myDB","li","1234"); Statement stmt = con.createStatement(); String sql = "delete from employee where no=‘1004'"; stmt.executeUpdate(sql); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQLException:"+e.getMessage()); } } }

  40. 5. 建立表 该实例利用JDBC-ODBC桥驱动程序访问Access数据库mdDB.mdb,建立表student,其中有s_num(学号)、s_name(姓名)和score(成绩)3列数据。给表中输入一条记录,其数据为:9901,张学军,85。 import java.sql.*; class Create { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  41. try { Connection con = DriverManager.getConnection("jdbc:odbc:myDB","li","1234"); Statement stmt = con.createStatement(); String sql= "create table student (s_num char(4), s_name char(6) null, score int)"; stmt.executeUpdate(sql); sql = "insert into student(s_num, s_name,score) values('9901', '张学军',85)"; stmt.executeUpdate(sql); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQLException:1 "+e.getMessage()); } } }

  42. 6. 删除表 该实例利用JDBC-ODBC桥驱动程序访问Access数据库myDB.mdb,删除表student。 import java.sql.*; class Drop { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  43. try{ Connection con = DriverManager.getConnection("jdbc:odbc:myDB","li","1234"); Statement stmt = con.createStatement(); String sql = "drop table student"; stmt.executeUpdate(sql); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQLException:1 "+e.getMessage()); } } }

  44. 7.取表中各列名称 该实例利用JDBC-ODBC桥驱动程序访问Access数据库myDB.mdb,取表student中各列名称。 import java.sql.*; class Meta { public static void main(String args[]) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException ce) { System.out.println("SQLException:"+ce.getMessage()); }

  45. try { Connection con = DriverManager.getConnection("jdbc:odbc:myDB","li","1234"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery ("SELECT * FROM student"); ResultSetMetaData rsmd = rs.getMetaData(); for(int i = 1; i <= rsmd.getColumnCount(); i++) {if( i==1 ) System.out.print(rsmd.getColumnName(i)); else System.out.print(","+ rsmd.getColumnName(i)); } rs.close(); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQLException:1 "+e.getMessage()); } } }

More Related