JDBC:Java DataBase Connectivity,Java数据库连接。
使用Java语言操作关系型数据库的一套API。
原理:官方(sun公司)定义出一套操作所有关系型数据库的规则,即接口;所有的数据库厂商去实现这套接口,提供数据库驱动的jar包
本质:使用jdbc接口编程,真正运行代码的是驱动jar包中的实现类
// JDBC快速入门:
// 0.创建工程,导入驱动jar包:lib目录下导入mysql-connector-8.0.jar
Class.forName("com.mysql.cj.jdbc.Driver"); // 1.注册驱动
String url = "jdbc:mysql://127.0.0.1:3306/db01";
String user = "root";
String password = "kxg";
Connection conn = DriverManager.getConnection(url, user, password); // 2.获取连接
String sql = "update account set balance = 2000 where id=1"; // 3.定义SQL语句
Statement statement = conn.createStatement(); // 4.获取执行SQL对象
int rows = statement.executeUpdate(sql); // // 5.执行SQL,返回受影响的行数
System.out.println(rows); // 6.处理返回结果
// 7.释放资源
statement.close();
conn.close();
DriverManager:驱动管理类
1.注册驱动:DriverManager中的registerDriver(Driver driver)
在DriverManager类中存在静态代码块,静态代码块中调用DriverManager的registerDriver()方法注册驱动,因此Class.forName("com.mysql.cj.jdbc.Driver")可以省略
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
2.获取数据库连接:static Connection getConnection(url. user, password)方法
URL:连接路径。jdbc:mysql://ip地址(域名):端口号/数据库名称?参数值对&参数值对
jdbc:mysql://localhost:3306/db01:连接本机mysql服务器,端口3306(127.0.0.1)
user:用户名
password:密码
Connection:数据库连接对象
1.获取执行SQL的对象
普通执行SQL对象:Statement createStatement()方法
预编译SQL的执行SQL对象:PreparedStatement PreparedStatement(sql)
执行存储活成的对象:CallableStatement prepareCall(sql)
2.mysql中的事务处理
开启事务-begin、start、transaction;提交事务-commit;回滚事务-rollback(mysql默认自动提交)
Statement:执行SQL语句
int executeUpdate(sql)方法:执行DML、DDL语句
返回值:(1)DML语句影响的行数;(2)DDL语句成功执行后返回0
ResultSet executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
PreparedStatement:预编译SQL并执行,防止SQL注入问题
conn.prepareStatement(sql):通过传入对应的SQL语句,获取PreparedStatement对象
setXXX(参数值1,参数值2):给SQL语句中的?赋值;
参数1:SQL语句中?的位置(从1开始);参数2:?的值
int executeUpdate()、ResultSet executeQuery()方法:执行SQL
// 0.创建工程,导入jar包:lib目录下导入mysql-connector.jar
// 1.注册驱动(静态代码块中直接默认调用)
// 2.获取连接
String url = "jdbc:mysql://127.0.0.1:3303/db01";
String user = "root";
String password = "kxg";
Connection conn = DriverManager.getConnection(url, user, password);
// 3.定义要执行的SQL语句
String sql1 = "update account set balance = 3000 where id = 1";// DML语句
String sql2 = "drop database db02"; // DDL语句
String sql3 = "select * from account"; // DQL语句
// 4.获取执行SQL对象:Statement
Statement statement = conn.createStatement();
// 5.执行SQL
int rows1 = statement.executeUpdate(sql1); // 返回影响的行数
int rows2 = statement.executeUpdate(sql2); // 创建数据库返回rows=1;删除数据库返回rows=0;
ResultSet set1 = statement.executeQuery(sql3); // 利用set集合存储查找结果,保存的是对象集
// 6.处理返回结果
if (rows1 > 0 && rows2 == 0) {
Sysytm.out.println("修改成功~");
System.out.println("删除DB02成功~");
} else {
System.out.println("修改失败~");
}
// 遍历结果集:判断当前行是否为有效数据,并将光标移动到下一行
while (set1.next()) {
// 获取数据:getxxx()
int id = set1.getInt(1); // 第一列:id
String name = set1.getString(2); // 第二列:name
double money = set1.getDouble(3); // 第三列:balance
System.out.println("id = " + id + " name = " + name + " balance = " + money);
System.out.println("---------");
}
// 3.定义要执行的SQL语句
String sql4 = "select * from user where name = ? && password = ?";
// 4.获取执行SQL的对象:preparedStatement
PreparedStatement preparedStatement = conn.prepareStatement(sql4);
// 5.设置相关值
preparedStatement.setString(1, "zhangsan");
preparedStatement.setString(2, "123456");
// 6.执行SQL语句
ResultSet set2 = preparedStatement.executeQuery();
// 7.判断结果
if (set2.next()) {
System.out.println("登录成功~");
} else {
System.out.println("登录失败~");
}
// 释放资源
set1.close();
set2.close()
statement.close();
preparedStatement.close();
conn.close();