环境:
jdk版本:1.8
数据库:mysql5.7
1.JDBC
JDBC 是 Java Database Connectivity 的简写,译: Java 数据库链接。故名思意,其作用就是用于链接并对数据库做执行操作的。JDBC 是由Java提供的一套针对关系型数据库操作的接口,由各个数据库厂商实现,即驱动。
通过 JDBC 对数据库操作共分为 6 个步骤
1.载入驱动
通过 Class.forName("com.mysql.jdbc.Driver");
方法使用当前类加载载入驱动。载入之后 会立即向 DriverManager
(后面有提到)注册驱动.
2.获取连接
通过 DriverManager.getConnection(stirng connectionString)
获取连接器Connection
。
参数解析: connectionString:协议://ip地址(域名):端口号/数据库名称
3.创建预编译对象
通过Connection.createStatement()
创建Statement
4.执行sql
根据 SQL 语句的特性在 Statement
对象的一系列方法中选择对应的方法执行SQL并返回执行结果。
5.处理结果集
Statement不同的执行方法会有不同的结果集,如:ResultSet、数据影响行数…等,根据对应的结果集处理即可。
6.释放资源
最后 一定要调用 Connection.Close()
和 Statement.Close()
方法释放Connection和Statement的资源!!!。
代码示例:
public class JDBCDemo {
public static void main(String[] args) throws Exception {
//载入驱动
Class.forName("com.mysql.jdbc.Driver");
//url :
String url = "jdbc:mysql://127.0.0.1:3306/blog_dev";
//用户名
String userName = "userName";
//密码
String password = "password";
//获取连接器
Connection connection = getConnection(url, userName, password);
//定义sql语句
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(date);
String sql = String.format("INSERT INTO role(`code`,`name`,`description`,`createtime`,`deleted`) VALUES('%s','%s','%s',NOW(),0)", "Test", "测试", "测试人员", dateString);
Statement statement = connection.createStatement();
int count = statement.executeUpdate(sql);
if (count > 0)
System.out.println("执行成功");
else
System.out.println("执行失败");
//释放资源
statement.close();
connection.close();
}
}
JDBC API简述:
- DriverManager
作用:管理和注册驱动以及获取数据库链接。
1.1 注册驱动:Class.forName("com.mysql.jdbc.Driver");
PS:从JDBC4.0版本驱动程序开始,已经不需要通过Class.forName()来注册驱动了,JDBC 4.0 驱动程序必须包含该文件META-INF/services/java.sql.Driver。此文件包含 JDBC 驱动程序实现的名称java.sql.Driver,会自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类。
1.2 获取数据库链接
通过DriverManager.getConnection()方法来获取数据库连接,该方法有三个重载:
-
getConnection(String url)
url:访问数据库的 url 路径。
url格式:协议://ip地址(域名):端口号/数据库名称?参数键值对…
如:jdbc:mysql://127.0.0.1:3306/blog_dev?useSSl=false&user=root&password=123456 -
getConnection(String url, Properties info)
url:访问数据库的 url 路径。
info:一个持久的属性集对象。 -
getConnection(String url, String user, String password)
url:访问数据库的 url 路径。
user:数据库的用户名。
password:数据库的密码。
常用的参数
useUnicode
是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true
默认:false
characterEncoding
当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk
默认:autodetect
autoReconnect
当数据库连接异常中断时,是否自动重新连接?
默认:false
autoReconnectForPools
是否使用针对数据库连接池的重连策略
默认:false
failOverReadOnly
自动重连成功后,连接是否设置为只读?
默认:true
maxReconnects
autoReconnect设置为true时,重试连接的次数
默认:3
initialTimeout
autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒
默认:2
connectTimeout
和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本
默认:0
socketTimeout
socket操作(读写)超时,单位:毫秒。 0表示永不超时
默认:0
useSSL
与服务器进行通信时使用SSL
默认:false
serverTimezone
覆盖时区的检测/映射。当服务器的时区为映射到Java时区时使用
说明:国内一般设置为serverTimezone=GMT。如果不设置,部分情况会出现时差问题。
2.Connection
作用:获取SQL执行对象及事务管理
获取途径:DriverManager.getConnection()
2.1 获取 SQL 执行对象
通过 Connection.createStatement() 方法获取执行普通 SQL 对象。
2.2 事务管理
-
开启事务
Connection.setAutoCommit(bool autoCommit);
autoCommit:是否自动提交事务,True 则自动提交,False 手动提交。
当 autoCommit = true 时无需再调用 commit() 方法手动提交
当 autoCommit = false 时 必须手动调用 commit() 方法手动提交 -
提交事务
Connection.commit(); -
回滚事务
Connection.rollback();
3.Statement
作用:执行 SQL 语句
针对不同的 SQL 语句 Statement 会有对应的方法执行。
数据库查询语言分类
DQL:数据库查询语言。关键字:SELECT ... FROM ... WHERE。
DDL :数据库模式定义语言。关键字:CREATE,DROP,ALTER。
DML:数据操纵语言。关键字:INSERT、UPDATE、DELETE。
DCL:数据控制语言 。关键字:GRANT、REVOKE。
TCL:事务控制语言。关键字:COMMIT、ROLLBACK、SAVEPOINT。
DDL,DML,DCL,DQL,TCL共同组成数据库的完整语言。
executeUpdate(string sql)
执行 DDL DML语句,如果执行的是DML语句,返回值则是受影响数据的行数,如果执行的是DDL语句返回值有可能为0