JDBC:java database connectivity SUN公司提供的一套操作数据库的标准规范。
JDBC与数据库驱动的关系:接口与实现的关系。
JDBC规范
掌握四个核心对象:
- DriverManager:用于注册驱动
- Connection: 表示与数据库创建的连接
- Statement: 操作数据库sql语句的对象
- ResultSet: 结果集或一张虚拟表
JDBC的准备工作:
JDBC规范(接口)在哪里:
JDK中: java.sql.*; javax.sql.*;
数据库厂商提供的驱动:mysqll-connector-java-xxx-bin.jar文件(需要根据mysql和Java版本确定)
JDBC常用的类和接口详解
DriverManager
java.sql.Drivermanager类 : 注册驱动和创建连接
a、注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用
原因有2个:
> 导致驱动被注册2次,静态代码块里又注册了一次。
> 强烈依赖数据库的驱动jar
解决办法:
Class.forName("com.mysql.jdbc.Driver");
b.与数据库建立连接
根据API
第一种方式:
static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
getConnection("jdbc:mysql://localhost:3306/test1", "root", "123456"); |
URL:SUN公司与数据库厂商之间的一种协议。 jdbc:mysql://localhost:3306/day06 协议 子协议 IP :端口号 数据库名 mysql: jdbc:mysql://localhost:3306/test1 或者 jdbc:mysql:///test1(默认本机连接) |
第二种方式:
Properties info = new Properties();//要参考数据库文档 info.setProperty("user", "root"); info.setProperty("password","root");
getConnection(String url, Properties info) |
第二种方式
getConnection(String url) DriverManager.getConnection("jdbc:mysql://localhost:3306/test1?user=root&password=123456"); |
Connection接口
接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
Statement接口
操作sql语句,并返回相应结果的对象
接口的实现在数据库驱动中。用于执行静态 SQL 语句并返回它所生成结果的对象。
- ResultSet executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。
- int executeUpdate(String sql) 根据执行的DML(insert update delete)语句,返回受影响的行数。
- boolean execute(String sql) 此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;
ResultSet接口:
结果集(客户端存表数据的对象)
封装结果集
提供一个游标,默认游标指向结果集第一行之前。
调用一次next(),游标向下移动一行。
提供一些get方法。
封装数据的方法
Object getObject(int columnIndex); 根据序号取值,索引从1开始
Object getObject(String ColomnName); 根据列名取值。
JDBC连接MySQL并执行query的一个demo
从加载驱动、建立连接 到执行语句 到处理执行结果,最后到关闭连接 释放资源 整个过程。
public class Demo04 {
public static void main(String[] args) {
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");//使用了这个类就加载了
//2、创建连接
conn = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=root&password=123456");
//3、得到执行sql语句的Statement对象
statement = conn.createStatement();
String sql = "select * from user;";
//4、执行sql语句,并返回结果
resultSet = statement.executeQuery(sql);
//5、处理结果
while(resultSet.next()){
System.out.println(resultSet.getObject(1));
System.out.println(resultSet.getObject(2));
System.out.println(resultSet.getObject(3));
System.out.println(resultSet.getObject(4));
System.out.println(resultSet.getObject(5));
System.out.println("======================");
}
} catch (Exception e) {
// TODO: handle exception
}finally {
//6关闭资源
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}