一. 简单使用流程
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBC_demo {
public static void main(String[] args) throws Exception {
// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接
String url = "jdbc:mysql://localhost:3306/heima?useSSL=false";//useSSL防止发生安全警告
String username = "root";
String password = "whdan20jesus";
Connection conn = DriverManager.getConnection(url, username, password);
// 3.定义sql
String sql = "UPDATE dept set loc = \"咸宁\" where id=40;";
// 4.获取执行sql的对象Statement
Statement statement = conn.createStatement();
// 5.执行sql
int res = statement.executeUpdate(sql);//受影响的行数,executeUpdate只针对update语句
// 6.处理结果
System.out.println(res);
// 7.释放资源
statement.close();
conn.close();
}
}
1.1 Api介绍
1.1.1 DriverManager
DriverManager的作用:
注册驱动:使用Driver类
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
在加载Driver类后,其中的静态代码块会自动执行一次
Class.forName("com.mysql.jdbc.Driver");//可以加载Driver类
Mysql5之后的驱动包,可以省略注册驱动的步骤,因为可以自动加载驱动包内的Driver类
DriverManager内:getConnection静态方法
static Connection:getConnection(String url, String user, String password)
尝试建立与给定数据库URL的连接。
url:连接路径
语法:jdbc:mysql://ip:端口/数据库名称?参数键值对1&参数键值对2
如果连接的本机mysql服务器,默认端口是3306,则可以简写为
jdbc:mysql:///数据库名称?参数键值对1&参数键值对2
配置useSSL=false,禁用安全连接方式,可以解决警告问题。
user:用户名;password:密码
1.1.2 Connection
Connection(数据库连接对象)作用:
获取执行SQL的对象
管理事务
(1)获取执行SQL的对象
//普通执行SQL对象
Statement:createStatement()
//预编译SQL的执行SQL对象,防止SQL注入
PreparedStatement:prepareStatement(String sql)
(2)管理事务
//Mysql事务管理
开启事务:BEGIN/START TRANSACTION
提交事务:COMMIT
回滚事务:ROLLBACK
Mysql默认自动提交事务
//JDBC事务管理:Connection接口中定义了3个对应的方法
开启事务:void:setAutoCommit(boolean autoCommit) //true自动提交,false手动提交
提交事务:void:commit()
回滚事务:void:rollback()
使用事务,如果执行过程中出现异常,可以恢复到之前状态,不会有执行一半的情况
Statement statement = conn.createStatement();
//5.执行sql
try {
// conn.setAutoCommit(false);
int res1 = statement.executeUpdate(sql1);//受影响的行数
System.out.println(res1);
int i = 3/0;
int res2 = statement.executeUpdate(sql2);//受影响的行数
System.out.println(res2);
// conn.commit();
} catch (SQLException e) {
// conn.rollback();
}
1.1.3 Statement
statement作用:
1.执行sql语句;
int executeUpdate(sql):执行DML,DDL语句
返回值:(1)DML语句影响的行数;(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
ResultSet对象用于操作查询结果数据的方法:
boolean next():
光标从当前位置向前移动一行
判断当前行是否有效
true:有效行
false:无效行
getXXX(参数):获取数据
参数:
int : 列的编号,从1开始
String : 列的名称
while