**
使用JDBC建立连接
**
public static void main(String[] args) throws Exception{
Class.forName("com.mysql.cj.jdbc.Driver");//加载MySQL驱动
try (
Connection connection = DriverManager.getConnection(
pros.getProperty("mysqlURL"),
pros.getProperty("mysqlUser"),
pros.getProperty("mysqlPwd"));
//DriverManager:用于管理JDBC的服务类。主要用来获取connection连接对象,
//该方法入参依次是地址,用户,密码,并返回对应的数据库连接
//Connection:数据库连接对象。
Statement statement = connection.createStatement();
//Statement:用于执行SQL语句的工具接口。该方法返回用于执行SQL语句的Statement对象,只有获得了Statement之后才可执行SQL语句
ResultSet resultSet = statement.executeQuery("select empname,salary,age from emp where id>1")
//ResultSet:结果集对象。
//executeQuery()该方法只用于执行查询语句,并返回查询结果对应的ResultSet。
){
//ResultSet使用getXxx方法获取记录指针
while (resultSet.next()){
System.out.println(" 名字是 :"+resultSet.getString(1)
+" 薪金是 :"+resultSet.getDouble(2)
+" 年龄是 :"+resultSet.getObject(3));
}
}
}
**
建立事务
**
关于事务的一些属性
原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
public void insertInTransaction(String[] sqls) throws Exception{
Class.forName("com.mysql.cj.jdbc.Driver");
try (
Connection connection = DriverManager.getConnection(
pros.getProperty("mysqlURL"),
pros.getProperty("mysqlUser"),
pros.getProperty("mysqlPwd"))
){
connection.setAutoCommit(false);//关闭自动提交,开启事务
try(
Statement statement = connection.createStatement()
){
for (String sql :
sqls) {
statement.executeUpdate(sql);
}
}
// catch (Exception e){
// connection.rollback();
// e.printStackTrace();
// }
//当Connection 遇到一个未处理的SQLException 异常时,系统将会非正常退出,事务
//也会自动回滚。但如果程序捕获了该异常,则需要在异常处理块中显式地回滚事务。如上面注释的catch
//提交事务
connection.commit();
}
}
public static void main(String[] args) throws Exception{
TransactionMySql transactionMySql = new TransactionMySql();
String[] sqls = new String[]{
"INSERT INTO emp VALUES(NULL,'小蓝',2000,NULL,18,NULL) ",
"INSERT INTO emp VALUES(NULL,'小紫',2500,NULL,20,NULL) ",
//下面这句将会引起异常,导致回滚
"INSERT INTO emp VALUES(NULL,'小黑',NULL,NULL,18,NULL) "
};
transactionMySql.insertInTransaction(sqls);
}