第 5 章 概述及基本原理 学习目的与要求 本章首先简要介绍关系数据库,描述MySQL 的具体 使用,重点介绍JDBC的基本原理以及应用编程接口。通 过本章的学习,熟悉MySQL 数据库系统的使用,掌握 JDBC的基本原理以及编程接口的使用,能够开发数据库应 用程序。 本章主要内容 ● MySQL数据库的使用。 ● JDBC概述及基本原理。 ● JDBC高级操作。 5.1 MySQL数据库的使用 1.连接MySQL 连接MySQL的命令格式为: mysql -h 主机地址-u 用户名-p 用户密码 例5-1 连接到本机上的MySQL。 首先打开DOS窗口,然后进入目录mysql\bin,再输入 命令mysql-uroot-p,回车后提示输入密码,如果刚安装好 MySQL,超级用户root是没有密码的,故直接回车即可进 入MySQL。MySQL的提示符是:mysql>。 例5-2 连接到远程主机上的MySQL。假设远程主机 的IP 地址为110.110.110.110,用户名为root,密码为 abc123,则输入以下命令: mysql -h110.110.110.110 -uroot -pabc123 JavaWeb应用开发与项目案例教程 10 8 说明:u与root可以不用加空格,其他也一样。 退出MySQL命令是exit。 2.修改密码 修改密码的命令格式为: mysqladmin -u 用户名-p 旧密码password 新密码 例5-3 给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后输入以下命 令(password中不要加命令符): mysqladmin -uroot password ab12 说明:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 例5-4 再将root的密码改为djg345,输入以下命令: mysqladmin -uroot -pab12 password djg345 3.增加新用户 注意:和上面不同,下面的命令因为是MySQL环境中的命令,所以后面都带一个分号 作为命令结束符。 增加新用户的命令格式为: grant select on 数据库.* to 用户名@登录主机identified by "密码" 例5-5 增加一个用户test1,密码为abc,让他可以在任何主机上登录,并对所有数据 库有查询、插入、修改、删除的权限。 首先以root用户连入MySQL,然后输入以下命令: grant select,insert,update,delete on *.* totest1@"%" identified by "abc"; 但增加的用户是十分危险的,如果某个人知道test1的密码,那么就可以在Internet上的任 何一台计算机上登录你的MySQL数据库并对你的数据为所欲为了,解决办法见例5-6。 例5-6 增加一个用户test2,密码为abc,让其只可以在localhost上登录,并可以对数 据库mydb进行查询、插入、修改、删除的操作。 例5-6中的localhost指本地主机,即MySQL数据库所在的那台主机,这样用户即使 知道test2的密码,也无法从internet上直接访问数据库,只能通过MySQL主机上的Web 页来访问了。 grant select,insert,update,delete on mydb.* totest2@localhost identified by "abc"; 如果不想让test2有密码,可以再输入一个命令将密码删掉: grant select, insert, update, delete on mydb. * to test2 @ localhost identified by ""; 上面介绍了登录、增加用户、密码更改等问题。下面来看看MySQL中有关数据库方 面的操作。 第 5 章 JDBC概述及基本原理 10 9 注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而 且每个命令以分号结束。 4.常用命令介绍 (1)显示数据库列表: show databases; 刚开始时只有两个数据库mysql和test。数据库mysql很重要,它里面有MySQL的 系统信息。修改密码和新增用户,实际上就是对这个库进行操作。 (2)显示库中的数据表: use mysql; show tables; (3)显示数据表的结构: describe 表名; (4)建库: create database 库名; (5)建表: use 库名; create table 表名(字段设定列表); (6)删库和删表: drop database 库名; drop table 表名; (7)将表中记录清空: delete from 表名; (8)显示表中的记录: select * from 表名; 如果输入命令时,回车后发现忘记加分号,无须重新输入一遍命令,只要输入一个分号 回车即可。也就是说,可以把一个完整的命令分成几行来输入,完后用分号作结束标志。 可以使用上、下键调出以前的命令。 5.实例 下面是建库和建表以及插入数据的实例。 drop database if exists school; //如果存在school,则删除 create database school; //建立库school use school; //打开库school create table teacher //建立表teacher JavaWeb应用开发与项目案例教程 11 0 ( id int(3) auto_increment not null primary key, name char(10) not null, address varchar(50) default '呼和浩特', year date ); //建表结束 //以下为插入字段 insert into teacher values('','glchengang','内蒙古大学','1976-10-10'); insert into teacher values('','jack','内蒙古师范大学','1975-12-23'); 说明: (1)在建表中,将ID 设为长度为3的数字字段:int(3);让它的每个记录自动加一: auto_increment;并不能为空:notnull;而且让它成为主字段:primarykey。 (2)将name设为长度为10的字符字段。 (3)将address设为长度50的字符字段,而且默认值为呼和浩特。 (4)将year设为日期字段。 如果在mysql提示符输入上面的命令也可以,但不方便调试,可以将以上命令原样写 入一个文本文件中且假设为school.sql,然后复制到C:\下,并在DOS 状态进入目录 \mysql\bin,然后输入以下命令: mysql -uroot -p 密码school.txt 说明:将数据库school备份到school.txt文件,school.txt是一个文本文件。 在熟悉这些命令之后,可以使用SQLYog、MySQLAdmin等带有图形用户界面的客户 端工具,从而让我们的操作更加简单方便。 5.2 JDBC概述及基本原理 在开始介绍JDBC之前,先来澄清一个问题:JDBC是不是过时了? 例如,现在Java开 发中大量采用对象/关系映射(O/R Mapping)方案,典型的有Hibernate、MyBatis、JDO 等 技术,它们是不是完全取代了JDBC呢? 我们认为不能这样理解。首先这些技术的基础恰 恰正是JDBC。它们是封装JDBC后的数据持久化层。如果不了解JDBC,就无法真正掌握 O/R Mapping。其次,JDBC依然有其独特的适用范围,在要求速度和性能的场合下,比如 海量数据处理等,JDBC依然是不可取代的。 1.JDBC是什么 在JavaWeb应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的。JDBC 第 5 章JDBC 概述及基本原理 (JavaDatabaseConnectivity)是一种用于执行SQL 语句的JavaAPI 。它由一组用Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的API,使 他们能够用纯JavaAPI 来编写数据库应用程序。 2.JDBC 如何使用 简单地说, JDBC 的使用包括: (1)与数据库建立连接。 (2)发送SQL 语句。 (3)返回处理结果。 5.1 JDBC 驱动 2. 首先介绍JDBC 驱动(Driver), 因为它是JDBC 开发的基础。有了驱动程序,才能建立 与数据库的连接,然后传递并执行SQL 语句。 目前使用的JDBC 驱动程序可分为以下4种。 (1)JDBC-ODBC 桥加ODBC 驱动程序(JDBC-ODBCbridgeplusODBCdriver):它 利用ODBC 驱动程序提供JDBC 访问。注意,必须将ODBC 二进制代码(许多情况下还包 括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程 序或者是用Java编写的3层结构的应用程序服务器代码最适用于企业网(这种网络上客 户机的安装不是主要问题)。 (2)本地API 部分用Java来编写的驱动程序(Native-APIpartly-Javadriver):这种 类型的驱动程序把客户机API 上的JDBC 调用转换为Oracle、Sybase、Informix、DB2 或其 他DBMS 的调用。注意,像桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码 加载到每台客户机。 (3)JDBC 网络纯Java驱动程序(JDBC-netpureJavadriver):这种驱动程序将JDBC 转换为与DBMS 无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS 协议。 这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具 体协议取决于提供者。通常,这是最为灵活的JDBC 驱动程序。所有这种解决方案的提供 者都有可能提供适合于Intranet使用的产品。为了使这些产品也支持Internet访问,它们 必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。 (4)本地协议纯Java驱动程序(NativeprotocolpureJavadriver):这种类型的驱动程 序将JDBC 调用直接转换为DBMS 所使用的网络协议。这将允许从客户机机器上直接调 用DBMS 服务器,是Intranet访问的一个很实用的解决方法。 5.2 JDBC 开发应用编程接口介绍 2. 1. 主要对象和接口 和程序员密切相关的是如何使用JDBC 提供的API,它包括以下两部分。 (1)jaa.qrmayfauefJDBCiaa2pafrm,tnadedtoJ2SE )。 vsl:PiretrsonJvltosadriin( (2)jvx.ql:EtneucinltnJvltoetrpreeiin( aasxeddfntoaiyiaa2pafrm,neisdtoJ2EE )。 JDBC 中的主要对象和接口,如图5-1所示,说明如下。 JavaWeb应用开发与项目案例教程 图5-1 主要对象和接口 (1)DriverManager:驱动管理类。 (2)Connection:数据库连接对象封装接口。 (3)Statement:陈述语句。 (4)PreparedStatement:预处理语句。 (5)CalableStatement:存储过程调用接口。 (6)ResultSet:结果集接口。 2.编写JDBC应用程序的基本流程 所有的JDBC应用程序都具有下面的基本流程。 (1)注册JDBC驱动程序。 (2)建立到数据库的连接。 (3)通过Statement创建SQL语句。 (4)执行SQL语句。 (5)处理得到的结果。 (6)从数据库断开连接。 图5-2为编写JDBC程序的一般过程。 图5-2 编写JDBC 应用程序的一般过程 第 5 章 JDBC概述及基本原理 11 3 下面举一个开发JDBC的例子。 (1)在MySQL的test数据库下建表,脚本如下。 USE 'test'; /*Table structure for table 'llxtable'*/ DROP TABLE IF EXISTS 'llxtable'; CREATE TABLE 'llxtable' ( 'name' varchar(255) NOT NULL, 'gender' varchar(255) DEFAULT NULL, 'age' int DEFAULT NULL, PRIMARY KEY ('name') ) ENGINE=InnoDB DEFAULT CHARSET=latin1; (2)在MyEclipse中选择New→JavaProject,建立一个Java项目,如图5-3所示。 图5-3 新建项目 (3)命名Projectname为JDBC_demo,如图5-4所示。 (4)单击Next按钮,选中Libraries,单击AddExternalJARs选项,如图5-5所示。 (5)浏览文件目录,找到MySQLConnectorJar包,这里使用的是mysql-connectorjava- 5.1.46,如图5-6所示。 注意:因为这个实例介绍的是JDBC基本特性,所以选择5.1.46版本的库就好,如果要 使用JDBC高级特性,请相应更新到更高版本的Jar包。 JavaWeb应用开发与项目案例教程 图5-4 命名项目 图5-5 单击Add External JARs 选项 JDBC概述及基本原理 第5章 图5-6 添加MySQL Connector Java 包 (6)单击“打开”按钮,完成项目环境搭建。 (7)建立package,右击项目的src文件夹,选择New→Package,如图5-7所示。 图5-7 新建package (8)在Name文本框中输入sample,建立sample包,如图5-8所示。 (9)建立类,右击sample文件夹,选择New→Clas,如图5-9所示。 JavaWeb应用开发与项目案例教程 图5-8 命名package 图5-9 新建class (10)在Name文本框中输入InsertInfo给clas 命名,单击Finish按钮,如图5-10 所示 ( 。 11)编写InsertInfo.ava代码如下。 j