1 / 46

第 12 章 JDBC 数据库应用程序设计

第 12 章 JDBC 数据库应用程序设计. 12.1 JDBC 概述. JDBC(Java Data Base Connectivity ,其中文含义是 Java 数据库连接 ) ,可以将它理解为一种数据库存取的综合技术。 JDBC 内嵌于 Java 中, 提供存取关系数据库的标准库。其主要由两部分组成: JDBC API 和 JDBC 驱动程序管理器。所有用户界面的生成,事件驱动,对数据库的存取等功能均是由 Java 来实现的。 1. 数据库概述

etenia
Télécharger la présentation

第 12 章 JDBC 数据库应用程序设计

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. 第12章 JDBC数据库应用程序设计

  2. 12.1 JDBC概述 • JDBC(Java Data Base Connectivity,其中文含义是Java数据库连接),可以将它理解为一种数据库存取的综合技术。 • JDBC内嵌于Java 中, 提供存取关系数据库的标准库。其主要由两部分组成:JDBC API和JDBC 驱动程序管理器。所有用户界面的生成,事件驱动,对数据库的存取等功能均是由Java 来实现的。 • 1.数据库概述 • 数据库是指长期存储在计算机内,有组织、可共享的数据集合。有大量的数据库产品可应用于实际的数据库管理和程序设计。例如,Oracle,SQL Server,DB2,SyBase,FoxPro,Access,MySQL等。其中大量应用的数据库产品是关系型数据库系统,关系数据库有严格的数学理论为基础,数据和数据之间的联系表示为二维表的形式(关系),用户使用直观、简单。

  3. 通常按照习惯,将二维表的行称为记录,列称为字段或域。一个数据库由若干表(即关系)构成,其中一些表可表示数据,另一些表可表示数据之间的联系。通常按照习惯,将二维表的行称为记录,列称为字段或域。一个数据库由若干表(即关系)构成,其中一些表可表示数据,另一些表可表示数据之间的联系。 • 例如:设在“学生”数据库中有“学生成绩”表,其内容如表12-1所示: • 表12-1“学生成绩”数据表

  4. 2.JDBC连接数据库的方式 • 在Java程序中要对数据库进行各种操作,可使用JDBC技术实现对数据库的连接和访问。本书主要介绍JDBC连接数据库的两种方式:使用JDBC-ODBC桥接器和直接使用某种数据库的驱动程序。 • (1)使用JDBC-ODBC Bridge(桥接器) • 此种方式利用微软公司定义的ODBC(开放数据库连接)对数据库访问的通用接口来访问操作数据库。因为ODBC支持大多数数据库的连接和访问,JDBC通过JDBC-ODBC桥来将JDBC API转换成ODBC API,进而通过ODBC来存取数据库。

  5. 为了使用这种方式连接和访问数据库,需在Windows系统中创建与数据库对应的数据源。 • 在Windows XP中,可在控制面板中选择“管理工具”,在其中的项目中选择“数据源(ODBC)”,可设置SQL Server 2000 数据库中的数据库 “学生”(在SQL Server中已经建立) 为ODBC数据源。 名称为student的数 据源设置完成后的 情况见图。

  6. (2)使用某种数据库的专用驱动程序 • 此种方式是JDBC与某种数据库的专用驱动程序相连,不用创建数据源就能存取相应的数据库。如对SQL Server 2000,可以到下面的网页去下载“SQL Server 2000 Driver for JDBC”: • http://www.microsoft.com/china/sql/downloads/2000/jdbc.asp • 下载后得到一个2MB多的Setup.exe文件,运行该文件将进行驱动的安装。在安装目的文件夹中将创建lib子文件夹,其中包含三个jar文件:msbase、mssqlserver和msutil。按照系统说明书的要求,这三个文件要设置到classpath类搜索路径中。

  7. 3.JDBC连接数据库程序设计的主要步骤 • 应用JDBC设计数据库应用程序,需要使用到较多的Java类与接口,掌握这些类与接口,并遵从一定的操作步骤,就能顺利进行数据库的存取,从而进行数据库应用程序的设计。JDBC的类和方法都包含在java.sql包中,Java数据库应用程序的设计都需要引入java.sql包。下面从基本应用的角度,按照数据库应用程序的设计步骤来介绍JDBC相关类和接口。 • (1)装载驱动程序 • 首先使用Class类的forName方法来装载驱动程序。装载驱动程序要处理异常。两种装载驱动程序的方法如下:

  8. 使用ODBC-JDBC桥接器的例: • try { • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • }catch(java.lang.ClassNotFoundException e) { • System.out.println("类未找到错误!"+e); • } • 使用SQL Server 2000驱动程序的例: • try { • Class.forName("com.microsoft.jdbc.sqlserver • .SQLServerDriver"); • }catch(java.lang.ClassNotFoundException e) { • System.out.println("类未找到错误!"+e); • }

  9. (2)定义连接URL • 指定装载的数据库驱动程序后,可用DriverManager类来进行数据源或数据库的连接。DriverManager类是JDBC基础,用来管理JDBC驱动程序。该类有静态的getConnection()方法,用于验证JDBC数据源,并返回接口Connection对象。 • 使用ODBC-JDBC桥接器的例: • Connection con = DriverManager.getConnection • ("jdbc:odbc:student","sa","123456"); • 其中的"student"为建立的数据源的名称,"sa"和"123456"为安装SQL Server 2000数据库系统时设置的用户名和访问密码(这里可根据实际用户名和密码来进行设置)。

  10. 使用SQL Server 2000驱动程序方式的例: • Connection con = DriverManager.getConnection ("jdbc:microsoft:sqlserver://localhost:1433; • DatabaseName=学生","sa","123456"); • 其中的"localhost "表示使用本地服务器(可根据实际名称填写),"1433"为访问SQL数据库的服务器默认端口号,"学生"为SQL Server 2000数据库文件名, "sa"和"123456"的意义为安装SQL Server 2000时设置的用户名和密码(可根据实际情况来填写)。 • (3) 获取数据库信息和创建接口Statement对象 • 数据库连接成功后,可以使用Connection对象的getMetaData方法取得接口DatabaseMetaData(提供大量的方法)对象来了解数据源或数据库的各种信息。

  11. 例如: • DatabaseMetaData dbmd = con.getMetaData(); • // 返回DatabaseMetaData对象 • dbmd.getURL() // 获得数据库的URL • dbmd.getUserName() // 获得用户名 • dbmd.getDriverName() // 获得数据库驱动程序名 • dbmd.getDriverVersion() // 获得数据库驱动程序版本 • dbmd.getDatabaseProductName()// 获得数据库产品名称 • dbmd.getDatabaseProductVersion()//获得数据库产品版本 • dbmd.getTables()//获得数据库中数据表的信息(有方法参数) • dbmd.getColumns()//获得数据表中各列的信息(有方法参数)

  12. 数据库连接成功后,还可以使用向数据库发送访问数据库的SQL语句的方法来存取数据库。JDBC使用接口Statement的对象(或执行数据库存储过程的子接口CallableStatement、发送带参数的SQL语句的子接口PreparedStatement)来发送SQL语句,Statement对象可用Connection的方法createStatement()来返回。例如:数据库连接成功后,还可以使用向数据库发送访问数据库的SQL语句的方法来存取数据库。JDBC使用接口Statement的对象(或执行数据库存储过程的子接口CallableStatement、发送带参数的SQL语句的子接口PreparedStatement)来发送SQL语句,Statement对象可用Connection的方法createStatement()来返回。例如: • Statement st = con.createStatement(); • (4) 执行SQL语句以存取数据库 • 希望执行的SQL语句串作为Statement的方法execute()等的参数向数据库传送,以交给数据库引擎,执行SQL对数据库的访问操作。对数据库访问结果是一个数据表的情况,可将这个表(结果集)存入接口ResultSet的对象。

  13. 提交SQL语句的Statement的方法有execute、executeQuery和executeUpdate等,分别用于不同类型的SQL语句的提交。 • executeQuery方法用于产生单个结果集的语句,如查询语句select。executeUpdate方法用于执行SQL语句中不产生结果集的语句,如insert,delete,update等语句和数据定义语句等(它的返回值为本次操作影响数据库表中数据行行数的整数值或零)。execute方法可用于执行产生多个结果集或对数据库进行多个操作的SQL语句(例如,执行数据库的存储过程)。下面是使用executeQuery方法和executeUpdate方法的例子: • ResultSet rs = st.executeQuery("select * from 学生成绩"); • int n=st.executeUpdate( • "delete from 学生成绩 where 综合<60");

  14. (5)对执行SQL语句的结果进行处理 • Statement对象将SQL语句封装起来交给数据库引擎,执行select查询语句,将得到结果集ResultSet对象(注意:执行insert、delete、update等查询语句无结果集)。接口ResultSet对象封装了执行SQL语句的返回结果,以后可根据需要,以便在屏幕上显示结果或做进一步的处理。 • 在执行select语句后的返回结果中,包含了数据表和数据表内容的相关信息。关于数据表的信息可通过ResultSet的getMetaData方法来创建ResultSetMetaData对象,由这个对象可获取所需数据库的信息。

  15. 例如: • ResultSetMetaData rsmd = rs.getMetaData(); • rsmd.getColumnCount() // 获取列(字段)数 • rsmd.getColumnName(列号) // 获取指定列(字段)的列名 • 在ResultSet中,提供了一整套的getXXX方法(如getInt,getString,getFloat,getDouble等)来访问结果集中当前行的不同列(用列序号或列标题作为这些方法的参数)的数据(类型不同时可将字段类型按照XXX类型来进行类型转换),而next方法可使得访问可对不同的行来进行。

  16. 例如,可用下面的程序段对学生成绩表的姓名和出生日期进行访问:例如,可用下面的程序段对学生成绩表的姓名和出生日期进行访问: • ResultSet rs = st.executeQuery( • "select 姓名,出生日期 from 学生成绩"); • while(rs.next()){ • System.out.println(rs.getString("姓名") • // 用字段(列)名 • +" " + rs.getString(2).substring(0,10)); • // 用字段(列)序号, • //而且将日期类型的字段转换为String类型进行显示。 • }

  17. ResultSet自动维护结果集当前数据行的指向光标,首先获得结果集时,指向光标置于结果集的第一行前,以后每调用一次next方法,光标就向下移动一行,这样可按照顺序从第一行到最后一行逐行访问结果集的每一行(访问结束时next返回false值)。ResultSet自动维护结果集当前数据行的指向光标,首先获得结果集时,指向光标置于结果集的第一行前,以后每调用一次next方法,光标就向下移动一行,这样可按照顺序从第一行到最后一行逐行访问结果集的每一行(访问结束时next返回false值)。 • 在有些情况下,可能希望任意访问而不是顺序访问结果集的数据行,对某些结果集,可能还希望通过结果集修改数据库的数据,则应在createStatement 方法中加入如下的两个参数,即: • Statement st = con.createStatement( • ResultSet.TYPE_SCROLL_INSENSITIVE, • ResultSet.CONCUR_UPDATABLE);

  18. 如果只希望任意滚动结果集的指向光标,而不修改数据库的数据,则可在上述两个参数中将第二个参数设置为ResultSet.CONCUR_READ_ONLY。如果只希望任意滚动结果集的指向光标,而不修改数据库的数据,则可在上述两个参数中将第二个参数设置为ResultSet.CONCUR_READ_ONLY。 • 通过参数的设置,就可以用ResultSet的first(定位到第一行)、last(定位到最后一行)、previous(定位到前一行)、absolute(绝对行号)和relative(相对当前行的行号)等方法来设置当前行,并且还可以根据参数的更新设置,用insertRow(插入行)、deleteRow(删除行)、updateRow(更新行)等方法来对数据库表进行增、删、改的操作。

  19. (6)关闭连接 • 数据库访问结束,为保证数据库数据的完整性和释放系统资源,应明确地关闭数据库的连接:一般是关闭结果集、关闭数据库访问对象和关闭连接。

  20. 12.2 JDBC数据库操作实例 • 【例12.1】用表12-1的数据在数据库“学生”中建立数据表“学生成绩”,并显示建表以后的结果。在程序中给出的是使用JDBC-ODBC桥接器方式连接数据库的代码,并用注释方式给出了使用直接驱动程序方式连接数据库的代码。(使用直接驱动程序方式时将该语句的注释符号去掉,并将上面有“*”号注释的语句去除或设置为注释。) • import java.sql.*; • class JdbcDemo{ • public static void main(String args[]){ • Connection con; // 定义连接类的对象

  21. Statement st; // 为SQL语句的使用定义对象 • ResultSet rs; // 定义结果集对象 • String user="sa",pass="123456"; • // 设置数据库的用户名和密码 • try { • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • // * 驱动程序名 • // Class.forName( • // "com.microsoft.jdbc.sqlserver.SQLServerDriver"); • }catch(ClassNotFoundException e) { • System.out.println("类未找到错误!" + e); • } • try { • con=DriverManager.getConnection(" • jdbc:odbc:student",user,pass);// *

  22. //con = DriverManager.getConnection • // ("jdbc:microsoft:sqlserver://localhost:1433; • // DatabaseName = 学生", user,pass); • DatabaseMetaData dbmd = con.getMetaData(); • System.out.println("数据库的URL:"+ • dbmd.getURL()); • System.out.println("数据库用户名:"+ • dbmd.getUserName()); • System.out.println("数据库驱动程序名:"+ • dbmd.getDriverName()); • System.out.println("数据库驱动程序版本号:"+ • dbmd.getDriverVersion()); • System.out.println("数据库产品名:"+ • dbmd.getDatabaseProductName()); • System.out.println("数据库产品版本号:"+ • dbmd.getDatabaseProductVersion());

  23. st=con.createStatement(); • String query = "create table 学生成绩("+ • "考号 char(10),姓名 char(8), • 性别 char(2),出生日期 datetime," • + "数学 integer,语文 integer,英语 integer, • 综合 integer)"; • st.executeUpdate(query); • String s1="insert into 学生成绩 values(" +"'4201025001','王丹','女','1989-10-15', 95,87,88,78)"; • String s2="insert into 学生成绩 values(" +"'4201025002','李屹','男','1988-12-26', 96,80,88,85)"; • String s3="insert into 学生成绩 values(" +"'4201025003','赵星','男','1989-5-3', 90,75,84,82)";

  24. String s4="insert into 学生成绩 values(" • +"'4201025004','黄萍','女','1989-3-12',88,79,90,80)"; • st.executeUpdate(s1); // 执行SQL语句的提交 • st.executeUpdate(s2); • st.executeUpdate(s3); • st.executeUpdate(s4); • rs=st.executeQuery("select * from 学生成绩"); • // 查询建表并插入数据的结果 • System.out.println(" [学生成绩]表中的数据如下:"); • System.out.println(" 考号 姓名 性别 出生日期 数 语 英 综"); • while(rs.next()) // 在输出数据间加竖线符进行分隔 • System.out.println(rs.getString(1)+"|"// 输出考号 • +rs.getString(2)+"|" // 输出姓名 • +rs.getString(3)+"|" // 输出性别

  25. +rs.getString(4).substring(0,10)+"|" • // 输出出生日期 • +rs.getString(5)+"|" // 输出数学成绩 • +rs.getString(6)+"|" // 输出语文成绩 • +rs.getString(7)+"|" // 输出英语成绩 • +rs.getString(8)); // 输出综合成绩 • rs.close();st.close();con.close(); • }catch(java.sql.SQLException e){ • System.out.println("SQL错误!" + e); • } • } • }

  26. 例12.1程序的运行结果如下: • 数据库的URL:jdbc:odbc:student • 数据库用户名:dbo • 数据库驱动程序名:JDBC-ODBC Bridge (SQLSRV32.DLL) • 数据库驱动程序版本号:2.0001 (03.81.9030) • 数据库产品名:Microsoft SQL Server • 数据库产品版本号:08.00.0194 • [学生成绩]表中的数据如下: • 考号 姓名 性别 出生日期 数 语 英 综 • 4201025001|王丹 |女|1989-10-15|95|87|88|78 • 4201025002|李屹 |男|1988-12-26|96|80|88|85 • 4201025003|赵星 |男|1989-05-03|90|75|84|82 • 4201025004|黄萍 |女|1989-03-12|88|79|90|80

  27. 【例12.2】设计一个Java数据库应用程序,它能按照菜单(用输出对话框显示)的选项,对例12.1创建的学生成绩表进行任意的记录显示、人机对话方式添加记录(用输入对话框来输入添加的学生记录数据),根据输入的学生考号来删除学生数据记录。【例12.2】设计一个Java数据库应用程序,它能按照菜单(用输出对话框显示)的选项,对例12.1创建的学生成绩表进行任意的记录显示、人机对话方式添加记录(用输入对话框来输入添加的学生记录数据),根据输入的学生考号来删除学生数据记录。 • import javax.swing.JOptionPane; • import java.sql.*; • class JdbcDemo1{ • public static void main(String args[]){ • Connection con; • Statement st; • ResultSet rs; • String user="sa",pass="123456",s,s1,s2,ss;

  28. try { • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// * • // Class.forName( • // "com.microsoft.jdbc.sqlserver.SQLServerDriver"); • }catch(ClassNotFoundException e) { • System.out.println("类未找到错误!" + e); • } • try { • con=DriverManager.getConnection( • "jdbc:odbc:student",user,pass); • //con = DriverManager.getConnection • // ("jdbc:microsoft:sqlserver://localhost:1433; • // DatabaseName = 学生",user,pass);

  29. while(true){ • s=JOptionPane.showInputDialog( • "请选择:\n 1.显示记录\n 2.添加记录 • \n 3.删除记录\n 4.退出"); • st=con.createStatement( • ResultSet.TYPE_SCROLL_INSENSITIVE, • ResultSet.CONCUR_UPDATABLE); • // 设置数据库指针可任意移动 • rs=st.executeQuery("select * from 学生成绩"); • if(s.equals("1")){ • s1 = JOptionPane.showInputDialog( • "请输入[开始记录号(>=1),记录数]"); • String sa[]=s1.split(","); • listRecord(rs,Integer.parseInt(sa[0]), • Integer.parseInt(sa[1]));

  30. // 调用listRecord显示记录,参数为结果集,开始记录号,显示记录数 • }else if(s.equals("2")){ • s1 =JOptionPane.showInputDialog( • "请输入[ • 考号,姓名,性别,出生日期,数学,语文,英语,综合]"); • String a[]=s1.split(","); • ss="insert into 学生成绩 • values('"+a[0]+"','"+a[1]+"','"+a[2]; • ss+="','"+a[3]+"',"+a[4]+","+a[5]+","+ • a[6]+","+a[7]+")";

  31. JOptionPane.showMessageDialog(null, • "添加记录的SQL语句是:\n"+ss); • st.executeUpdate(ss); • }else if(s.equals("3")){ • s1 =JOptionPane.showInputDialog( • "请输入要删除记录的学生考号:"); • PreparedStatement ps = con.prepareStatement( • "delete from 学生成绩 where 考号=?"); • // 带参数的SQL语句 • ps.setString(1,s1);// 设置参数实际值,1为参数序号 • ps.executeUpdate(); • }else {

  32. rs.close(); • st.close(); • con.close(); • System.exit(0); • } • } • }catch(java.sql.SQLException e){ • System.out.println("SQL错误!" + e); • } • } • // 下面为显示记录的listRecord方法,忽略异常的处理 • static void listRecord(ResultSet rs,int start,int n)throws SQLException{ • int i=1; • String ss=""; • rs.absolute(start);

  33. while(i<=n){ • ss+=rs.getString(1)+"|"; // 输出考号 • ss+=rs.getString(2)+"|"; // 输出姓名 • ss+=rs.getString(3)+"|"; // 输出性别 • ss+=rs.getString(4).substring(0,10)+"|"; • // 输出出生日期 • ss+=rs.getString(5)+"|"; // 输出数学成绩 • ss+=rs.getString(6)+"|"; // 输出语文成绩 • ss+=rs.getString(7)+"|"; // 输出英语成绩 • ss+=rs.getString(8); // 输出综合成绩 • ss+="\n"; i++; • if(!rs.next())break; • } • JOptionPane.showMessageDialog(null, • "显示记录如下:\n"+ss); • } • }

  34. 【例12.3】设计一个Java数据库GUI应用程序,它能根据提示在一个文本区中输入查询数据库的SQL语句,按“显示” 按钮后在下面的一个表格中显示查询结果。 • import java.awt.*; • import java.awt.event.*; • import java.sql.*; • import javax.swing.*; • import javax.swing.table.*; • class RSTable extends AbstractTableModel { • private Connection con; • private Statement st; • private ResultSet rs; • private ResultSetMetaData rsmd; • private int numberOfRows;

  35. private String user="sa",pass="123456", • qs = "SELECT * FROM 学生成绩"; • public RSTable(String query) throws SQLException, • ClassNotFoundException{ • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • con = DriverManager.getConnection( • "jdbc:odbc:student",user,pass); • st = con.createStatement( • ResultSet.TYPE_SCROLL_INSENSITIVE, • ResultSet.CONCUR_READ_ONLY ); • // 设置结果集为可滚动并且是只读的 • setQuery(query); • } • public Class getColumnClass(int column){ • try { // 获得结果集列的类名

  36. String className =rsmd.getColumnClassName(column+1); • return Class.forName( className ); • }catch ( Exception e ) { • System.out.println(e); • } • return Object.class; • } • public int getColumnCount(){ • try { • return rsmd.getColumnCount();// 获得结果集的列数 • }catch ( SQLException se ){ • System.out.println(se); • } • return 0; // 出错时返回0列 • }

  37. public String getColumnName( int column ){ • try { • return rsmd.getColumnName( column + 1 ); • // 获得结果集的列名 • }catch ( SQLException se ) { • System.out.println(se); • } • return ""; // 出错时返回空字符串 • } • public int getRowCount(){ • return numberOfRows; // 获得结果集的行数 • } // 获得结果集指定行列处的数据

  38. public Object getValueAt( int row, int column ){ • try { • rs.absolute( row + 1 ); • return rs.getObject( column + 1 ); • }catch (SQLException se) { • System.out.println(se); • } • return ""; • } • protected void finalize(){ • // 在对象撤销时自动调用来关闭数据库连接等 • try { • rs.close(); st.close(); con.close(); • }catch ( SQLException se ){ • System.out.println(se); • } • } • public void setQuery( String query ) throws • SQLException{

  39. rs=st.executeQuery(query);//执行查询,返回结果集 • rsmd = rs.getMetaData(); // 获得结果集的元数据 • rs.last(); // 移动数据表指针到最后一行 • numberOfRows = rs.getRow();// 获得最后一行的行号 • fireTableStructureChanged();// 更新查询显示 • } • }

  40. public class JdbcDemo2 extends JFrame implements ActionListener{ • private RSTable table; • private JTextArea jta; • public JdbcDemo2(){ • super( "JdbcGUI应用程序:显示数据库查询结果" ); • // 设置窗口标题 • String qs = "select * from 学生成绩"; • // 设置初始显示的SQL语句 • try { • table = new RSTable(qs ); // 创建RSTable对象 • jta = new JTextArea( qs, 2, 120 );//设置文本区 • jta.setWrapStyleWord( true ); // 设置换行属性

  41. jta.setLineWrap( true ); // 设置文本区换行属性 • jta.setFont(new Font("宋体",Font.PLAIN,13));//设置字体 • JScrollPane scrollPane = new JScrollPane(jta, • ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); • // 设置滚动面板 • JLabel jl= new JLabel( • "<Html><Font color=red>输入SQL语句:"); • JButton jb = new JButton( • "<Html><Font color=blue>查询"); • JPanel jp=new JPanel(); // 创建面板对象 • jp.setLayout(new BorderLayout()); • // 设置面板的布局为BorderLayout • jp.add(jl,BorderLayout.WEST); // 添加到面板

  42. jp.add(scrollPane,BorderLayout.CENTER); • // 添加到面板 • jp.add(jb,BorderLayout.EAST); // 添加到面板 • JTable resultTable = new JTable(table); • resultTable.getTableHeader().setBackground(Color.blue); //设置表格标题背景色为蓝色 • resultTable.getTableHeader().setForeground(Color.orange); //设置表格标题前景色为橙色 • getContentPane().add( jp, BorderLayout.NORTH ); • // 添加面板到窗体 • getContentPane().add( new JScrollPane(resultTable), • BorderLayout.CENTER ); • // 添加表格到窗体

  43. jb.addActionListener(this); // 注册动作监听器 • }catch ( ClassNotFoundException e) { • JOptionPane.showMessageDialog( null, • "数据库驱动程序未找到!","驱动程序未找到", • JOptionPane.ERROR_MESSAGE ); • System.exit(1); // 终止应用程序 • }catch (SQLException e) { • JOptionPane.showMessageDialog( null, "数据库错误!", • "数据库错误",JOptionPane.ERROR_MESSAGE ); • System.exit(1); // 终止应用程序 • } • } • public void actionPerformed( ActionEvent e ){ • try { • table.setQuery(jta.getText()); • // 将输入在文本区中SQL语句作查询

  44. }catch (SQLException se) {//显示出错信息 • JOptionPane.showMessageDialog( null, se.toString(), • "数据库错误",JOptionPane.ERROR_MESSAGE ); • } • } • public static void main(String args[]){ • JdbcDemo2 app = new JdbcDemo2(); • app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • app.setSize( 680, 250 ); // 设置初始窗口大小 • app.setVisible( true ); • } • }

  45. 例12.3的运行界面如下:

  46. 《Java语言程序设计》电子教案全部完!谢谢使用!《Java语言程序设计》电子教案全部完!谢谢使用!

More Related