第十一章 Java数据库编程入门

《Java程序设计实例与操作》(丁永卫)目录

11.1 了解JDBC

一、JDBC的工作机制

   在Java中对数据库的访问主要是通过JDBC进行的。JDBC是Java数据库连接技术(Java DataBase Connectivity)的简称,它是用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
使用JDBC来完成对数据库的访问主要包括以下五个层次: 在这里插入图片描述
JDBC可做三件事:
   ① 加载JDBC驱动程序并创建数据库连接;
   ② 发送操作数据库的语句给DBMS并让DBMS执行它;
   ③ 对返回结果进行处理。

Driver d=new sun.jdbc.odbc.JdbcOdbcDriver;		// 创建驱动程序实例
DriverManager.registerDriver(d);			// 注册驱动程序
// 创建与数据库之间的连接
Connection con = DriverManager.getConnection("jdbc:odbc:wombat", "login", "password");
// 调用连接对象的createStatement()方法创建语句对象
Statement stmt = con.createStatement();
// 调用语句对象的executeQuery()方法,查询数据库
// 结果存放在ResultSet对象rs中
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
// 循环读取rs中内容,对返回结果进行处理
while (rs.next()) {
	int x = rs.getInt("a");
	String s = rs.getString("b");
	float f = rs.getFloat("c");
}
// 依次关闭结果、语句和连接对象,以释放相应资源
rs.close();
stmt.close();
conn.close();

二、JDBC API简介

   JDBC 4.0 API中包括了java.sql包和javax.sql 包,其中,java.sql包被称为JDBC的核心API,利用其中的类和接口可建立与数据库的连接(包括加载JDBC驱动程序)、向数据库发送SQL语句、获取和更新查询结果等。
   javax.sql包被称为JDBC可选包API,它扩展了JDBC API的功能,将它从客户端API扩展到服务器端API,该包是Java企业版的重要组成部分。

11.2 掌握加载JDBC驱动程序的方法

一、JDBC驱动程序分类

1.JDBC-ODBC桥驱动程序

   JDBC-ODBC桥驱动程序实际是把所有的JDBC调用传递给ODBC,再由ODBC调用本地数据库驱动程序。

2.本地库Java驱动程序

   本地库Java驱动程序首先将JDBC调用转变为DBMS的标准调用,然后再去访问数据库。

3.JDBC网络纯Java驱动程序

   这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上,所用的具体协议取决于提供者。

4.本地协议纯Java驱动程序

   它是完全由纯Java语言实现的一种驱动,它直接把JDBC调用转换为由DBMS使用的网络协议。这种驱动程序允许从客户机直接访问数据库服务器。

二、加载JDBC驱动程序的方法

1.使用DriverManager类加载

   DriverManager类是JDBC的驱动程序管理类,使用该类提供的registerDriver()方法可以加载JDBC驱动程序,其格式如下:

DriverManager.registerDriver(Driver driver)

例如:

Driver d=new sun.jdbc.odbc.JdbcOdbcDriver();
DriverManager.registerDriver(d);

2.调用Class.forName()方法加载

   另一种加载JDBC驱动程序的方法是调用Class.forName()方法,它会自动加载驱动程序类,其格式如下:

    Class.forName(String DriverName)

例如 :

String d=" sun.jdbc.odbc.JdbcOdbcDriver ";
Class.forName(d); 

11.3 掌握创建数据库连接的方法

一、建立数据库连接的方法

   建立数据库连接的一般做法如下:

 Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");

二、JDBC url 参数详解

   JDBC url的标准格式由三部分组成,各部分间用冒号分隔,如下所示:

jdbc:<子协议><子名称>

   (1)jdbc协议:JDBC url中的协议总是jdbc。
   (2)<子协议>:驱动程序名或数据库连接机制的名称。子协议的典型示例是odbc,它表示JDBC使用的是JDBC-ODBC桥驱动程序。
   (3)<数据库子名称>:通常为数据库的标识名,它必须为定位数据库提供足够的信息。

