JDBC常用类和接口
java.sql.Driver接口
JDBC是一套协议,是Sun定义的一组接口。这个接口规范了你作为Java开发人员该怎么去访问下面的数据库。但这只是一个接口,一种规范。具体接口的实现,是数据库厂商以驱动的形式实现的。因此,首先要加载驱动,也就是生成一个相应Driver接口的实例。方法如下:
Class.forName("JDBCDriverClass");
注意,对于下载的驱动类,首先需将下载的.jar包连同其路径一同加入环境变量CLASSPATH中。如果用eclipse或者intelliJ等集成开发环境,可以将驱动导入指定项目中。导入方法点这里jdbc-mysql驱动包
java.sql.DriverManager类
驱动程序管理器类,负责管理各种不同的驱动程序。驱动程序加载后,可通过该类的静态方法getConnection(URL)
连接到一个数据库,并返回一个Connection对象。URL是数据库在Internet上的唯一标识符。以下列出常见数据库URL格式:
Access jdbc:odbc:dataSource
MySQL jdbc:mysql://hostname/dbname
Oracle jdbc:oracle:thin:@hostname:port#:oracleDBSID
建立连接方式如下:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/Student", "easy", "123456");
该语句为本地MySQL数据库Student创建一个连接,用户名为easy,用户口令为123456。
java.sql.Connection接口
该接口的对象,表示与指定数据库的连接。只有连接成功后,才能执行后续有关数据库的所有操作。
java.sql.Statement接口
Connection对象好比连接本地程序和数据库之间的缆绳,代表着程序与数据库之间的连接。Statement对象就好比缆车,它将SQL语句传送给数据库并返回结果。简单地说,使用Connection连接到数据库,由Statement创建和执行SQL语句。
Statement statement = connection.createStatement();
Statement对象的executeQuery()方法,执行SELECT查询语句。
Statement对象的executeUpdate()方法,执行INSERT、UPDATE、DELETE等语句。
Statement对象的execute()方法,执行CREATE、DROP等语句。
java.sql.ResultSet接口
针对有返回结果的SQL语句,ResultSet接口用来处理结果。其中存有一个表,该表的当前行(初始位置为null)可以被访问。调用其next()方法可以将当前行下移,调用其get()方法可以从当前行获取值。
JDBC基本操作示例
在MySQL创建用户账户
在DOS命令行下依次执行以下语句:(注意忽略双斜杠后面的内容)
mysql -uroot -p //以root用户身份登录到MySQL,-p后为root用户密码
use mysql //进入(切换)到mysql数据库
create user 'easy'@localhost identified by '123456'; //创建名为easy用户密码为123456的用户
grant select,insert,update,delete,create,drop,execute,
references on *.* to 'easy'@'localhost'; //给新建的用户账户授权
exit
注:Windows系统下,每次计算机启动时会启动MySQL数据库服务器,该服务器默认包含一个名为mysql的数据库,其中存放包含服务器信息及用户信息的表格。该数据库为管理员的使用而设计,我们就是在这个数据库中创建用户账户的。
创建名为Student的数据库
在DOS下依次输入以下命令:(注意忽略双斜杠后面的内容)
mysql -ueasy -p123456 //以easy用户身份登录到MySQL
create database Student; //创建名为Student的数据库
创建StudentInfo数据表
将以下语句写到一个脚本文件中:
create table StudentInfo (
id varchar(10) primary key,
name varchar(50),
age integer(3));
insert into StudentInfo values('U08001', 'Jim', 18);
insert into StudentInfo values('U08002', 'Tom', 20);
insert into StudentInfo values('U08003', 'Lily', 20);
不妨将脚本文件命名为script.sql。
接下来继续执行以下命令:
use Student //进入(切换)到Student数据库
source script.sql; //执行该SQL脚本文件
注意,在执行source script.sql
之前,要确保当前路径下包含script.sql文件。如果提示找不到文件,先退出mysql进入到script.sql目录下重新登录mysql执行。
至此,我们创建了Student数据库,并在该数据库中创建了StudentInfo表,其中插入了三条数据(见脚本文件中三条insert
)。
打印StudentInfo表中内容
新建工程后添加以下代码:
import java.sql.*;
public class SQLtest {
public static void main(String args[]) {
Connection connection = null;
try{
//load driver
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded!");
//Establish a connection
connection = DriverManager.getConnection
("jdbc:mysql://localhost/Student", "easy", "123456");
System.out.println("Database connected!");
//create a statement
Statement statement = connection.createStatement();
//execute a statement
ResultSet rs = statement.executeQuery("select * from StudentInfo");
while(rs.next()) {
System.out.print("学号" + rs.getString(1));
System.out.print("\t姓名" + rs.getString(2));
System.out.print("\t年龄" + rs.getString(3));
System.out.println();
}
}catch (ClassNotFoundException ce) {
ce.printStackTrace();
}catch (SQLException sqle) {
sqle.printStackTrace();
}finally {
try {
connection.close();
}catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}
输出如下:
Driver loaded!
Database connected!
学号U08001 姓名Jim 年龄18
学号U08002 姓名Tom 年龄20
学号U08003 姓名Lily 年龄20
11行 加载mysql驱动
15行 以’easy’用户建立到“localhost”本地服务器中Student数据库的连接。
20行 创建Statemen对象
23行 执行SQL语句”select * from StudentInfo”,实现对StudentInfo表的查询,并将结果返回ResultSet对象。
25行 遍历打印表中数据
数据库服务器建立和维护一个连接的开销较大,作为一种良好编程习惯,当不再使用ResultSet,Statement及Connection对象时,应手动关闭。实际上,在调用Statement对象的close()方法时,其上如果有打开的ResultSet结果集,会自动关闭。同样地,调用Connection对象的close()方法时,基于该连接的所有Statement对象都将被关闭。如果我们使用的连接是短时性的,可以在finally语句块中只显式关闭Connection对象。
修改StudentInfo表内容并打印
23行 在StudentInfo表中插入'U08004', 'LiLei', '19'
26行 将所有学生年龄加2
29行 删除学号为U08002
的学生
import java.sql.*;
public class SQLtest {
public static void main(String args[]) {
Connection connection = null;
try{
//load driver
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded!");
//Establish a connection
connection = DriverManager.getConnection
("jdbc:mysql://localhost/Student", "easy", "123456");
System.out.println("Database connected!");
//create a statement
Statement statement = connection.createStatement();
//插入新数据
statement.executeUpdate("insert into StudentInfo values('U08004', 'LiLei', '19')");
//将所有学生年龄加2
statement.executeUpdate("update StudentInfo set age=age+2");
//删除学号为U08002的数据项
statement.executeUpdate("delete from StudentInfo where id='U08002'");
//execute a statement
ResultSet rs = statement.executeQuery("select * from StudentInfo");
while(rs.next()) {
System.out.print("学号" + rs.getString(1));
System.out.print("\t姓名" + rs.getString(2));
System.out.print("\t年龄" + rs.getString(3));
System.out.println();
}
}catch (ClassNotFoundException ce) {
ce.printStackTrace();
}catch (SQLException sqle) {
sqle.printStackTrace();
}finally {
try {
connection.close();
}catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}
打印结果如下:
Driver loaded!
Database connected!
学号U08001 姓名Jim 年龄20
学号U08003 姓名Lily 年龄22
学号U08004 姓名LiLei 年龄21