第一次写的博客,关于jdbcDBUtil的那些事
2014-03-24 19:57
274 查看
一、连接到数据库
public class ConnUtils { //这个类是静态工厂方法
private static Connection conn;
static {
try {
Class.forName("com.mysql.jdbc.Driver");//关于这句话,在jdbc4.0以后不加这句话也可以运行,连接到数据库,
//由于连接数据库的jar包的版本不一样,如果jdbc4.0 Driver必须包括META-INF/services/java.sql.Driver文件。
//该文件里面必须包括java.sql.Driver
//的JDBC驱动程序实现的名称 该文件自动帮用户加载
String url = "jdbc:mysql:///db909?characterEncoding=UTF8";
conn = DriverManager.getConnection(url, "root", "root");
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public static Connection getCon() {//这个方法就是静态工厂方法 和单例模式相似 不过单例类是生产自己 而生产工厂是生产别的
return conn;
}
以下代码完全可以产生两条语句
sun.jdbc.odbc.JdbcOdbcDriver@10ef90c 是sun公司自动加载的
com.mysql.jdbc.Driver@1ded0fd 是在jar包中的META-INF/services/java.sql.Driver文件 加载实现的
public static void main(String[] args){
Enumeration<Driver> en = DriverManager.getDrivers();
while(en.hasMoreElements()){
Driver dd = en.nextElement();
System.err.println(dd);
}
}
当以上的两块代码都写的话就只会产生两条语句,因为如果已经注册了的话DriverManager.registerDriver里面已经做出了判断了,就不会再注册了 就相当于一个Set列表不能重复的存放东西
二、连接池
在Servlet是单例的 每一次刷新页面,Servlet所发出的请求都只是一个不会变
1)事务的特性:
A、原子性 组成事务的处理语句形成了一个逻辑单元,不能只执行其中的一个部分
B、一致性 在事务处理执行之前,数据库是一致的(数据库数据完整性约束)
C、隔离性 一个事务处理对另一个事务处理的影响
D、持续性 事务处理的效果能够被永久保存下来
一个事务只会有一个结果:要么成功,要么失败
2)对于多个线程的数据库的操作,a 请求一个连接getCon() -->
b 返回一个连接 -->
c 设置事务的开始 con.setAutoCommit(false); -->
d 执行保存insert(xxx)-->
e sleep(4000); 使主线程休息 -->
f 启动第二个线程 --->
g获取连接 -->
h 设置事务的开始setAutoCommit(false); -->
i 写入数据(tom)-->
j提交数据con.commit()-->
k 关闭连接
========对于此操作会使Connection里面的数据一起提交到数据库
*我们的程序不会只有一个连接 会有多个 所以 在获取到连接的时候应该把连接用完了 还回去 以便于下个连接的顺利进行
public class ConnUtils { //这个类是静态工厂方法
private static Connection conn;
static {
try {
Class.forName("com.mysql.jdbc.Driver");//关于这句话,在jdbc4.0以后不加这句话也可以运行,连接到数据库,
//由于连接数据库的jar包的版本不一样,如果jdbc4.0 Driver必须包括META-INF/services/java.sql.Driver文件。
//该文件里面必须包括java.sql.Driver
//的JDBC驱动程序实现的名称 该文件自动帮用户加载
String url = "jdbc:mysql:///db909?characterEncoding=UTF8";
conn = DriverManager.getConnection(url, "root", "root");
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public static Connection getCon() {//这个方法就是静态工厂方法 和单例模式相似 不过单例类是生产自己 而生产工厂是生产别的
return conn;
}
以下代码完全可以产生两条语句
sun.jdbc.odbc.JdbcOdbcDriver@10ef90c 是sun公司自动加载的
com.mysql.jdbc.Driver@1ded0fd 是在jar包中的META-INF/services/java.sql.Driver文件 加载实现的
public static void main(String[] args){
Enumeration<Driver> en = DriverManager.getDrivers();
while(en.hasMoreElements()){
Driver dd = en.nextElement();
System.err.println(dd);
}
}
当以上的两块代码都写的话就只会产生两条语句,因为如果已经注册了的话DriverManager.registerDriver里面已经做出了判断了,就不会再注册了 就相当于一个Set列表不能重复的存放东西
二、连接池
在Servlet是单例的 每一次刷新页面,Servlet所发出的请求都只是一个不会变
1)事务的特性:
A、原子性 组成事务的处理语句形成了一个逻辑单元,不能只执行其中的一个部分
B、一致性 在事务处理执行之前,数据库是一致的(数据库数据完整性约束)
C、隔离性 一个事务处理对另一个事务处理的影响
D、持续性 事务处理的效果能够被永久保存下来
一个事务只会有一个结果:要么成功,要么失败
2)对于多个线程的数据库的操作,a 请求一个连接getCon() -->
b 返回一个连接 -->
c 设置事务的开始 con.setAutoCommit(false); -->
d 执行保存insert(xxx)-->
e sleep(4000); 使主线程休息 -->
f 启动第二个线程 --->
g获取连接 -->
h 设置事务的开始setAutoCommit(false); -->
i 写入数据(tom)-->
j提交数据con.commit()-->
k 关闭连接
========对于此操作会使Connection里面的数据一起提交到数据库
*我们的程序不会只有一个连接 会有多个 所以 在获取到连接的时候应该把连接用完了 还回去 以便于下个连接的顺利进行
相关文章推荐
- 第一次来CSDN写自己的博客,关于面试的题目,我差不多面试一个月了
- 我的第一次博客文章,关于看完慕课Java视频三特性:封装、多态、继承
- 关于idea第一次如何载入JDBC驱动
- 第一次写博客,就写点关于我的专业方面的知识吧!
- 关于个人博客转移的那些事
- 关于Datatables editor 的使用细节以及数据格式(第一次博客,希望对有需要的人有帮助)
- 第一次写博客 写点 关于SqlServer全文索引和存储过程的个人思想
- 关于Android WebView显示html网页图片无法自适应(PS第一次写博客)
- 关于求最大公约数的几种方法(第一次写博客,写的不好,大牛们请准备好板砖)
- 第一次写博客,关于AJAX的异步交互
- 关于博客的选择
- 关于新闻博客类页面正文抽取
- 关于JDBC
- 新手菜鸟第一次写博客
- 关于MySQL优化的那些事
- 关于GUN C析构函数的那些事
- 关于tomcat 报错 找不到oracle.jdbc.driver.OracleDriver 的解决办法
- 关于源代码教育讲师博客统一管理说明
- 关于博客更新的一些问题与思考
- 关于JDBC事务处理