叩丁狼java学习第四天-JDBC

发布于 2021-03-08  867 次阅读


1.加载配置文件的另一种方法

private static Properties props = new Properties();
public static String getUrl(String fileName, String key) {
    try {
      /**
         * 下面三个都可以获得类加载器
         *  System.out.println(Thread.currentThread().getContextClassLoader()); // 当前线程的类加载器
             System.out.println(Test.class.getClassLoader()); // 当前类的类加载器
             System.out.println(ClassLoader.getSystemClassLoader()); // 系统初始的类加载器


         在代码中动态加载jar、资源文件的时候,首先应该是使用Thread.currentThread().getContextClassLoader()。
         ClassHelper.class.getClassLoader(),可能会导致和当前线程所运行的类加载器不一致(因为Java天生的多线程)。
         ClassHelper.class.getClassLoader()一般用在getResource,因为你想要获取某个资源文件的时候,这个资源文件的位置是相对固定的。
         *
         */
        //得到当前的classpath的绝对路径的URI表示法。
        InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
        //读取Properties文件
        props.load(stream);
        return props.getProperty(key);
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
}

2.事务简单使用

try{
//取消事务的自动提交机制,设置为手动提交.
connection对象.setAutoCommit(false);
//操作1
//操作2
//异常
//操作3
//....
//手动提交事务
connection对象.commit();
}catch(Exception e){
//处理异常
connection对象.rollback();
}
//关闭自动事务
connection.setAutoCommit(false);
pst = connection.prepareStatement(sql);
pst.setString(1,user.getUsername());
pst.setInt(2,user.getPassword());
pst.setString(3,user.getEmail());
pst.setInt(4,user.getAge());
pst.execute();
//模拟错误
int a = 10/0;
//提交事务
connection.commit();

3.反引号在mysql中的作用

反引号 ` 在mysql中是为了区分mysql中的保留字符与普通字符而引入的符号

#假如表A中有一列名为select,查询该列
select select from A;   #错误
select `select` from A;  #正确

4.druid连接池

druid下载

https://repo1.maven.org/maven2/com/alibaba/druid/

public class DruidUtil {
    static Properties properties = new Properties();
    static DataSource dataSource = null;
    static {
        try {
            InputStream inputStream = new FileInputStream("application.properties");
            properties.load(inputStream);
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection loadJDBC() {
        try {
            return dataSource.getConnection();
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
    }

5.数据库事务解释

rollback使用注意:

autocommit=false  融离级别为read commit ,不使用语句加锁
当一条词句出错后,它本身就没有更改数据,它没有更改数据就没有锁定资源,所以不要rollback
这只是针对一条语句来说的,但是多条语句就需要rollback 了。因为由可能前面的数据已经执行了更改,但是后面的却失败了。所以要撤消掉前面的结果,并释放资源。

当设置autocommit=false 时,数据库自动执行begin tran
当执行commit 或rollback后,它还会自动执行begin tran
这个功能是数据库里提供的,不是pb 带的
另外有些数据窗口的语句如 update 它采用了事务保存点来保存先前的事务,如果数据库不支持事务
就由可能失败后连以前的结果也被撤消了。

事务的ACID属性

  1. 原子性(Atomicity):原子在化学中,是最小单位,不可以再分割了.
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency): 包装数据的完整性.
    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏)
  1. 隔离性(Isolation):Hibernate再讲
    事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并
    发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  2. 持久性(Durability):
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数
    据库故障不应该对其有任何影响

欢迎欢迎~热烈欢迎~