三、ODBC数据源设置方法

步骤1 打开“控制面板”窗口,单击其中的“性能和维护”图标 。
在这里插入图片描述

步骤2 在“性能和维护”窗口中单击“管理工具”图标 。
在这里插入图片描述

步骤3 在“管理工具”窗口中双击“数据源(ODBC)”图标 。
在这里插入图片描述

步骤4 在打开的“ODBC数据源管理器”对话框,并打开“系统DSN” 选项卡。
在这里插入图片描述

步骤5 单击“添加”按钮,打开“创建新数据源”对话框,从中选择“Driver do Microsoft Access(*.mdb)” 。
在这里插入图片描述

步骤6 单击“完成”按钮,打开“ODBC Microsoft Access安装”对话框。在“数据源名”编辑框中输入“javaodbc”,然后单击 “选择”按钮,在打开的“选择数据库”对话框中选择一个Access数据库 。
在这里插入图片描述
在这里插入图片描述

步骤7 选定数据库后,单击“确定”按钮,返回“ODBC Microsoft Access安装”对话框。再次单击“确定”按钮,返回“ODBC数据源管理器”对话框。新建的数据源已出现在系统数据源列表中 。
在这里插入图片描述

步骤8 单击“确定”按钮,设置结束,我们在后面的Java程序中就可以使用它了。

11.4 掌握访问数据库的方法

   使用JDBC操作数据库的方法主要分为以下三步。
   (1)调用数据库连接Connection类的createStatement()方法定义Statement对象。Statement对象用于执行静态SQL语句并返回它所生成结果的对象。
   (2)调用Statemnet对象的executeQuery()方法或executeUpdate()方法,让DBMS执行具体的SQL语句,以便对数据执行查询、增、删、改等操作。
   (3)对数据库返回结果进行处理。

一、增加记录

   在对数据库的操作中,经常需要向数据库表中增加一行记录。为数据库增加记录的SQL语句的语法格式如下:
insert into 表名(字段列表)values (值列表)

// InsertRecordTest.java
package Chapter11;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class InsertRecordTest {

	public static void main(String[] args) throws ClassNotFoundException,
			SQLException {
		// 以下两条语句可省略,即无需再加载JDBC-ODBC桥驱动程序
		String msodbc = "sun.jdbc.odbc.JdbcOdbcDriver";
		Class.forName(msodbc); // 加载驱动程序
		String url = "jdbc:odbc:javaodbc"; // 定义url
		Connection con = DriverManager.getConnection(url); // 建立连接
		Statement st = con.createStatement(); // 创建Statemnet对象
		// 定义插入记录的sql语句
		String sql = "insert into 丛书名录(序号,丛书代号,丛书名称)"
				+ "values(1000,'xx','Java系列丛书')";
		st.executeUpdate(sql); // 执行数据库更新
		st.close();	// 关闭语句
		con.close(); // 关闭连接
	}
}

二、删除记录

删除记录的SQL语句的语法格式如下:
   delete from 表名 where 条件

// DeleteRecordTest.java
package Chapter11;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class DeleteRecordTest {

	public static void main(String[] args) throws ClassNotFoundException,
			SQLException {
		// 以下两条语句可省略,即无需再加载JDBC-ODBC桥驱动程序
		String msodbc = "sun.jdbc.odbc.JdbcOdbcDriver";
		Class.forName(msodbc); // 加载驱动程序
		String url = "jdbc:odbc:javaodbc"; // 定义url
		Connection con = DriverManager.getConnection(url); // 建立连接
		Statement st = con.createStatement(); // 创建Statemnet对象
		// 定义删除记录的sql语句
		String sql = "delete from 丛书名录  where 丛书代号='xx'";
		st.executeUpdate(sql); // 执行数据库更新
		st.close(); // 关闭语句
		con.close(); // 关闭连接
	}
}

三、修改记录

用于修改记录的SQL语句的语法格式如下:
   update 表名 set 字段名=数值 where条件

