实验13 Java通过JDBC连接数据库
JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,可以为多种关系数据库提供统一访问,数据库开发人员利用这个接口能够高效简单地编写数据库应用程序。
【实验目的】
1.掌握Java通过JDBC连接数据库的方法。
2.掌握编程实现数据库应用程序基本功能的方法。
【知识要点】
(1)Java语言
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,是由Sun公司推出(现已被Oracle公司收购)。Java最初被称为Oak,是为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。Java是一种简单的、面向对象的、分布式的、解释型的、健壮安全的、结构中立的、可移植的、性能优异、多线程的静态语言。现在Java语言被广泛应用,Java技术也在不断更新,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
(2)Eclipse
Eclipse是一个跨平台的自由集成开发环境(Integrated Development Environment,IDE),是一个框架和一组服务,用于通过插件构建开发环境。Eclipse最初主要用来实现Java语言开发,但通过安装不同的插件,Eclipse也可以支持不同的计算机语言,比如C++和Python等。Eclipse是一个开放源码的项目,并得到软件供应商联盟的支持。Eclipse项目继续被数百万开发人员使用。
【实验内容】
①下载并安装Eclipse。
②下载并配置MySQL连接驱动。
③在Windows10操作系统下,使用 Eclipse实现一个包括查询、插入和删除等简单功能的应用程序。
【实验步骤】
说明:下面的实验是在Java环境和Eclipse 环境已经安装并配置好的情况下进行的,Java环境和Eclipse 环境的安装和配置请学生自行查阅相关资料完成。
(1)创建Java应用程序
启动Eclipse,创建Java项目命名为“ConnectDataBase”,在项目中创建lib文件夹,方便后续引入MySQL连接驱动包。
(2)下载并安装MySQL驱动
①可以在MySQL网站下载MySQL连接驱动,具体下载网址见MySQL官网,下载第二个压缩包,如图13.1所示。

图13.1 MySQL连接驱动下载页面
②下载完成之后解压,找到里面的mysql-connector-java-8.0.30.jar文件,然后将此文件复制到Eclipse的ConnectDataBase项目的lib文件夹中。(https://www.daowen.com)
③右击mysql-connector-java-8.0.30.jar,选择Build Path选项中的Add to Build Path添加驱动到path中。
(3)编程实现对数据库的操作
在创建的ConnetDataBase项目中编程实现一个能执行查询、插入和删除等简单数据库操作的程序。
①启动打开Eclipse,打开ConnectDataBase项目。右击src文件夹,在快捷菜单中依次选择“New”→“Package”,创建名为“jdbc”的包,如图13.2所示。

图13.2 “New Java Package”对话框
②右击jdbc包,在快捷菜单中选择“New”→“Class”,创建名为“JdbcConnection”的类,如图13.3所示。

图13.3 “New Java Class”对话框
③查询操作:在代码框中输入如下代码,用于获取数据库连接及基本的查询数据表的操作,执行结果如图13.4所示。
package jdbc;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class JdbcConnection { public static void main(String[] args) { // TODO Auto-generated method stub Connection conn = null; try { //1.数据库连接地址 String url = "jdbc:mysql://localhost:3306/sales"; //user:登录数据库的用户名 String user = "root"; //自己的账号 //password:用户名对应的密码,这些都是自己之前设定的 String password = ""; //mySql的驱动:com.mysql.jdbc.Driver String driverName = "com.mysql.jdbc.Driver"; //2.实例化Driver Class clazz = Class.forName(driverName); Driver driver = (Driver) clazz.newInstance(); //3.通过DriverManager来注册驱动 DriverManager.registerDriver(driver); //4.通过DriverManager的getConnection方法,获取Connection类的对象 conn = DriverManager.getConnection(url, user, password); //获取statement对象 String sql = "select * from agents"; PreparedStatement preparedStatement =conn.prepareStatement(sql); //执行语句 /**/ ResultSet resultSet = preparedStatement.executeQuery(sql); //返回的数据存储在result中 while (resultSet.next()){ System.out.print("["); System.out.print( resultSet.getString("aid")+"\t"); System.out.print( resultSet.getString("aname")+"\t"); System.out.print( resultSet.getString("city")+"\t"); System.out.print( resultSet.getFloat("persent")+"\t"); System.out.println("]"); } if (resultSet != null){ resultSet.close(); } if(preparedStatement != null){ preparedStatement.close(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { //当conn不为空时 if(conn != null) //关闭conn资源 conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}

图13.4 代码执行结果显示框
④插入操作:修改上述代码中的SQL语句,如下所示。先向agents表中插入一条信息,然后再查询表。执行结果如图13.5所示。
//获取statement对象
String sql1 = "insert into agents values('a08','test','chongqing',8)";
String sql2 = "select * from agents";
//执行插入语句
PreparedStatement preparedStatement =
conn.prepareStatement(sql1);
preparedStatement.executeUpdate(sql1);
//执行查询语句
/**/
preparedStatement = conn.prepareStatement(sql2);
ResultSet resultSet = preparedStatement.executeQuery(sql2);

图13.5 插入操作结果显示框
⑤删除操作:同样修改上述代码中的SQL语句,如下所示。删除agents表中aid为“a08”的信息,然后再查询删除后的表。执行结果如图13.6所示。
//获取statement对象
String sql1 = "delete from agents where aid = '"+"a08"+"'";
String sql2 = "select * from agents";
//执行删除语句
PreparedStatement preparedStatement =
conn.prepareStatement(sql1);
preparedStatement.executeUpdate(sql1);
//执行查询语句
/**/
preparedStatement = conn.prepareStatement(sql2);
ResultSet resultSet = preparedStatement.executeQuery(sql2);

图13.6 删除操作结果显示框