每一个线程对象创建好以后,jvm会为其分配一块内存空间,
用来存放当前线程对象独占数据,空间以Map形式存放独占
数据,
Map<ThreadLocal,Object>
1) ThreadLocal<Connection> tl=new ThreadLocal<Connection>();
Connection conn=JdbcUtil.getConnection();
tl.set(conn);
public class Thread{
***********;
Map<ThreadLocal,Object> getMap(){
*********
}
}
public class ThreadLocal<T>{
public T get(){
Map m=Thread.currentThread().getMap();
//currentThread()表示当前线程对象
return m.get(this);
}
public void set(T t){
Map m=Thread.currentThread().getMap();
m.put(this,t);
}
}
ThreadLocal<Integer> ta=new ThreadLocal<Integer>()
ta.set(new Integer(3));
save ----> update insert
withdraw----> update insert
transfer ---> update insert
update insert
update() insert()
save---->update() insert();
dao: 1)对业务层屏蔽底层数据库设计的细节
2)o-r mapping
import java.util.Properties;
import java.io.*;
public class JdbcUtil {
private static Properties info=new Properties();
static{
try {
InputStream is=JdbcUtil.class
.getResourceAsStream("/com/kettas/jdbc/cfg/config.properties");
info.load(is);
is.close();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
private static final ThreadLocal<Connection> tl=new ThreadLocal<Connection>();
public static Connection getConnection() throws Exception{
Connection conn=tl.get();
if(conn==null){
Class.forName(info.getProperty("driver"));
conn=DriverManager.getConnection(info.getProperty("url"),
info.getProperty("username"),info.getProperty("password"));
tl.set(conn);
}
return conn;
}
public static void release(ResultSet rs,Statement stm,Connection conn){
if(rs!=null) try{ rs.close();} catch(Exception ee){}
if(stm!=null) try{ stm.close();} catch(Exception ee){}
if(conn!=null) try{ conn.close();} catch(Exception ee){}
}
public static void main(String[] args) throws Exception{
System.out.println(getConnection());
}
public class TestPreparedStatement {
public static void main(String[] args) {
String[] names={"name6","name7","name8","name9","name10"};
String[] passwds={"111","222","333","444","555"};
String[] phones={"111","222","333","444","555"};
String[] emails={"111","222","333","444","555"};
Connection conn=null;
//Statement stm=null;
PreparedStatement pstm=null;
try{
conn=JdbcUtil.getConnection();
String sql="insert into jdbc_users(id,name,passwd,phone,email)"
+" values(jdbc_users_seq.nextval,?,?,?,?)";
pstm=conn.prepareStatement(sql);
for(int i=0;i<names.length;i++){
pstm.setString(1, names[i]);
pstm.setString(2, passwds[i]);
pstm.setString(3, phones[i]);
pstm.setString(4, emails[i]);
pstm.executeUpdate();
}
/*stm=conn.createStatement();
for(int i=0;i<names.length;i++){
String sql=" insert into jdbc_users(id,name,passwd,phone,email) "
+" values(jdbc_users_seq.nextval,'"+names[i]
+"','"+passwds[i]+"','"+phones[i]+"','"+emails[i]
+"')";
System.out.println(sql);
stm.executeUpdate(sql);
System.out.println("====insert ok=====");
}*/
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.release(null, pstm, conn);
}
}
}
1 PreparedStatement
Statement
stm=conn.createStatement();
stm.execute(sql);
String sql="insert into table value(?,?,?);
pstm=conn.prepareStatement(sql);
pstm.set***(int,value);
pstm.execute();
pstm同构sql,sql语句需要外界变量值
stm 异构sql
2 Transaction
sqls,跟具体业务有关
ACID
biz:
try{
conn.setAutoCommit(false);
conn.commit();
}catch(Exception e){
conn.rollback();
}
3 ThreadLocal
1)将Connection做成Thread的属性
通过参数的传递,保证一个线程一个连接
2)Thread t1-----> map(线程的独占的数据)
Map: 主键ThreadLocal,无法直接获得Map对象
操作map只能通过ThreadLocal的set get操作
eg:让Thread对象独占一个Integer对象
Integer id=new Integer(3);
ThreadLocal<Integer> tl=new ThreadLocal<Integer>();
tl.set(id);
1 javabean--->Student
class Student{
private Integer id;
private String name;
private String sex;
private String address;
private int age;
private String studentId;
}
2 create table jdbc_student
( id number(7) primary key,
name varchar2(15) not null,
sex varchar2(3) check(sex in('f','m')),
age number(3),
address varchar2(20),
studentid varchar2(15) not null unique
);
3 class StudentDao{
public void insert(Student s) throws Exception{
Connection conn=null;
try{
conn=JdbcUtil.getConnection();
stm=....
sql="insert into......";
stm.execute();
s.setId(?);
}finally{
JdbcUtil.release(...);
}
}
public void update(Student s) throws Exception{}
Repeatable read 重复读
select *
from s_emp for update;行一级加锁
Serializable //表一级加锁
GetTransactionIsolation 获得当前数据库的隔离级别
Connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);设置隔离级别
Oracle默认级别为TRANSATION_READ_COMMITTED;
数据库的五个级别:
TRANSACTION_NONE
TRANSACTION_READ_UNCOMMTTED
TRANSACTION_READ_COMMTTED 提交后读
TRANSACTION_REPEATABLE_READ 行一级加锁 可以阻止update,delete
TRANSACTION_SERIALIZABLE 表一级加锁 可以阻止insert,update,delete
备份数据库提高效率策略:
1) 手动控制事务的大小,节约了db服务器的内存
减少了回滚带来损失
2) 事务结束时写日志,减少了查找失败事务的时间
3) 删除备份数据库表里的约束,减少数据进入时验证的时间
降低数据库服务器维护索引的资源
4) 降低数据库的隔离级别,设置到read uncommited
5) 插入时选择PreparedStatement,执行同构sql,减少编译
sql命令的时间
分享到:
相关推荐
《SQL Server 2005驱动程序:sqljdbc1.2.jar详解》 在数据库连接技术中,SQL Server 2005驱动程序扮演着至关重要的角色,它为Java应用程序提供了一个桥梁,使得应用程序能够与SQL Server数据库进行交互。本文将深入...
标题“sqljdbc 1.2”指的是SQL JDBC驱动程序的一个特定版本,它是Java应用程序用来连接到SQL数据库的一个关键组件。这个版本(1.2)可能是针对特定环境优化或包含了某些新特性和修复的更新。 在Java中,JDBC(Java ...
版本号1.2表示它对应于JDBC 3.0规范,2323.101可能是内部版本号,enu代表英文版。该安装程序将提供所需的jar文件,如sqljdbc4.jar,以便在Java项目中引用。 2. **jdbc连接sql server 2005驱动配置.htm**:这可能是...
SQL 2005 JDBC驱动程序1.2是用于Java应用程序与Microsoft SQL Server 2005数据库进行交互的一种重要组件。JDBC(Java Database Connectivity)是Java编程语言中的一个标准接口,它允许程序员使用Java代码来访问和...
标题“sqljdbc_1.2 SQL连接java”指的是使用微软提供的SQL JDBC驱动程序版本1.2来连接Java应用程序与SQL Server数据库。SQL JDBC是Java语言中的一个库,它允许Java开发者通过JDBC(Java Database Connectivity)接口...
sqljdbc是数据库驱动支持,java开发需要数据库连接时需导入此包。
《ActiveMQ Store JDBC 1.2:连接数据库的高效消息队列存储》 Apache ActiveMQ是业界广泛使用的一款开源消息代理,它支持多种协议,并提供可靠的消息传递服务。在这个特定的压缩包“activemq-store-jdbc-1.2.jar....
连接用例: driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; url = "jdbc:sqlserver://192.168.0.1:1433;DatabaseName=DbName";
最近使用镜像时发现以前的版本有些问题。因此下载了此版本。 提供官方地址: ...http://download.microsoft.com/download/4/8/8/488E29DA-1E6A-48BC-900B-61FC62E152FD/sqljdbc_1.2.2828.100_cht.tar.gz
sqljdbc_1.2+samples sqljdbc_1.2+samples sqljdbc_1.2+samples sqljdbc_1.2+samples sqljdbc_1.2+samples sqljdbc_1.2+samples
SQL Server 2005 JDBC Driver 1.2 for unix 是一个专为在Unix操作系统上运行的Java应用程序设计的数据库连接驱动程序。JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一套标准API。...
**JDBC驱动与SQL Server:连接数据库的关键** Java Database Connectivity(JDBC)是Java平台中用于与各种数据库进行交互的标准接口。它允许Java应用程序通过Java编程语言来访问和处理存储在数据库中的数据。在Java...
《SQLJDBC驱动程序详解——基于1.2版本》 SQLJDBC驱动程序,全称为SQL Server JDBC Driver,是微软公司开发的一款Java数据库连接(JDBC)驱动,它为Java应用程序提供与Microsoft SQL Server数据库之间的连接能力。...
java运行依赖jar包
log4jdbc jar包,你懂的,关于sql的?,值可先显示
**Microsoft SQL Server 2005 JDBC Driver 1.2** Microsoft SQL Server 2005 JDBC Driver 是一个用于Java应用程序连接到Microsoft SQL Server数据库的Java Database Connectivity (JDBC)驱动程序。它允许开发人员...
压缩包内包含三个不同版本的JDBC驱动jar文件,这可能包括sqljdbc1.2.jar,sqljdbc2.0.jar和sqljdbc4.0.jar等。每个版本可能针对不同的Java环境和SQL Server版本进行优化,选择合适的版本可以确保兼容性和性能。 3....
首先,我们来了解sqljdbc.jar驱动的不同版本:sqljdbc1.1、sqljdbc1.2和sqljdbc2.0。这些版本的迭代主要针对性能优化、兼容性提升以及新特性的引入。例如,sqljdbc1.1是早期的版本,可能只包含基本的JDBC功能;而sql...