// UpdateRecordTest.java
package Chapter11;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class UpdateRecordTest {

	public static void main(String[] args) throws ClassNotFoundException,
			SQLException {
		// 以下两条语句可省略,即无需再加载JDBC-ODBC桥驱动程序
		String msodbc = "sun.jdbc.odbc.JdbcOdbcDriver";
		Class.forName(msodbc); // 加载驱动程序
		String url = "jdbc:odbc:javaodbc"; // 定义url
		Connection con = DriverManager.getConnection(url); // 建立连接
		Statement st = con.createStatement(); // 创建Statemnet对象
		// 定义修改记录的sql语句
		String sql = "update 丛书名录  set 丛书代号='yy',"
				+ "丛书名称='C++系列丛书' where 丛书代号='xx'";
		st.executeUpdate(sql); // 执行数据库更新
		st.close(); // 关闭语句
		con.close(); // 关闭连接
	}
}

四、查询记录

查询记录的SQL语句的语法格式如下:
   select 字段1,字段2,字段3,……from 表名 where 条件

// QueryRecordTest.java
package Chapter11;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class QueryRecordTest {

	public static void main(String[] args) throws ClassNotFoundException,
			SQLException {
		// 以下两条语句可省略,即无需再加载JDBC-ODBC桥驱动程序
		String msodbc = "sun.jdbc.odbc.JdbcOdbcDriver";
		Class.forName(msodbc); // 加载驱动程序
		String url = "jdbc:odbc:javaodbc"; // 定义url
		Connection con = DriverManager.getConnection(url); // 建立连接
		Statement st = con.createStatement(); // 创建Statemnet对象
		// 定义修改记录的sql语句
		String sql = "select 书名,ISBN,主编,版别,定价   " + "from 书目名录 where 丛书代号='A'";
		// 执行查询数据库操作,并将查询结果存放在ResultSet对象rs中
		ResultSet rs = st.executeQuery(sql);
		// 显示查询结果
		while (rs.next()) {
			System.out.println("书名:" + rs.getString("书名") + "  ISBN:"
					+ rs.getString("ISBN") + "  主编:" + rs.getString("主编")
					+ "  版别:" + rs.getString("版别") + "  定价:"
					+ rs.getFloat("定价"));
		}
		rs.close(); // 关闭查询结果记录集
		st.close(); // 关闭语句
		con.close(); // 关闭连接
	}
}

综合实例——图书查询

// BookQuery.java
package Chapter11;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;

public class BookQuery extends Frame implements ActionListener {
	private static final long serialVersionUID = 1093264799018513820L;
	TextField seriesName;
	TextArea bookName;
	Button button;

	BookQuery() { // 构造方法
		super("图书查询");
		setBounds(150, 150, 300, 300);
		seriesName = new TextField(16);
		bookName = new TextArea(5, 10);
		button = new Button("确定");
		Panel p1 = new Panel(), p2 = new Panel();
		p1.add(new Label("请输入丛书名:"));
		p1.add(seriesName);
		p2.add(button);
		add(p1, "North");
		add(p2, "South");
		add(bookName, "Center");
		button.addActionListener(this);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		setLocationRelativeTo(null); // 使窗体在屏幕上居中放置
		setVisible(true); // 显示窗体
	}

	public void actionPerformed(ActionEvent e) {
		// 如果当前单击对象为按钮
		if (e.getSource() == button) {
			try {
				bookName.setText(null); // 清空文本区
				ListStudent();
			} catch (SQLException ee) {
			}
		}
	}

