浅谈JDBC的概念理解与学习
来源:优易学  2011-11-29 15:34:40   【优易学:中国教育考试门户网】   资料下载   IT书店

 JDBC的概念:doMaim对象(javaBean实体)
  UserDao(DataAccessObject)
  工厂模式,Factory消除UserDaoTest业务类对具体实现UserDaoJdbc类的依赖
  读配置文件,通过工厂读配置文件来加载信息,具体实现类使用工厂来获取实现接口类的对象
  JDBC的概念:工厂一般使用单例模式
  工厂-->生产产品(Dao这个产品)
  类加载器,不光可以load.class,还可以load其他的文件
  事务概念与处理
  1.原子性:不能拆分,组成事事务处理的语句形成一个逻辑处理单元,不能只执行其中的一部分
  2.一致性:事务做完之后,保定数据的完整性约束
  3.隔离性:一个事务处理对另一个事务处理的影响
  4.持续性:事务处理的结果能被永久保存下来
  步骤:打开事务connection.setAutoCommit(false);
  提交事务:connection.commit();
  回滚事务:connection.rollback();
  jdbc缺省是自动提交的,客户端连接也是自动提交的,要想打开事务,要把自动提交关掉
  保存点:savePoint
  Savepointsp=null
  sp=conn.setSavepoint();
  conn.rollback(sp);
  -----------------------------------
  JDBC的概念:跨多个数据库的事务JTA
  JTA容器weblogic,websphere
  分成两阶段提交。
  用到JNDI服务器
  javax.transaction.UserTransactiontx=
  (UserTransaction)ctx.lookup("jndiName");
  tx.begin();
  //connection1connection2(可能来自不同的数据库)
  tx.commit();//tx.rollback();
  ---------------------------------
  事务的隔离级别:
  connction.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
  隔离级别
  读未提交(Readuncommitted)可能出现脏读,不可重复读,幻读
  读已提交(Readcommitted)可能出现不可重复读,幻读
  可重复读(Repeatableread)可能出现幻读(幻影数据,执行插入一条数据,在另一个客户端有可能看到)
  可串行化(Serializable)
  隔离级别各个数据库的实现是不一样的。
  --------------------------------------------------
  关于存储过程(两层架构的时候用的很多)
  三层架构的系统很少使用了。略过不看了先。
  ---------------------------------------------------
  其他几个有用的API
  jdbc3.0规范提供的方法
  插一条记录,它能把主键返回来
  PreparedStatement.getGeneratedKeys();
  PreparedStatementps=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
  ps.executeUpdate();
  ResultSetrs=st.getGeneratedKeys();
  rs.getInt(1);
  批量处理:可以大幅提升大量增删改的速度(并非绝对),与具体数据库有关,也不一定能提高性能
  PreparedStatement.addBatch();
  PreparedStatement.executeBatch();
  -------------------------------------------------------------
  可滚动结果集与分页特性
  Statementst=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  ResultSet.TYPE_SCROLL_SENSITIVE--对数据库敏感的,就是说,数据库中记录发生了变化,结果集会觉察到(但某些数据库不一定遵循这一规范,mysql就不遵循)
  ResultSet.CONCUR_UPDATABLE--可更新的,就是说,改变结果集中的内容可以影响到数据库里
  ResultSet.CONCUR_READ_ONLY--只读的,可滚动的结果集
  Statementst=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  ResultSetrs=st.executeQuery(sql);
  rs.beforeFirst();
  rs.afterLast();
  rs.first();
  rs.isFirst();
  rs.last();
  rs.isLast();
  rs.absolute(9);
  rs.moveToInsertRow();
  conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  rs.updateString("colname","newvalue");
  rs.updateRow();

  mysql分页例如:
  selectid,name,money,birthdayfromuserlimit150,10;
  从user表中第150条记录开始,取10条记录
  ---------------------------------------------------------
  jdbc元数据信息数据库元数据信息、参数元数据信息
  DatabaseMetaDatameta=connection.getMetaData();
  通过DatabaseMetaData可以获得数据库相关的信息,如:
  数据库版本,数据库名,数据库厂商信息,是否支持事务,是否支持某种事务隔离级别,
  是否支持滚动结果集等。
  ParameterMetaDatapmd=preparedStatement.getParameterMetaData();
  通过ParameterMetaData可以获得参数信息.
  ParameterMetaDatapmd=ps.getParameterMetaData();
  intcount=pmd.getParameterCount();
  System.out.println("count="+count);
  for(inti=1;i<=count;i++)
  {
  ps.setObject(i,params[i-1]);
  }
  ResultSetrs=ps.executeQuery();
  --------------------------------------------------
  dataSource代理模式:
  组合优先于继承
  拦截Connection.close()方法
  动态代理
  调用处理器
  ----------------------------------------------------
  数据源和连接池
  DataSource用来取代DriverManger来获取Connection
  通过DataSource获得Connection速度很快
  通过DataSource获得的Connection都是已经被包裹过的(不是驱动原来的连接),
  他的close方法已经被修改
  一般DataSource内部会用一个连接池来缓存Connection,这样可以大幅度提高
  数据库的访问速度;
  连接池可以理解成一个能够存放Connection的Connection
  我们的程序只和DataSource打交道,不会直接访问连接池。
  ------------------------------------------
  DBCP的应用
  1.加载三个.jar
  2.写dbcpconfig.properties配置文件
  3.创建DataSource数据源
  使用DBCP必须用的三个包
  commons-dbcp-1.2.2\commons-dbcp-1.2.1.jar,
  spring-framework-2.5.6\lib\jakarta-commons\commons-pool.jar,commons-collection-3.1.jar
  dbcpconfig.properties
  driverClassName=com.mysql.jdbc.Driver
  url=jdbc:mysql://localhost:3306/jdbc
  username=root
  password=root
  #初始化连接
  initialSize=10
  #最大连接数量
  maxActive=50
  #最大空闲连接
  maxIdle=20
  #最小空闲连接
  minIdle=5
  #超时等待时间以毫秒为单位
  maxWait=60000
  #JDBC驱动建立连接时附带的连接属性格式必须为这样:属性名=property
  #注注意user与password两个属性会被明确地传递。因此这里不需要包含他们
  connectionProperties=useUnicode=true;characterEncoding=utf-8
  #指定由连接池所创建的连接的自动提交auto-commit状态
  defaultAutoCommit=true
  #driverdefault指定由连接池所创建的连接的只读read-only状态
  #如果没有设置该值,则setReadOnly方法不被调用。
  defaultReadOnly=
  #driverdefault指定由连接池所创建的连接的事务级别TransactionIsolation
  #可用值为下列之一:这依赖于数据库
  #NONE,READ_UNCOMMITED,READ_COMMITTED
  defaultTransactionIsolation=READ_COMMITTED

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训