【学习笔记】JDBC
什么是数据库驱动
数据库驱动就是连接应用程序与数据库的
如果没有数据库驱动,应用程序是无法直接到达数据库的,数据库驱动是由数据库厂商来做的
什么是JDBC
SUN公司为了简化开发人员对数据库的统一操作,提供了一个(Java操作数据库)规范,成为JDBC
这些规范的实现由具体的厂商去做
对开发人员,只需要掌握JDBC接口的操作即可
需要导入数据库驱动包
JDBC程序
-
创建测试数据库
CREATE DATABASE `jdbcStudy` CHARACTER SET utf8 COLLATE utf8_general_ci; USE `jdbcStudy`; CREATE TABLE `users`( `id` INT PRIMARY KEY, `NAME` VARCHAR(40), `PASSWORD` VARCHAR(40), `email` VARCHAR(60), birthday DATE ); INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) VALUES('1','zhangsan','123456','zs@sina.com','1980-12-04'), ('2','lisi','123456','lisi@sina.com','1981-12-04'), ('3','wangwu','123456','wangwu@sina.com','1979-12-04')
-
创建一个项目
-
导入数据库驱动
需要将下载好的数据库驱动包 mysql-connector-java-5.1.47.jar 复制到项目中
然后add as library
-
编写测试代码
package com.lesson; import java.sql.*; public class JdbcTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); //固定写法 //2.用户信息和url //三个参数:useUnicode=true 支持中文编码 // characterEncoding=utf8 设置字符集为utf8 // useSSL=true 使用安全的连接 String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true"; String username = "root"; String password = "123456"; //3.连接数据库对象 Connection代表数据库 Connection connection = DriverManager.getConnection(url, username, password);//驱动管理 去获得连接 //4.执行sql对象 Statement执行sql对象 Statement statement = connection.createStatement(); //5.sql对象去执行sql String sql = "select * from users"; //查询语句 ResultSet resultSet = statement.executeQuery(sql); // 返回结果集,结果集中封装了我们查询出来的全部的结果 while(resultSet.next()){ System.out.println("id:" + resultSet.getObject("id")); System.out.println("name:" + resultSet.getObject("NAME")); System.out.println("pwd:" + resultSet.getObject("PASSWORD")); System.out.println("email:" + resultSet.getObject("email")); System.out.println("birthday:" + resultSet.getObject("birthday")); System.out.println("============================"); } //6.释放连接 resultSet.close(); statement.close(); connection.close(); } }
步骤:
-
加载驱动
-
连接数据库 DriverManager
-
获得执行sql的对象 Statement
-
获得返回的结果集
-
释放连接
DriverManager
Class.forName("com.mysql.jdbc.Driver"); //固定写法
//之前的写法
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
现在一般推荐第一种写法,不推荐之间的写法,
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
原因就是在Driver类中,只有一段静态代码块,一旦执行力Class.forName(),这段代码就执行了
这段静态代码块中已经帮你注册过了,如果你在去主动注册的话,就相当于注册了两遍。
所以我们推荐使用Class.forName() 的方式去执行
URL
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
//公式:
//协议名://主机名:端口号/数据库名?参数1&参数2;
//mysql 默认端口号为3306
//oralce 默认端口号为1521
//jdbc:oralce:thin:@localhost:1521:sid; oralce的url写法
Connection
Connection connection = DriverManager.getConnection(url, username, password);
Connection代表数据库,它可以做数据库能做的事,如
connection.commit(); //事务提交
connection.rollback(); //事务回滚
connection.setAutoCommit(true); //设置事务自动提交
Statement 执行sql的对象 PrepareStatement 和它相同
statement.executeQuery(sql); //执行查询,返回resultSet结果集
statement.executeUpdate(sql); //更新、插入、删除都是用这个,返回受影响的行数
statement.execute(sql); //可以执行任何sel
ResultSet 查询的结果集
封装了所有的查询结果
可以获得指定的数据类型
//如果不知道类型,就使用getObject()
resultSet.getObject();
//知道了列的类型,就使用指定的类型
resultSet.getString();
resultSet.getInt();
resultSet.getFloat();
resultSet.getDouble();
......
遍历,使用指针
resultSet.next(); //移动到下一个
resultSet.previous(); //移动到上一个
resultSet.beforeFirst(); //将光标移动到最前面
resultSet.afterLast(); //将光标移动到最后面
resultSet.absolute(row); //移动到指定行
释放资源
resultSet.close();
statement.close();
connection.close(); //十分占资源,使用完要关闭