JDBC编程JDBC介绍•JDBC(JavaDataBaseConnectivity)提供了执行SQL语句,访问关系数据库的方法。它被设计成类似ODBC的面向对象的,基于Java的,用于数据库访问的应用程序接口。•JDBC能完成3件事情:–与一个数据库建立连接–向数据库发送SQL语句–处理数据库返回的结果JDBC程序设计•JDBC被设计成一个执行SQL语句的接口,一组由驱动程序实现的Java接口,驱动程序负责从标准JDBC调用向支持的数据库所要的具体的调用转变。它向应用程序开发者提供了独立于数据库的统一的API。JDBC编程接口使用下面的类,需导入包importjava.sql.*•DriverManager•Connection•Statement•ResultSet•PreparedStatement•CallableStatementDriverManager•DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等。•对于简单的应用程序,一般程序员只需要使用getConnection来建立与数据库的连接。JDBC驱动程序•JDBC-ODBC桥–利用ODBC连接数据库•Native-APIpartlyJava驱动方式–数据库厂商提供的非纯java驱动•纯Java驱动方式–由数据库厂商提供的纯java编写的驱动程序,可以手动安装或自动从服务器下载安装JDBC访问数据库的一般步骤•设置数据源(可选)•加载JDBC驱动程序•与数据库建立连接•向数据库发送sql命令•处理sql语句执行结果•关闭数据库连接数据库URL•jdbc:odbc:myDB•jdbc:microsoft:sqlserver://库名:1433•jdbc:oracle:thin:@服务器名或IP地址:1521:库名加载驱动程序Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);Class.forName(oracle.jdbc.driver.OracleDriver);DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());建立连接StringdbURL=jdbc:odbc:myDb;Connectioncn=DriverManager.getConnection(dbURL)Connectioncn=DriverManager.getConnection(jdbc:microsoft:sqlserver://库名:1433,user,password);发送SQL语句Statementstmt=cn.createStatement();stmt=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);处理sql执行结果ResultSetrs=sql.executeQuery(select*fromauthors)ResultSetMetaDatarsmd=rs.getMetaData();intc=rsmd.getColumnCount();for(inti=1;i=c;i++){System.out.print(rsmd.getColumnName(i));};while(rs.next()){for(inti=1;i=c;i++){System.out.print(rs.getString(i));}}关闭连接try{cn.close();}catch(SQLExceptione){}AWTEventModelWhatisanEvent?•Event事件,就是发生在用户界面上的用户交互行为所产生的一种效果。•EventSource产生事件的对象。•Eventhandler接收事件对象并对其进行处理的方法。事件处理模型•Hierachicalmodel(JDK1.0)事件传递机制。•Delegationmodel(JDK1.1,1.2)授权处理机制。DelegationModel•将事件源对象和事件处理器(事件监听器)分开。importjava.awt.*;importjava.awt.event.*;publicclassTestButton{publicstaticvoidmain(Stringargs[]){Framef=newFrame(Test);Buttonb=newButton(PressMe!);b.addActionListener(newButtonHandler());f.add(b);f.setSize(200,100);f.setVisible(true);}}classButtonHandlerimplementsActionListener{publicvoidactionPerformed(ActionEvente){System.out.println(Actionoccurred);//如果实现关闭程序功能,怎么//f.dispose();释放主窗口,进而关闭AWT进程//System.exit(0);退出整个程序}}•使用JDK1.1授权处理模型进行事件处理的一般方法:–对于某种类型的事件XXXEvent,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现针对特定事件的特定接口XXXListener;–事件源中产生事件后,必须注册相应于该类事件的监听器,使用addXXXListener(XXXListener)方法来注册监听器。•java.util.EventObject类EventObject类是所有事件对象的基础类,所有的事件类都是由它派生出来的。publicclassEventObjectimplementsjava.io.Serializable{protectedtransientObjectsource;publicEventObject(Objectsource);publicObjectgetSource();publicStringtoString();}•java.awt.AWTEvent和AWT有关的所有事件类都由java.awt.AWTEvent类派生,AWT事件共有10类,可以归为两大类:低级事件和高级事件。•低级事件–ComponentEvent(组件事件:组件尺寸的变化,移动)–ContainerEvent(容器事件:组件增加,移动)–WindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)–FocusEvent(焦点事件:焦点的获得和丢失)–KeyEvent(键盘事件:键按下、释放)–MouseEvent(鼠标事件:鼠标单击,移动)•高级事件(语义事件)–ActionEvent(动作事件:按钮按下,TextField中按Enter键)–AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)–ItemEvent(项目事件:选择项目,不选择项目)–TextEvent(文本事件,文本对象改变)AWT事件及其相应的监听器接口•ActionEvent激活组件–ActionListener–actionPerformed(ActionEvent)•ItemEvent选择了某些项目–ItemListener–itemStateChanged(ItemEvent)•MouseEvent鼠标移动–MouseMotionListener–mouseDragged(MouseEvent)mouseMoved(MouseEvent)•MouseEvent鼠标点击等–MouseListener–mousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)•KeyEvent键盘输入–KeyListener–keyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)•FocusEvent组件收到或失去焦点–FocusListener–focusGained(FocusEvent)focusLost(focusEvent)•AdjustementEvent移动了滚动条等组件–AdjustmentListener–adjustmentValueChanged(AdjustmentEvent)•ComponentEvent对象移动缩放显示隐藏等–ComponentListener–componentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)•WindowEvent窗口收到窗口级事件–WindowListener–windowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)•ContainerEvent容器中增加删除了组件–ContainerListener–componentAdded(containerEvent)componentRemoved(containerEvent)•TextEvent文本字段或文本区发生改变–TextListener–textValueChanged(TextEvent)事件处理举例importjava.awt.*;importjava.awt.event.*;publicclassTwoListenimplementsMouseMotionListener,MouseListener,WindowListener{privateFramef;privateTextFieldtf;publicstaticvoidmain(Stringargs[]){TwoListentwo=newTwoListen();two.go();}publicvoidgo(){f=newFrame(Twolistenersexample);f.add(newLabel(Clickanddragthemouse),North);tf=newTextField(30);f.add(tf,South);f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);f.setSize(300,200);f.setVisible(true);}publicvoidmouseDragged(MouseEvente){Strings=Mousedragging:X=+e.getX()+Y=+e.getY();tf.setText(s);}publicvoidmouseMoved(MouseEvente){}publicvoidmouseClicked(MouseEvente){}publicvoidmouseEntered(MouseEvente){Strings=Themouseentered;tf.setText(s);}publicv