`
阅读更多

  每一个线程对象创建好以后,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只能通过ThreadLocalset 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   行一级加锁  可以阻止updatedelete

TRANSACTION_SERIALIZABLE      表一级加锁  可以阻止insertupdatedelete

 

 

  备份数据库提高效率策略:

   1) 手动控制事务的大小,节约了db服务器的内存

      减少了回滚带来损失

   2) 事务结束时写日志,减少了查找失败事务的时间

   3) 删除备份数据库表里的约束,减少数据进入时验证的时间

      降低数据库服务器维护索引的资源

   4) 降低数据库的隔离级别,设置到read uncommited

   5) 插入时选择PreparedStatement,执行同构sql,减少编译

      sql命令的时间 

 

 

分享到:
评论

相关推荐

    MSSQL2005driver 驱动 sqljdbc1.2.jar

    《SQL Server 2005驱动程序:sqljdbc1.2.jar详解》 在数据库连接技术中,SQL Server 2005驱动程序扮演着至关重要的角色,它为Java应用程序提供了一个桥梁,使得应用程序能够与SQL Server数据库进行交互。本文将深入...

    sqljdbc 1.2

    标题“sqljdbc 1.2”指的是SQL JDBC驱动程序的一个特定版本,它是Java应用程序用来连接到SQL数据库的一个关键组件。这个版本(1.2)可能是针对特定环境优化或包含了某些新特性和修复的更新。 在Java中,JDBC(Java ...

    sql server 2005 JDBC 1.2驱动

    版本号1.2表示它对应于JDBC 3.0规范,2323.101可能是内部版本号,enu代表英文版。该安装程序将提供所需的jar文件,如sqljdbc4.jar,以便在Java项目中引用。 2. **jdbc连接sql server 2005驱动配置.htm**:这可能是...

    SQL 2005 JDBC驱动_1.2

    SQL 2005 JDBC驱动程序1.2是用于Java应用程序与Microsoft SQL Server 2005数据库进行交互的一种重要组件。JDBC(Java Database Connectivity)是Java编程语言中的一个标准接口,它允许程序员使用Java代码来访问和...

    sqljdbc_1.2 SQL连接java

    标题“sqljdbc_1.2 SQL连接java”指的是使用微软提供的SQL JDBC驱动程序版本1.2来连接Java应用程序与SQL Server数据库。SQL JDBC是Java语言中的一个库,它允许Java开发者通过JDBC(Java Database Connectivity)接口...

    sqljdbc-1.2-fixed.jar

    sqljdbc是数据库驱动支持,java开发需要数据库连接时需导入此包。

    activemq-store-jdbc-1.2.jar.zip

    《ActiveMQ Store JDBC 1.2:连接数据库的高效消息队列存储》 Apache ActiveMQ是业界广泛使用的一款开源消息代理,它支持多种协议,并提供可靠的消息传递服务。在这个特定的压缩包“activemq-store-jdbc-1.2.jar....

    SQLServer2005 Driver V1.2 for JDBC

    连接用例: driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; url = "jdbc:sqlserver://192.168.0.1:1433;DatabaseName=DbName";

    Microsoft SQL Server 2005 JDBC Driver 1.2

    最近使用镜像时发现以前的版本有些问题。因此下载了此版本。 提供官方地址: ...http://download.microsoft.com/download/4/8/8/488E29DA-1E6A-48BC-900B-61FC62E152FD/sqljdbc_1.2.2828.100_cht.tar.gz

    sqljdbc_1.2

    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

    SQL Server 2005 JDBC Driver 1.2 for unix 是一个专为在Unix操作系统上运行的Java应用程序设计的数据库连接驱动程序。JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一套标准API。...

    JDBC_Driver

    **JDBC驱动与SQL Server:连接数据库的关键** Java Database Connectivity(JDBC)是Java平台中用于与各种数据库进行交互的标准接口。它允许Java应用程序通过Java编程语言来访问和处理存储在数据库中的数据。在Java...

    sqljdbcdoc 1.2

    《SQLJDBC驱动程序详解——基于1.2版本》 SQLJDBC驱动程序,全称为SQL Server JDBC Driver,是微软公司开发的一款Java数据库连接(JDBC)驱动,它为Java应用程序提供与Microsoft SQL Server数据库之间的连接能力。...

    log4jdbc-1.2.jar

    java运行依赖jar包

    log4jdbc4-1.2

    log4jdbc jar包,你懂的,关于sql的?,值可先显示

    Microsoft SQL Server 2005 JDBC Driver1.2

    **Microsoft SQL Server 2005 JDBC Driver 1.2** Microsoft SQL Server 2005 JDBC Driver 是一个用于Java应用程序连接到Microsoft SQL Server数据库的Java Database Connectivity (JDBC)驱动程序。它允许开发人员...

    Microsoft SQL Server 2005 JDBC Driver

    压缩包内包含三个不同版本的JDBC驱动jar文件,这可能包括sqljdbc1.2.jar,sqljdbc2.0.jar和sqljdbc4.0.jar等。每个版本可能针对不同的Java环境和SQL Server版本进行优化,选择合适的版本可以确保兼容性和性能。 3....

    sqljdbc.jar

    首先,我们来了解sqljdbc.jar驱动的不同版本:sqljdbc1.1、sqljdbc1.2和sqljdbc2.0。这些版本的迭代主要针对性能优化、兼容性提升以及新特性的引入。例如,sqljdbc1.1是早期的版本,可能只包含基本的JDBC功能;而sql...

Global site tag (gtag.js) - Google Analytics