API_Connection
数据库连接对象: 获取执行sql的对象;管理事务
Connection API可以管理事务,简单来理解就是,事务中定义的sql语句要么执行都成功,要么都失败
public static void main(String[] args) throws SQLException {
// 连接数据库
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
// 定义sql语句,此处定义了两条sql语句
String sql1 = "UPDATE `user` SET money = 2000 WHERE id = 1";
String sql2 = "UPDATE `user` SET money = 2000 WHERE id = 2";
// 获取执行sql的对象Statement
Statement stmt = conn.createStatement();
// 此处体现出了Connection API的作用之一:可以管理事务
// 两条sql语句,要么都成功执行,要么事务回归,都执行失败
try {
// 1.开启事务
conn.setAutoCommit(false);
// 执行sql,返回值为影响行数
int count1 = stmt.executeUpdate(sql1);
System.out.println(7 / 0);
int count2 = stmt.executeUpdate(sql2);
// 处理结果
System.out.println(count1);
System.out.println(count2);
// 2.提交事务
conn.commit();
} catch (Exception e) {
System.out.println(e);
// 3.事务回滚
conn.rollback();
}
// 释放资源
stmt.close();
conn.close();
}
API_Statement
作用:执行sql语句
public static void main(String[] args) throws SQLException {
// 连接数据库
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
// 定义sql语句
String sql1 = "UPDATE `user` SET money = 2000 WHERE id = 1";
// 获取执行sql的对象Statement
Statement stmt = conn.createStatement();
// 执行sql,返回值为影响行数
int count1 = stmt.executeUpdate(sql1);
// 处理结果
if (count1>0){
System.out.println("修改数据成功!!!");
}else{
System.out.println("修改数据失败!!!");
}
// 释放资源
stmt.close();
conn.close();
}
API_ResultSet
封装了DQL查询语句的结果
public static void main(String[] args) throws SQLException {
// 连接数据库
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, username, password);
String sql = "select * from user";
Statement stmt = connection.createStatement();
// 封装了dql查询语句的结果,可通过实例化的对象对数据进行获取,方便其它操作
ResultSet rs = stmt.executeQuery(sql);
// 创建集合
ArrayList<Account> list = new ArrayList<>();
while (rs.next()){
Account account = new Account();
int id =rs.getInt(1);
String name = rs.getString(2);
String sex = rs.getString(3);
String address = rs.getString(4);
double money = rs.getDouble(5);
// 赋值给对象
account.setId(id);
account.setName(name);
account.setSex(sex);
account.setAddress(address);
account.setMoney(money);
// 存入集合
list.add(account);
System.out.println("--------------");
}
System.out.println(list);
// 释放资源
rs.close();
stmt.close();
connection.close();
}
API_PreparedStatement
该API的作用十分的大,他会预编译sql语句并执行:主要解决的问题是sql注入的问题。我想sql注入的问题大家应该都不陌生。关于sql注入的具体解释,请自行查阅,此处只做简单介绍。
sql注入:通过操作输入来修改事先定义好的sql语句,用以达到执行代码对服务器进行攻击的方法
主要通过在sql语句中使用?去占位,即替代变量的位置,代码如下
public static void main(String[] args) throws SQLException {
// 连接数据库
String url = "jdbc:mysql:///test";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
// 接受用户名和密码
String name = "gsw";
String pwd = "123";
// 该处通过?占位
String sql = "select * from tb_user where name = ? and password = ? ";
// 获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置?的值,此处可以通过?的顺序去填补上面的?你懂我意思吧?
pstmt.setString(1, name);
pstmt.setString(2, pwd);
// 执行sql语句
ResultSet rs = pstmt.executeQuery();
// 判断是否登录成功
if (rs.next()) {
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}
rs.close();
pstmt.close();
conn.close();
}