1、注册驱动
DriverManager.registerDriver(new Driver());
registerDriver方法是用于注册驱动的,但是我们之前做的入门案例并不是这样写的。而是如下实现
Class.forName("com.mysql.jdbc.Driver");
我们查询MySQL提供的Driver类,看它是如何实现的,源码如下:
static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } } //JVM加载类时会执行静态代码块;每个静态代码块只会被执行一次。
在该类中的静态代码块中已经执行了 DriverManager
对象的 registerDriver()
方法进行驱动的注册了,那么我们只需要加载 Driver
类,该静态代码块就会执行。而 Class.forName("com.mysql.jdbc.Driver");
就可以加载 Driver
类。
==提示:==
MySQL 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
2、获取数据库连接
String url = "jdbc:mysql://localhost:3306/JDBCTest"; Connection connection = DriverManager.getConnection(url, "root", "123456");
参数说明:
url : 连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
细节:
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对
配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
user :用户名
password :密码
1、获取执行对象
普通执行SQL对象
Statement statement = connection.createStatement();
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
2、事务管理
开启事务
connection.setAutoCommit(false);
MySQL默认是自动提交事务。
true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为为false。
提交事务
connection.commit();
回滚事务
connection.rollback();
3、案例
package com.qianchen; import java.sql.*; /* 事务管理 */ public class JDBCTest02 { public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost:3306/JDBCTest"; Connection connection = DriverManager.getConnection(url, "root", "123456"); String sql = "update `User` set `password`=110119 where `username`='李四'"; Statement statement = connection.createStatement(); try { //开启事务 connection.setAutoCommit(false); //执行sql //int a = 3/0;//设置错误,检验 connection.rollback(); int i = statement.executeUpdate(sql); System.out.println(i); //提交事务 connection.commit(); }catch (Exception e){ //如果出现错误,就回滚事务 connection.rollback(); } statement.close(); connection.close(); } }
1、执行DDL、DML语句
int i = statement.executeUpdate(sql);
2、执行DQL语句
ResultSet resultSet = statement.executeQuery(sql);
ResultSet对象提供了操作查询结果数据的方法,如下:
boolean next()
将光标从当前位置向下移动一行
判断当前行是否为有效行
方法返回值说明:
true : 有效行,当前行有数据
false : 无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx : 数据类型;如: int getInt(参数) ;String getString(参数)
参数
int类型的参数:列的编号,从1开始。不是行的编号!!!
String类型的参数: 列的名称
案例
package com.qianchen; import java.sql.*; /* ResultSet */ public class JDBCTest03 { public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost:3306/JDBCTest"; Connection connection = DriverManager.getConnection(url, "root", "123456"); String sql = "select * from `User`"; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()){ /* //数字代表列的编号,不是行的编号!!! String username = resultSet.getString(1); int password = resultSet.getInt(2); System.out.println("username:"+username+"-->password:"+password); */ String username = resultSet.getString("username"); int password = resultSet.getInt("password"); System.out.println("username:"+username+"-->password:"+password); } resultSet.close(); statement.close(); connection.close(); } }