150 likes | 247 Views
第七讲 程序设计综合运用(续). 教学目的. 进一步加深对用户界面、事件驱动模式、数据库连接和访问等思路和方法的理解。 学习查询数据库中的表,并保存和使用数据库管理系统返回的数据集合的基本方法。. 一个查询程序的功能描述. 给出一个窗体( form ) 用户输入查询关键字(比如:身份证号码) 单击“确认”按钮 程序响应,连接数据,并向数据库管理系统发送 SQL 查询命令( select ) 接收并保存数据库管理系统的回送结果(二维数据集)于 ResultSet 对象中 通过访问 ResultSet 对象,返回用户需要的数据 将用户需要的数据填入窗体的控件中。.
E N D
教学目的 • 进一步加深对用户界面、事件驱动模式、数据库连接和访问等思路和方法的理解。 • 学习查询数据库中的表,并保存和使用数据库管理系统返回的数据集合的基本方法。
一个查询程序的功能描述 • 给出一个窗体(form) • 用户输入查询关键字(比如:身份证号码) • 单击“确认”按钮 • 程序响应,连接数据,并向数据库管理系统发送SQL查询命令(select) • 接收并保存数据库管理系统的回送结果(二维数据集)于ResultSet对象中 • 通过访问ResultSet对象,返回用户需要的数据 • 将用户需要的数据填入窗体的控件中。
程序的构成 • JFrame子类的构造方法 • ActionListener的actionPerformed方法 • 异常处理结构 • 连接与访问数据库代码 • 访问ResultSet对象获取结果数据 • Main方法
代码结构 import 必要的包 public class A0602 extends JFrame implements ActionListener{ A0602(){ 构造方法体(窗体属性、窗体控件、注册监听器) } public void actionPerformed(ActionEvent event){ try{ 连接数据库和访问数据库 接收返回数据和展现返回数据 } catch (ClassNotFoundException e) System.out.println("加载数据库驱动异常"); catch (SQLException e) System.out.println("执行数据库操作异常"); } public static void main(String[] args){ new A0602() } }
连接和访问数据库部分(代码) String sql = "SELECT * FROM CUSTOMER WHERE CUSTOMER_ID='"+txtId.getText()+"'"; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection ("jdbc:oracle:thin:@192.168.210.228:1521:orcl","stu10","swufe111"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); if(rs.next()){txtName.setText(rs.getString(2));} else{ txtName.setText("<查无记录>");} rs.close();stmt.close();conn.close();System.out.println("正常结束");} catch (ClassNotFoundException e){System.out.println("加载数据库驱动异常,请检查");} catch (SQLException e){System.out.println("执行数据库操作异常,SQL语句为:" +sql);}
一个用来专门说明ResultSet对象功能的程序 import java.sql.*; public class A060201{ public static void main(String[] args){ String sql = "SELECT * FROM CUSTOMER"; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.210.228:1521:orcl","stu10","swufe111"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(5)); } rs.close(); stmt.close(); conn.close(); System.out.println("正常结束"); } catch (ClassNotFoundException e){System.out.println("加载数据库驱动异常,请检查");} catch (SQLException e){System.out.println("执行数据库操作异常,SQL语句为:" +sql);} } }
这个程序和上一个程序的功能完全一样 import java.sql.*; public class A060202{ public static void main(String[] args){ String sql = "SELECT * FROM CUSTOMER"; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.210.228:1521:orcl","stu10","swufe111"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ System.out.println(rs.getString("cust_name")+"\t"+rs.getString("customer_id")+"\t"+rs.getString("cust_city")+"\t"+rs.getString("CUST_GENDER")); } rs.close(); stmt.close(); conn.close(); System.out.println("正常结束"); } catch (ClassNotFoundException e){System.out.println("加载数据库驱动异常,请检查");} catch (SQLException e){System.out.println("执行数据库操作异常,SQL语句为:" +sql);} } }
作业 • 用户输入账号 • 单击“查询”按钮 • 查询该账户交易明细(deposit表) • 查到的数据在窗体的控件中显示出来
思考题 • 怎样通过对deposit表中的数据进行查询,进而统计出春节过后账户余额大幅增加的客户的年龄段,及分布情况? • 怎样通过对account表和deposit表中的数据进行查询,进而统计出对利率变化不太敏感的客户的年龄段,及分布情况?