版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JDBC目标目标深刻理解深刻理解JDBC的概念及的概念及JDBC API主主要内容要内容熟练掌握熟练掌握JDBC应用程序开发流程应用程序开发流程熟练掌握应用熟练掌握应用JDBC实现数据库记录的实现数据库记录的插入、删除和修改操作插入、删除和修改操作熟练掌握应用熟练掌握应用JDBC查询数据库记录查询数据库记录 JDBC基础基础lJDBC概述概述 在两层模型中,在两层模型中,Java applet 或应或应用程序将直接与数用程序将直接与数据库进行对话据库进行对话 图13.1 JDBC数据库访问两层模型 在三层模型中,命令先是被发送到服务的在三层模型中,命令先是被发送到服务的“中中间层间层”,然后由
2、它将,然后由它将 SQL 语句发送给数据库语句发送给数据库 JDBC数据库访问三层模型 l使用使用JDBC与数据库建立连接与数据库建立连接JDBC是一种底层是一种底层API,它可以直接调用,它可以直接调用SQL语句,语句,也是构造高级也是构造高级API和数据库开发工具的基础。和数据库开发工具的基础。JDBC2.0中的类和接口包括如表中的类和接口包括如表11.1所示所示 表11.1 JDBC2.0类和接口类/接口名类/接口功能java.sql.Connection完成对某一个指定数据库的连接功能完成对某一个指定数据库的连接功能java.sql.Statement在一个给定的连接中作为在一个给定的
3、连接中作为SQL语句执行的容器语句执行的容器java.sql.PreparedStatement用于执行预编译的用于执行预编译的SQL语句语句java.sql.CallableStatement用于返回执行数据库中存储过程调用用于返回执行数据库中存储过程调用java.sql.ResultSet查询语句返回的结果集查询语句返回的结果集DriverManager类类DriverManager 类是类是 JDBC 的管理层,作用的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。序,并在数据库和相应驱动程序之间建立连
4、接。使用使用JDBC-ODBC 桥驱动程序建立连接的语句桥驱动程序建立连接的语句如下:如下: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); String url = jdbc:odbc:happychat;DriverManager.getConnection(url, sa, );Connection类类Connection 对象代表与数据库的连接。连接过程对象代表与数据库的连接。连接过程包括所执行的包括所执行的 SQL 语句和在该连接上所返回的结语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个果。一个应用程序可与单个数据库有一
5、个或多个连接,也可以与多个数据库有连接连接,也可以与多个数据库有连接下面的语句打开一个与位于下面的语句打开一个与位于 URL jdbc:odbc:happychat 的数据库的连接。所用的用户的数据库的连接。所用的用户标识符为标识符为 sa ,口令为,口令为 。 String url = jdbc:odbc:happychat;Connection conn = DriverManager.getConnection(url, sa, ); Statement类类Statement 接口提供了三种执行接口提供了三种执行 SQL 语句的方法:语句的方法:executeQuery、executeU
6、pdate 和和 execute,使用,使用哪一个方法由哪一个方法由 SQL 语句所产生的内容决定。语句所产生的内容决定。方法方法executeQuery 用于产生单个结果集的语句,例如用于产生单个结果集的语句,例如 SELECT 语句。语句。方法方法executeUpdate 用于执行用于执行 INSERT、UPDATE 或或 DELETE 语句以及语句以及 SQL DDL(数据定义语言)语句。(数据定义语言)语句。例如例如 CREATE TABLE 和和 DROP TABLE。INSERT、UPDATE 或或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。语句的效果是修改表中
7、零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更的返回值是一个整数,指示受影响的行数(即更新计数)。对于新计数)。对于 CREATE TABLE 或或 DROP TABLE 等不操作行等不操作行的语句,的语句,executeUpdate 的返回值总为零。的返回值总为零。方法方法execute 用于执行返回多个结果集、多个更新计数或二者用于执行返回多个结果集、多个更新计数或二者组合的语句组合的语句 ResultSet类类用于获得查询结果用于获得查询结果ResultSet.next 方法用于移动到方法用于移动到 ResultSet 中中的下一行,使下
8、一行成为当前行。结果集一般是的下一行,使下一行成为当前行。结果集一般是一个表,其中有查询所返回的列标题及相应的值。一个表,其中有查询所返回的列标题及相应的值。执行执行 SQL 语句并输出结果集的语句如下:语句并输出结果集的语句如下: Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(SELECT u_name, u_pass FROM users);while (rs.next() / 打印当前行的值。打印当前行的值。 String name = r.getString(u_name); Strin
9、g pass = r.getString(u_pass); System.out.println(name + + pass); 数据库操作过程数据库操作过程 加载驱动程序加载驱动程序 通过通过DriverManager得到一个与数据库得到一个与数据库连接的句柄连接的句柄 通过连接句柄绑定要执行的语句通过连接句柄绑定要执行的语句 接收执行结果接收执行结果 可选的对结果的处理可选的对结果的处理 关闭数据库连接关闭数据库连接l SQL Server 2000 Driver For JDBC驱驱动程序动程序 Microsoft SQL Server 2000 Driver for JDBC 是一种用
10、以面向企业级是一种用以面向企业级Java环境提供具备环境提供具备高度可伸缩性与可靠性连通能力的高度可伸缩性与可靠性连通能力的Type 4 JDBC驱动程序。这种驱动程序为驱动程序。这种驱动程序为JDBC提供了通提供了通过具备过具备Java支持能力的支持能力的applet、应用程序或应用、应用程序或应用服务器访问服务器访问SQL Server 2000的能力。现在,的能力。现在,Java开发人员可以利用这种能够通过开发人员可以利用这种能够通过Internet与与企业内部网络提供高性能点对点企业内部网络提供高性能点对点n层层SQL Server 2000访问能力的驱动程序来充分享受访问能力的驱动程
11、序来充分享受SQL Server 2000所提供的丰富功能与强壮特性。所提供的丰富功能与强壮特性。获得程序获得程序从微软的网站上下载驱动程序:从微软的网站上下载驱动程序:SQLServer2000ForJDBC驱动程序,然后将它安装好。驱动程序,然后将它安装好。(比如安装目录是比如安装目录是D:SQLDriver For JDBC。)配置环境配置环境修改环境变量中的修改环境变量中的CLASSPATH,把,把SQL Server 2000 For JDBC 驱动程序安装目录下的如下目录追加到驱动程序安装目录下的如下目录追加到CLASSPATH中去。中去。D:SQLDriverForJDBClib
12、msbase.jar;D:SQLDriverForJDBClibmssqlserver.jar;D:SQLDriverForJDBCmsutil.jar;一旦一旦SQL Server 2000 Driver For JDBC驱动程序驱动程序安装配置好,即可用于安装配置好,即可用于SQL Server 2000的数据库访的数据库访问。问。JDBC的查询发送机制的查询发送机制lStatement接口接口Statement接口用于执行不带参数的简单接口用于执行不带参数的简单SQL语句。语句。ReparedStatement接口和接口和Callablestatement接口都是继承了接口都是继承了St
13、atement接口。接口。创建一个创建一个Statement类的实例的方法很简单,只需调用类类的实例的方法很简单,只需调用类Connection中的方法中的方法createStatement()就可以了。一般形式如下:就可以了。一般形式如下:Connection con=DriverManager.getConnection(URL,user,password)Statement sm=con.createStatement();创建了创建了Statement类的实例后,可调用其中的方法执行类的实例后,可调用其中的方法执行SQL语语句,句,JDBC中提供了三种执行方法,它们是中提供了三种执行方
14、法,它们是execute(),executeQuery(),executeUpdate() lPreparedStatement接口接口PreparedStatement类是类是Statement类的子类,它直接类的子类,它直接继承并重载了继承并重载了Statement的方法,的方法,PrepardStatement类有两大特点:类有两大特点:一个一个PreparedStatement的对象中包含的的对象中包含的SQL语句是预编译的,语句是预编译的,因此当需要多次执行同一条因此当需要多次执行同一条SQL语句时,利用语句时,利用PreparedStatement传送这条传送这条SQL语句可以大大
15、应用扩展执行语句可以大大应用扩展执行效率。效率。PreparedStatement的对象所包含的的对象所包含的SQL语句中允许有一个或语句中允许有一个或多个输入参数多个输入参数 创建创建PreparedStatement对象对象创建一个创建一个PreparedStatement类的对象也只需在建立连接后,类的对象也只需在建立连接后,调用调用Connection类中的方法类中的方法prepareStatement()创建一个创建一个PreparedStatement的对象,其中包含一条带参数的的对象,其中包含一条带参数的SQL语句。语句。一般形式如下:一般形式如下:PreparedStateme
16、nt psm=con.prepareStatement(INSERT INTO users(u_name,u_pass) VALUES(?,?); 输入参数的赋值输入参数的赋值对上例,如果将第一个参数设为对上例,如果将第一个参数设为zhao,第二个参数设为,第二个参数设为zhao0212,就会在,就会在“users”表中插入的记录一条新的记录,表中插入的记录一条新的记录,实现该功能的语句为:实现该功能的语句为:psm.setString(1,“zhao”);psm.setString(2,“zhao0212”);应用实例应用实例l 建立数据库建立数据库Users表:保存用户注册信息。包括用户名
17、表:保存用户注册信息。包括用户名(U_Name)、用户密码()、用户密码(U_Pass)、性别)、性别(U_Gender)、年龄()、年龄(U_Age)和电子邮件地址)和电子邮件地址(U_Email)。)。History表:保存用户聊天信息。包括聊天编号表:保存用户聊天信息。包括聊天编号(H_No)、聊天用户()、聊天用户(H_User)、聊天时间)、聊天时间(H_Time)和聊天内容()和聊天内容(U_Content) 创建数据库和表的脚本如下创建数据库和表的脚本如下:CREATE DATABASE HappyChatGOUSE HappyChatCREATE TABLE users(U_N
18、ame VARCHAR(16) PRIMARY KEY,U_Pass VARCHAR(16) NOT NULL,U_Gender CHAR(2) NOT NULL,U_Age INT NOT NULL,U_Email VARCHAR(20) NOT NULL)CREATE TABLE history(H_No INT IDENTITY(1,1),H_User VARCHAR(16) NOT NULL,H_Time DATETIME NOT NULL,U_Content VARCHAR(60)CREATE PROC delRecordname CHAR(16)ASDELETE FROM User
19、s WHERE U_name=namel插入、修改和删除操作插入、修改和删除操作JDBC插入、修改和删除数据库数据插入、修改和删除数据库数据/JDBC插入、修改和删除演示程序插入、修改和删除演示程序import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.sql.*;public class JdbcModifyDemo extends JFrame implements ActionListenerJPanel pnlMain;JLabel lblName,lblPa
20、ss;JTextField txtName,txtPass;JButton btnInsert,btnSave,btnUpdate,btnDelete;public JdbcModifyDemo()super(JDBC插入、修改和删除演示插入、修改和删除演示);pnlMain=new JPanel();lblName=new JLabel(用户名用户名:) lblPass=new JLabel(密码密码:);txtName=new JTextField(16);txtPass=new JTextField(16);btnInsert=new JButton(插入插入);btnInsert.ad
21、dActionListener(this);btnSave=new JButton(保存保存);btnSave.setEnabled(false);btnSave.addActionListener(this);btnUpdate=new JButton(修改修改);btnUpdate.addActionListener(this);btnDelete=new JButton(删除删除);btnDelete.addActionListener(this);pnlMain.add(lblName);pnlMain.add(txtName);pnlMain.add(lblPass);pnlMain
22、.add(txtPass);pnlMain.add(btnInsert);pnlMain.add(btnSave);pnlMain.add(btnUpdate);pnlMain.add(btnDelete);setContentPane(pnlMain);setSize(250,150);setVisible(true);public void actionPerformed(ActionEvent ae)if (ae.getSource()=btnInsert)initComponent();if (ae.getSource()=btnSave)saveRecord();if (ae.get
23、Source()=btnUpdate)updateRecord();if (ae.getSource()=btnDelete)int intChoice=JOptionPane.showConfirmDialog(null,真的要删除该记录吗真的要删除该记录吗?,确认删除确认删除,JOptionPane.YES_NO_OPTION);if (intChoice=JOptionPane.YES_OPTION)deleteRecord();public Connection openDatabase()String url = jdbc:odbc:HappyChat;tryClass.forNam
24、e(sun.jdbc.odbc.JdbcOdbcDriver);Connection conn=DriverManager.getConnection(url,sa,);return conn;catch(Exception e)JOptionPane.showMessageDialog(null,连接数据库失败连接数据库失败!);return null;public void initComponent()txtName.setText();txtPass.setText();btnSave.setEnabled(true);public void saveRecord()tryPrepar
25、edStatement psm=openDatabase().prepareStatement(Insert users(U_Name,U_Pass) values(?,?);psm.setString(1,txtName.getText();psm.setString(2,txtPass.getText();psm.executeUpdate();JOptionPane.showMessageDialog(null,记录保存成功记录保存成功!);psm.close();catch(Exception e)JOptionPane.showMessageDialog(null,记录插入失败记录插
26、入失败!);public void updateRecord()tryStatement sm=openDatabase().createStatement();String strUpdate=update users set U_pass=+txtPass.getText()+ where U_name=+txtName.getText()+;sm.executeUpdate(strUpdate);JOptionPane.showMessageDialog(null,记录修改成功记录修改成功!);sm.close();catch(Exception e)JOptionPane.showMe
27、ssageDialog(null,记录修改失败记录修改失败!);public void deleteRecord()tryCallableStatement csm=openDatabase().prepareCall(call delRecord(?);csm.setString(1,txtName.getText();csm.execute();JOptionPane.showMessageDialog(null,记录删除成功记录删除成功!);csm.close();catch(Exception e)JOptionPane.showMessageDialog(null,记录删除失败记录删
28、除失败!);public static void main(String args)new JdbcModifyDemo();l查询数据库查询数据库使用使用JDBC查询数据库内容。查询数据库内容。/JDBC查询数据库演示程序查询数据库演示程序import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;public class JdbcQueryDemo extends Frame implements ActionListenerJLabel lblName;JTextArea taResul
29、t; JPanel pnlMain; JTextField txtName; JButton btnQuery;public JdbcQueryDemo()setLayout(new BorderLayout(); lblName=new JLabel(用户名用户名:);taResult=new JTextArea(); btnQuery=new JButton(查询查询);txtName=new JTextField(12); pnlMain=new JPanel(); pnlMain.setBackground(Color.ORANGE);pnlMain.add(lblName); pnl
30、Main.add(txtName);pnlMain.add(btnQuery); add(North,pnlMain);add(Center,taResult); taResult.setEditable(false);btnQuery.addActionListener(this); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0); );setSize(300,200);setTitle(聊天信息查询聊天信息查询);setVisible(true);pub
31、lic void actionPerformed(ActionEvent evt) if(evt.getSource()=btnQuery)taResult.setFont(new Font(宋体宋体,Font.PLAIN,14);taResult.setText(-查询结果查询结果-); taResult.append(n+编号编号+ 姓名姓名 + 聊天时间聊天时间+ 聊天内容聊天内容+n);taResult.append(-+n);trydispalyHistory(); catch(SQLException e) JOptionPane.showMessageDialog(null,数据
32、查询数据查询错误错误!);public void dispalyHistory() throws SQLException String bh,yhm,ltsj,ltnr; String strQuery;tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e) JOptionPane.showMessageDialog(null,驱动程序错误驱动程序错误!);return;Connection con=DriverManager.getConnection(jdbc:odbc:HappyChat);Statement sql=con.createStatement();strQuery=select * from history where H_user=+txtName.getText().trim()+;ResultSet rs=sql.executeQuery(strQuery); while(rs.next() bh=rs.getString(H_No);yhm=rs.getString(H_User);ltsj=rs.getString(H_Time).substr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年生物技术与医药产业创新考察模拟试卷及参考答案
- 广东省茂名市茂南区2027届中考物理四模试卷含解析
- 2027届江苏省泗阳县中考物理对点突破模拟试卷含解析
- 办公用品集中采购长期签约合同三篇
- 2026年个人防护模拟试题(含答案)
- 2026年cct计算机一级模拟试题(含答案)
- 2026年梨状肌综合征松解后坐骨模拟试卷及答案
- 2026年口腔助理考试模拟试卷带答案
- 2026年e化模拟试题(含答案)
- 2026年标准化作业模拟试题(含答案)
- 雨课堂学堂在线学堂云《Principles and Practice of Artificial Intelligence(西南交通)》单元测试考核答案
- 煤矿机电运输培训课件
- 蜱虫防治教学课件
- GB/T 17456.2-2025球墨铸铁管、管件和附件外表面锌基涂层第2部分:带终饰层的富锌涂料涂层
- 工地车辆作业安全培训课件
- 比亚迪组长培训答辩
- 腰椎小关节紊乱
- 环境科学与工程专业职业生涯规划书4100字数
- 2025民航招飞英语测试题及答案
- 血浆置换操作规范与流程解析
- 小学生认识农具课件
评论
0/150
提交评论