	private void ListStudent() throws SQLException {
		String bn1, bn2;
		try {
			// 加载JDBC-ODBC驱动程序
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		} catch (ClassNotFoundException e) {
		}
		// 创建数据库连接
		Connection con = DriverManager.getConnection("jdbc:odbc:javaodbc");
		// 创建Statement对象
		Statement st = con.createStatement();
		// 读出全部记录,得到结果集ResultSet对象
		ResultSet rs = st.executeQuery("select * from 书目名录");
		boolean boo = false;
		while (rs.next()) {
			bn1 = rs.getString("丛书代号"); // 读取丛书代号
			bn2 = rs.getString("书名"); // 读取书名
			// 如果丛书代号相符,则在文本区显示书名
			if (bn1.equals(seriesName.getText())) {
				bookName.append(bn2 + "\n");
				boo = true; // 该系列丛书不为空
			}
		}
		con.close();
		if (boo == false) {
			bookName.append("该系列丛书不存在!");
		}
	}

	public static void main(String[] args) {
		new BookQuery();
	}
}

// BookQueryImprove.java
package Chapter11;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;

public class BookQueryImprove extends Frame implements ActionListener {
	private static final long serialVersionUID = 5477686699015910381L;
	TextField seriesName;
	TextArea bookName;
	Button button;

	BookQueryImprove() { // 构造方法
		super("图书查询");
		setBounds(150, 150, 300, 300);
		seriesName = new TextField(16);
		bookName = new TextArea(5, 10);
		button = new Button("确定");
		Panel p1 = new Panel(), p2 = new Panel();
		p1.add(new Label("请输入丛书名:"));
		p1.add(seriesName);
		p2.add(button);
		add(p1, "North");
		add(p2, "South");
		add(bookName, "Center");
		button.addActionListener(this);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		setLocationRelativeTo(null); // 使窗体在屏幕上居中放置
		setVisible(true); // 显示窗体
	}

	public void actionPerformed(ActionEvent e) {
		// 如果当前单击对象为按钮
		if (e.getSource() == button) {
			try {
				bookName.setText(null); // 清空文本区
				ListStudent();
			} catch (SQLException ee) {
			}
		}
	}

	private void ListStudent() throws SQLException {
		String bn1, bn2, sqlcmd;
		// 获取输入的丛书代号
		bn1 = seriesName.getText();
		// 如果丛书代号为空,则直接返回
		if (bn1.length()==0){
			return;
		}
		try {
			// 加载JDBC-ODBC驱动程序
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		} catch (ClassNotFoundException e) {
		}
		// 创建数据库连接
		Connection con = DriverManager.getConnection("jdbc:odbc:javaodbc");
		// 创建Statement对象
		Statement st = con.createStatement();
		// 读出全部记录,得到结果集ResultSet对象
		// 创建SQL语句,like表示模糊匹配,%表示任意字符串
		// “丛书代号 like '输入的丛书代号字符串%'”表示查找丛书代号为
		// 以输入的丛书代号字符串开头的全部丛书
		sqlcmd = "select * from 书目名录 where 丛书代号 like '";
		sqlcmd = sqlcmd + bn1 + "%'";
		// 执行SQL语句
		ResultSet rs = st.executeQuery(sqlcmd);
		boolean boo = false;
		while (rs.next()) {
			bn2 = rs.getString("书名"); // 读取书名
			bookName.append(bn2 + "\n");
			boo = true; // 该系列丛书不为空
		}
		con.close();
		if (boo == false) {
			bookName.append("该系列丛书不存在!");
		}
	}

	public static void main(String[] args) {
		new BookQueryImprove();
	}
}

本章小结

   本章介绍了使用JDBC进行数据库程序开发的基础知识,具体介绍了JDBC的工作机制,驱动程序的加载方法,建立数据库连接的方法,以及访问数据库的几种常用SQL语句的语法等。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【完整课程列表】 https://download.csdn.net/download/qq_27595745/55555830 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第2章 java语言基础(共31页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第3章 控制结构(共23页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第4章 类和对象(共57页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第5章 继承和接口(共47页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第6章 数组和集合(共44页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第7章 字符串处理(共38页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第8章 异常处理(共27页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第11章 图形用户界面1(共27页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第11章 图形用户界面2(共31页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第12章 applet(共16页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第13章 多线程(共24页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值