public class TestJAddPreparedStatement {
// Statement是用于执行SQL语句的,比如增加,删除
// s.execute执行sql语句
// 执行成功后,用mysql-front进行查看,明确插入成功
// 数据库的连接是有限资源,相关操作结束后,养成关闭数据库的好习惯
// 先关闭Statement
// 后关闭Connection
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8",
"root", "123");
// 准备sql语句
// 注意: 字符串要用单引号'
//增
String sql = "insert into userInfo values(?,?,?)";
//删
// String sql = "delete from userInfo where id = 5";
//改
// String sql = "update userInfo set name = 'name 5' where id = 3";
// 根据sql语句创建PreparedStatement
PreparedStatement ps = conn.prepareStatement(sql);
// 设置参数.第几个问号就数字几
ps.setInt(1, 6);
ps.setString(2, "wdd");
ps.setString(3, "451263");
// 执行
ps.execute();
ps.close();
conn.close();
}
}
// 在事务中的多个操作,要么都成功,要么都失败
// 通过 c.setAutoCommit(false);关闭自动提交
// 使用 c.commit();进行手动提交
// 在22行-35行之间的数据库操作,就处于同一个事务当中,要么都成功,要么都失败
// 所以,虽然第一条SQL语句是可以执行的,但是第二条SQL语句有错误,其结果就是两条SQL语句都没有被提交。 除非两条SQL语句都是正确的。
//----------------------------------------------------------------------------------------------
// 在Mysql中,只有当表的类型是INNODB的时候,才支持事务,所以需要把表的类型设置为INNODB,否则无法观察到事务.
// 修改表的类型为INNODB的SQL:
// alter table hero ENGINE = innodb;
// 查看表的类型的SQL
//
// show table status from how2java;
// 不过有个前提,就是当前的MYSQL服务器本身要支持INNODB,如果不支持,请看 开启MYSQL INNODB的办法
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8",
"root", "123456");
Statement s = conn.createStatement();) {
// 有事务的前提下
// 在事务中的多个操作,要么都成功,要么都失败
conn.setAutoCommit(false);
// 加血的SQL
String sql1 = "update userinfo set uid = uid +1 where uid = 4";
s.execute(sql1);
// 减血的SQL
// 不小心写错写成了 updata(而非update)
String sql2 = "updata userinfo set uid = uid -1 where id = 4";
// String sql2 = "update userinfo set uid = uid -1 where uid = 4";
s.execute(sql2);
// 手动提交
conn.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}