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属性
- 原子性(Atomicity):原子在化学中,是最小单位,不可以再分割了.
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 - 一致性(Consistency): 包装数据的完整性.
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏)

- 隔离性(Isolation):Hibernate再讲
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并
发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 - 持久性(Durability):
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数
据库故障不应该对其有任何影响
Comments | NOTHING