JTA ?JTSQJava 事务 API ?Java 事务服务Q可以跨多个组件和数据库用事务。在应用E序使用 JTA 控制事务操作Ӟ需要从 JNDI 上下文中获取 UserTranscation 和数据源?br />
UserTranscation ut = (UserTranscation) ctx.lookup("UserTranscation");
采用 Hibernate 内置?current session 和上下文理?br />
<property name="current_session_context_class">thread</property>
...
sessionFactory.getCurrentSession().beginTranscation();
提供了跨 Session 的事务管理能力?br />
使用 SessionFactory.getCurrentSession() Ҏ(gu)化事务上下文的传播,卛_事务l定 Session?/p>
2、ƈ发控?/strong>
如果事务都是串行执行Q则许多资源处于空闲状态。ؓ了充分利用资源,发挥数据库共享资源的优势Q必d许多个事务ƈ发地执行?/p>
在单处理机系l中Q事务ƈ发执行实际上是这些ƈ行事务轮交叉执行,即交叉ƈ发方式,q不是真正的q行执行。在多处理机pȝ中,每个处理行一个事务,实现事务真正意义上的q存q行Q即同时q发方式?/p>
当多个用户ƈ发地存取数据库时Q就会生多个事务同时存取同一数据的情c所以,必须实现一个控制系l,使一个事务所做的修改不会对其他事务所做的修改产生负面影响Q这是q发控制?/p>
2-1、封?/p>
对ƈ发操作进行的正确调度Q防止ƈ发操作破坏了事务的隔L。采用封锁技术,事务 T 可以向系l发求,Ҏ(gu)个对象例如表、记录加锁,在事?T 释放锁之前,其他事务不能更新q些数据对象?br />
基本的封锁有Q?
排他锁(Exclusive LocksQX 锁)Q写锁或者独占锁?br />
׃n锁(Share LocksQS 锁)Q读锁。允许和其他事务一赯取数据对象DQ但不能对D 做Q何修攏V?/p>
2-2、事务隔?/p>
使用锁技术,事务对申L(fng)资源加锁Q但是会影响数据库性能。根据数据对象封锁的E度Q可以分成多U不同的事务隔离U别?/p>
数据q发执行Ӟ产生不一致的现象Q?/p>
丢失更新QLost UpdateQ?br />
两个事务d同一数据q修改,然后提交修改QT2 提交的结果破坏了 T1 提交的结果,D T1 的修改丢失?/p>
?不可重复?br />
事务T1 d数据后,事务T2 执行了同一数据的跟新操作,使得事务 T1 无法再现前一ơ读取的l果?br />
事务1 d某一数据后,事务2 对该数据作了修改Q事? 再次dӞ得到数据和前一ơ不一致?br />
?事务1 d某一些记录后Q事? 删除了同一数据源的部分数据Q事? 再次dӞ发现某些记录丢失?br />
?事务1 d某一些记录后Q事? 插入了同一数据源的新数据,事务1 再次dӞ发现某些记录增加?/p>
??#8220;?#8221;数据
事务T1 修改某一数据Qƈ其写回物理数据库。事务T2 d同一数据后,事务T1 ׃某种原因被撤销Q数据库已l修改的数据恢复原|D事务T2 保持的数据和数据库中的数据生了不一致?/p>
ANSI SQL-99 标准定义了下列隔ȝ别:
?未提交读QRead UncommittedQ:隔离事务的最低别,只能保证不会d到物理上损坏的数据。H:1Q允生:①②?/p>
?已提交读QRead CommittedQ:常见数据库引擎的默认U别Q保证一个事务不会读取到另一个事务已修改但未提交的数据。H:2Q允生:①②
?可重复读QRepeatable ReadQ:保证一个事务不能更新已l由另一个事务读取但是未提交的数据。相当于应用中的已提交读和乐观ƈ发控制。H:4Q允生:?/p>
?可串行化QSerializableQ:隔离事务的最高别,事务之间完全隔离。系l开销最大。H:8Q允生:
在数据库中,可以手工讄事务的隔ȝ别?br />
Hibernate 在配|文件中声明事务的隔ȝ别,Hibenate 获取数据库连接后Q将Ҏ(gu)隔离U别自动讄数据库连接ؓ指定的事务隔ȝ别?br />
<property name="connection.isolation">8</property>
2-3、ƈ发控制类?/p>
Ҏ(gu)使用的锁定策略和隔离{Q可以把事务的ƈ发控制分ZU:
?(zhn)观q发控制
用户使用旉定数据。主要应用于数据争用Ȁ烈的环境中,以及发生q发冲突时用锁保护数据的成本低于回滚事务成本的环境中?/p>
Hibernate 的?zhn)观锁定不在内存中锁定数据Q由底层数据库负责完成?/p>
?乐观q发控制
用户d数据时不锁定数据。当一个用h新数据时Q系l将q行查该用户d数据后其他用h否更改了该数据,是则产生一个错误,一般情况下Q收到错误信息的用户回滚事务ƈ重新开始。主要用h据争用不大,且偶回滚事务的成本低于d数据旉定数据的成本的环境中?/p>
Hibernate 中用元?version ?timestamp 实现乐观q发控制模式的版本控Ӟq提供多U编E方式。版本是数据库表中的一个字D,可以是一个递增的整敎ͼ也可以是一个时间戳Q它们对?Java 持久化类的一个属性。事务提交成功后QHibernate 自动修改版本受如果另外一个事务同时访问同一数据Q若发现提交前的版本号和事前载入的版本号有出入,则认为发生了冲突Q事务停止执行,撤销操作Qƈ抛出异常。应用程序必L捉该异常q做Z定的处理?/p>
⒈应用程序别的版本控制
⒉长生命周期会话的自动化版本控制
⒊托对象的自动化版本控?br />
⒋定制自动化版本控制
3、Hibernate ~存
Hibernate 提供两~存架构Q第一U缓存是 Session 内的~存Q第二~存是一个可插拔的缓存,能够借助W三方的lg实现。如果应用程序中l常使用同样的条件查询数据,q可以用查询缓存来提高查询效率?/p>
针对~存的范_可以?Hibernate 持久层缓存分Z个层ơ:
?事务U缓?br />
~存只能被当前事务访问。缓存的生命周期以来与事务的生命周期。事务缓存由 Session 实现。一?Session 的缓存的内容只有在本 Session 实例范围内可用?/p>
?应用U缓?/p>
~存在某个应用范围内被所有事务共享。缓存的生命周期依赖于应用程序的生命周期。应用~存?SessionFactory 实现QSession 实例由其创徏Qƈ׃n其缓存?/p>
?分布式缓?/p>
集群环境中,~存被一?JVM 或多?JVM 的进E共享。分布式~存由多个应用的缓存实例组成,~存中的数据被复制到集群环境中的每个 JVM 节点QJVM 间通过q程通信来保证缓存中数据的一致性?/p>
3-1、缓存查询结?/p>
l常使用同样的条件查询数据,则可使用查询~存。查询缓存需要和二~存联合使用Q在二~存中,可以专门为查询缓存开辟一个命名缓存区域。查询缓存启动后创Z个缓存区域,org.hibernate.cache.StandardQueryCache 实现保存查询l果集;org.hibernate.cache.UpdateTimestampsCache 实现保存最q更新的查询表的旉戟?/p>
<property name="cache.use_query_cache">true</propery>
//使用查询~存
query.setCacheable(true);
//l查询缓存指定特定的命名~存区域
query.setCacheRegion("queryCache");
//如果其他q程更新了结果集Q强行刷新缓冲区?br />
query.setCacheMode(CacheMode.REFRESH);
//h某个或全部的~存
SessionFactory.evictQueries() Ҏ(gu)
4、高U特?/strong>
4-1、数据库q接?ConnectionProvider
J2SE 环境中用徏议?/p>
4-2、用数据源
Hibernate 中,DatasourceConnectionProvider 实现?ConnectionProvider 接口q封装了数据源的获取Ҏ(gu)Q充当了 Hibernate 和数据源间的适配器?/p>
J2EE 环境中用徏议?/p>
4-3、过滤数?br />
把公q数据qo条g提取出来。从 Hibernate 3.0 开始,可以利用 Hibernate Filter Ҏ(gu)个类或集合附加预先定义的qo条gQ在查询时过滤指定条件的数据。该qo器是全局有效的,使用时候,q可以指定特定参数?/p>
4-4、批量处?br />
扚w处理引发异常的根源在于缓存中保存了过多的持久化实例而耗尽内存?/p>
?应用E序U别的批处理
指定 Hibernate 处理 SQL 语句Ӟ必须U篏到指定数量后再向数据库提交操作?br />
<property name="jdbc.batch_size">20</property>
?无状?SessionQStatelessSessionQ?/p>
StatelessSession 接口没有持久化上下文Q也不负责持久化实例的生命周期,没有一U缓存,操作也不会媄响到二和查询缓存?/p>
?使用 DML 风格?HQL 语句l过内存直接q行数据处理
"delete Product p where p.id > :id"
4-4、gq加?/p>
讄延迟加蝲的属性和集合只能在该实例依附?Session 范围内被讉KQ会话关闭后Q实例从持久态{为托态,再次讉K该实例的一些属性时候,有可能会抛出 LazyInitializationException 异常?/p>
?属性gq加载(大对象)
?持久化类延迟加蝲
?集合延迟加蝲
4-5、数据抓取策略(Fetching strategiesQ?/p>
可以?Hibernate 中设定相应的数据抓取{略Q减系l生的数据库查询操作,优化pȝ性能?/p>
?Hibernate 中,延迟QlazyQ定义了一U契U,用来表示托管状态实例中那些数据是有效的Q而抓取(fetchQ是用来调整 Hibernate 性能的?/p>
4-5、监控性能
org.hibernate.stat 包提供的工具cR?/p>
5、附?/strong>
5-1、XML 元数?br />
18.2. XML映射元数?- Hibernate reference 3.2.0 ga 正式版中文参考手?br />
18.3. 操作XML数据 Q通过dom4j会话d和更新应用程序中的XML文档Q?/a>
5-2、开源工L(fng)
CownewStudio 是一个基?Eclipse ?Hibernate 正向建模辅助工具。通过它用戯以图形化的方式徏立对象模型,然后Ҏ(gu)模型生成持久化类、映文件和数据库表?/p>
JDBMonitor。模拟一?JDBC 驱动来代替真正的 JDBC 驱动Q截取应用程序对数据库的操作Qƈ以合适的方式记录下来Q提供性能分析的来源和依据?/p>
]]>'Hibernate 完全手册' MW记Q四Q?查询语言 http://www.tkk7.com/kiant/articles/265072.html黄小?/dc:creator>黄小?/author>Sat, 11 Apr 2009 18:11:00 GMT http://www.tkk7.com/kiant/articles/265072.html http://www.tkk7.com/kiant/comments/265072.html http://www.tkk7.com/kiant/articles/265072.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/265072.html http://www.tkk7.com/kiant/services/trackbacks/265072.html
1、查询返?/strong>
?查询语句可以q回多个对象或属性,存放?Object[] 队列中?/p>
?查询结果的所有属性都存放在一?List 对象中:
select new list(xxx.xxxx,xx.xx) .....
q里?new list 是实例化 java.util.ArraryList 对象?/p>
?查询结果封装成一个安全的 Java 对象
select new EncCustomer(xx.xxx, xx.xx)....
?查询结果封装成 Map 对象Q利用别名)
select new map(xx.xxx as aaaa, xx.xxxx as bb) .....
.....
Map obj = (Map)list.get(i);
obj.get("aaaa");
obj.get("bb");
?distinct 删除重复数据
2、参数绑定机?/strong>
?
q.setParameter("name", name);
Hibernate 能根据参数值的 Java cd推断出对应的映射cdQ对于日期类型,?java.util.Date cdQ会对应多种映射cdQ这时候需要显C指定?br />
q.setParameter("date", Hibernate.DATE);
?
q.setProperties(obj);
Ҏ(gu) obj 的属性名对应 HQL 语义中定义的命名参数q行查询?/p>
3、HQL 子查?br />
用于子查询的集合函数 size()、minIndex()、maxIndex()、minElement()、maxElement() ?elements()?/p>
4、集合过?/strong>
对于某持久化对象?items 属性内元素性能优化Q过滤集合内数据、排序等Q?/p>
Session.createFilter(object, string);
q回?Query cd
参数 object 是持久化对象的集合?br />
参数 string ?HQL 的过滤条?/p>
//qo prod 的集?items
List items = session.createFilter(prod.getItems(),
"this.unitCost<100 order by this.ListPrice desc").List();
//l定qo的结?itmes 到属?br />
prod.setItems(items);
5、条件查?QBC
5-1、Restrictions qol果?/p>
5-2、结果集排序
.addOrder(Order.asc("name"))
.addOrder(Order.desc("category"))
.list();
5-3、createCriteria() 兌查询
List list = sess.createCriteria(Product.class)
.add(Restrictions.like("name", "%o%"))
.createCriteria("items")
.add(Restrictions.ge("listPrice", new Float(100.0))
.list();
//q回一个新?Criteria 实例Q该实例引用 items 集合中的元素Qƈ且ؓ该集合元素增加了元素属?listPrice 大于{于 100.0 的过滤条件?/p>
或者用别?br />
.createAlias("items", "ite")
.add(Restrictions.ge("ite.listPrice", new Float(100.0))
5-4、设|加载策?br />
.setFetchMode("items", FetchMode.EAGER)
.list();
DEFAULTQ默?br />
EAGER/JOINQ强制立卛_?br />
LAZY/SELECTQ强制gq加?/p>
5-5、聚合和分组 org.hibernate.criterion.Projections
.setProjection(Projections.rowCount())
.uniqueResult()Q?/p>
.add(Projections.groupProperty("imagePath"))
.list();
5-6、离U与子查?/p>
ȝ查询方式?Session 范围之外定义一个离U查询,然后使用L?Session 执行查询。该Ҏ(gu)主要通过 org.hibernate.criterion.DetachedCriteria cd现?/p>
6、Native SQL 查询
应用E序中用与数据库相关的 SQL 查询语句
6-1、Native SQL 应用E序接口
主要使用 SQLQuery.addEntity() 实现q回l果为实体的查询QSQLQuery.addScalar() 则返回标量倹{?br />
SQLQuery.addJoin(String alias, String path) 用于映对象所兌的实体或集合对应h?/p>
6-2、命名查?br />
sess.getNamedQuery(string);
?xml 文g中?<! [CDATA []] > 元表C其中的内容是区分其他元素定义的U文本。例如: < W号?/p>
6-3、用存储过E?br />
Hibernate 3.0 以上的版本已l支持和利用存储q程来进行查询,存储q程q回的参数是标量与实体,q里可以利用q回cd的定义将存储q程q回的参数映到对象的属性中?/p>
<sql-query name="productQuery" callable="true">
<return alias="prod" class="petstore.domain.Product">
<return-property name="productId" column="PRODUCTID" />
<return-property name="description" column="DESCRIPTION" />
<return-property name="name" column="NAME" />
</return>
{? = call getProduct(?)}
</sql-query>
List list = query.list();
]]>
'Hibernate 完全手册' MW记Q三Q?映射、操作对?/title> http://www.tkk7.com/kiant/articles/265049.html黄小?/dc:creator>黄小?/author>Sat, 11 Apr 2009 12:46:00 GMT http://www.tkk7.com/kiant/articles/265049.html http://www.tkk7.com/kiant/comments/265049.html http://www.tkk7.com/kiant/articles/265049.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/265049.html http://www.tkk7.com/kiant/services/trackbacks/265049.html
1、对象关pL?/strong>
1-1、单向多对一兌
产品和分cȝ关系Q多个不同品属于同一U分cR?br />
private Category categoryQ?br />
<many-to-one name="category" column="categoryId" not-null="true" />
1-2、一对多映射
private Set products = new HashSet();
<set name="products" <!--Category 中集合属性名UCؓ products-->
table="product" <!--集合属性对应表的名UCؓ product-->
schema="test" <!--表的 schema 名称?test-->
lazy="true" <!--此集合采用g时加载策?->
inverse="true" <!--由关联属性的另一方作为关联的L?->
cascade="delete" <!--采用U联删除Q当 Category 被删除时兌的此集合内容也将被删?->
sort="natural" <!--自然排序集合内容-->
order-by="productId asc" <!--?productId 字段升序排列集合内容-->
>
<key column="category_fk" />
<one-to-many class="petstore.domain.Product" />
</set>
1-3、承映?br />
2、Hibernate 操作对象
2-1、对象的三种状?/p>
?瞬时态(TransientQ?-VOQValue OjbectQ?br />
对象实例产生到被 JVM 垃圾回收为止q不?Hibernate 框架理?/p>
?持久态(PersistentQ?-POQPersistent OjbectQ?br />
对象实例?Hibernate 框架理Q该对象可能是刚被保存的Q或刚从数据库中被加载的。Hibernate 会检处于持久态的对象M改动Q在当前操作单元执行完毕对象与数据库同步,卛_对象的属性保存到数据库映对应的字段中。简单点说就是该实体对象?session 发生关系Q而且处于 session 的有效期内?br />
?托管态(DetachedQ?-VOQValue OjbectQ?br />
与持久对象关联的 Session 被关闭后Q对象就变ؓ托管的,可l被修改。托对象如果重新关联到某个新的 Session 上,会再ơ变为持久的Q同时改动也会被持久化到数据库。这个期间的转变q程可以看作是应用程序事务,即中间会l用h考时间的长时间运行的操作单元?br />
处于托管态对象具有与数据库表记录间的联系Q持久化标识QidentifierQ?/p>
2-2、对象操作的应用E序接口
?修改对象
对于已经持久化的对象Q不需要调用某个特定的Ҏ(gu)可以实CҎ(gu)久化Q因?Hibernate 会自动调?flush() Ҏ(gu)保证与数据库的同步?/p>
对于处于托管状态的实例QHibernate 通过提供 Session.update() ?Session.merge() Ҏ(gu)Q重新关联托实例。但是需要注意的是:如果h持久化标识(identifierQ的对象之前已经被另一个会话连接(secondSessionQ装载了Q应用程序关联操作会发生异常?/p>
使用 merge() Ҏ(gu)Ӟ用户不必考虑 session 的状态,可随时将修改保存到数据库中。例如:Session 中存在相同标识的持久化实例时QHibernate 便会Ҏ(gu)用户l出的对象状态覆盖原有的持久化实例的状态?/p>
另外QHibernate q提供了 saveOrUpdate()Ҏ(gu)Q它卛_分配新持久化标识QidentifierQ,保存瞬时QtransientQ对象,又可更新/重新兌托管的(identifierQ实例?/p>
?删除对象
通过 HQL 语句Q调用重载的 delete()Q可以一ơ删除多个对象?br />
session.delete("from Customer as c where c.customerId <3");
?查询对象
已知对象表示W值查?br />
对象标识W未知查?HQL
Ҏ(gu)某些特定条g查询 QBCQQuery By Criteria
按详例查?QBEQQuery By Example
调用数据库查?native SQL
查询条g参数 Q?查询条g参数索引Q由 0 开始?br />
查询条g实名 Qname
外置命名查询
在映文件定义查询语句,程序与查询语句分离Q?br />
<query name="CategoryById"
<! [CDATA[
from Category c where c.categoryId>? ]]>
</query>
E序调用Q?br />
Query q = sess.getNamedQuery("CategoryById");
q.setLong(0, name);
List cats = q.List();
?Query 提供?iterate() Ҏ(gu)遍历查询l果Q如果查询的l果?session 或二U缓存(second-level cacheQ中Q那么?iterate() Ҏ(gu)可以得到更好的性能?/p>
如果 JDBC 驱动支持可滚动的 ResuleSetQQuery 接口可以使用 ScrollableResultsQ允怽在查询结果中灉|UdQ需要保持数据库q接和游?cursor 处于抑制打开状态)?/p>
ScrollableResults cates = q.scroll();
cates.first()
cates.scroll(5);
?cascade ?inverse U联操作
inverse
只对 setQone-to-manyQ或 many-to-manyQ有效,对于 many-to-oneQone-to-one 无效
寚w合v整体作用
cascade
对关pL记都有效
寚w合的一个元素v作用Q如果集合ؓI,那么 cascade 不会引发兌操作
作用时机Q在 flush Ӟcommit 会自动执?flushQ,hibernate 会自行判断每?set 是否有变化,Ҏ(gu)变化?set 执行相应?SQLQif (inverse) return。即Qcascade 在前Qinverse 在后?/p>
异常Q?br />
org.hibernate.exception.ConstraintViolationException: could not insert
原因?category_fk 字段U束不能为空Q而在新徏?Product 对象时插入了I|而且兌关系?Caterogy 对象l持Q而被兌?Product 对象不知道自׃哪个 Category 对象兌。说到底是 pro 对象?categoryId gؓI?/p>
]]> 'Hibernate 完全手册' MW记Q二Q?初识、体pR对象标识符、配|、映类?/title> http://www.tkk7.com/kiant/articles/264993.html黄小?/dc:creator>黄小?/author>Sat, 11 Apr 2009 02:45:00 GMT http://www.tkk7.com/kiant/articles/264993.html http://www.tkk7.com/kiant/comments/264993.html http://www.tkk7.com/kiant/articles/264993.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/264993.html http://www.tkk7.com/kiant/services/trackbacks/264993.html 1、?Hibernate 操作数据?/strong>
1-1、?ThreadLocal 控制 Session
应用E序Ҏ(gu)配置文g构徏应用E序q行的环境,建立全局范围内的 SessionFactory 对象。其内部包含?Hibernate q行的全部细节,是?Session 的工厂,它是U程安全的,只能在系l启动时实例化一ơ,pȝq行期间不可修改?/p>
Session 对象?Hibernate 操作数据的核心,数据库的操作、对象生命周期的理、应用事务的划分Q都需要在 Session 对象中完成。Session 对象不是U程安全的,如果试图让多个线E同时用一?Session 对象Q将会生数据乱,造成数据库的数据不一致。而且频繁开?Session 是巨大的pȝ消耗?/p>
Z安全C?Session 对象Q需要应?Java 语言中的U程l定机制--ThreadLocalQ它代表一个线E的U有存取I间Q能够隔dU程环境中的q发机制Q减?Session 对象的创建和销毁次敎ͼ降低pȝ资源费?br />
HibernateSessionFactory
1 public class HibernateSessionFactory {
2
3 private static final ThreadLocal < Session > threadLocal = new ThreadLocal < Session > ();
4
5
6 public static Session getSession() throws HibernateException {
7 Session session = (Session) threadLocal.get();
8
9 if (session == null || ! session.isOpen()) {
10 if (sessionFactory == null ) {
11 rebuildSessionFactory();
12 }
13 session = (sessionFactory != null ) ? sessionFactory.openSession()
14 : null ;
15 threadLocal.set(session);
16 }
17
18 return session;
19 }
20
21 .
22
23 public static void closeSession() throws HibernateException {
24 Session session = (Session) threadLocal.get();
25 threadLocal.set(null );
26
27 if (session != null ) {
28 session.close();
29 }
30 }
31
32
33
34 }
1-2、徏立数据库l构
使用 Hibernate Ӟ设计生成数据库表l构的方式分成两U?/p>
1、手工用 SQL 语句设计数据表结?/p>
2、?Hibernate Ҏ(gu)映射文g自动构徏数据库模?br />
hibernate.cfg.xml:
<property name="hbm2dll.auto">creat</property>
<property name="show_sql">true</property>
log4j.properties
log4j.logger.org.hibernate.tool.hbm2dll=debug
Hibernate 自行理的数据库表结构:
?noneQ不产生M动作?br />
?createQ在应用启动Ӟ自动生成数据库表l构q导入到数据库中?br />
?create-dropQ同 createQ但在应用关闭时Q删除已生成的数据库表结构;此方式常在测试时使用?br />
?updateQ在应用启动Ӟ查持久化cd映射文g的改变,更新数据库表l构Q比如:持久化类d一个属性后QHibernate 能自动添加对应字D到对应的数据库表中?br />
3、?Session 操作数据?br />
Hibernate 能自动管理系l中的持久化cd数据库模式,通过 Session 对象实现对象模型和关pL型的怺操作?br />
Session 提供数据讉K的接口:
?get()Q从数据库获取数据对象,不存在时则返?null?br />
?load()Q从数据库获取数据对象,不存在时则抛出异常?br />
?createQuery()Q根据条件查询数据对象?br />
?save()、update()、delete() {方法?
2、Hibernate 基本lg接口
?ConfigurationQorg.hibernate.cfg.ConfigurationQ?br />
Hibernate 应用的入口,它用配|文件初始化q行环境Q是 SessionFactory 的工厂。通常情况下,一个应用程序中只允许创Z个单例的 Configuration 实例?/p>
?SessionFactoryQorg.hibernate.SessionFactoryQ?br />
是一个线E安全的高速缓存,其中包含了单一数据库和已编译映文件的元数据,在运行环境不可改变。它?Session 的工厂,q能?ConnectionProvider 中获?JDBC q接。它可能持有一个可选的能在q程U别或者集别事务间重用的数据缓存(二~存Q。SessionFactory ?Configuration 中获取,在一个应用范围中Q不允许改变?/p>
?SessionQorg.hibernate.SessionQ?br />
单线E的短生命周期的对象Q是应用E序和持久化存储的一ơ对话。封装了一?JDBC q接Q也?Transaction 的工厂。它保持一个持久化对象的强制缓存(一U缓存)Q用来遍历对象图或者根据标识符查询对象。Session 提供了一pdҎ(gu)Q可以方便地实现对象持久化操作?/p>
?TranscationQorg.hibernate.TranscationQ?br />
可选,单线E、短生命周期的对象,应用E序用它来表CZ批Q务的原子操作。是底层 JDBCQJTA 或?CORBA 事务的抽象。一?Session 在某些情况下可能跨越多个 Transcation 事务?/p>
?ConnectionProviderQorg.hibernate.connection.ConnectionProviderQ?br />
可选,JDBC q接的工厂和q接池,是底?Datasource ?DriverManager 的抽象应用,对应用程序不可见。可扩展实现?/p>
?TranscationFactoryQorg.hibernate.TranscationFactoryQ?br />
可选,事务实例工厂。对应用E序不可见。可扩展实现?/p>
在最集合应用框架中Q应用程序直接?JDBC/JTAQƈ自行完成事务处理?br />
conn = DriverManager.getConnection(xxx);
conn.setAutoCommit(false);
...
conn.commit();
3、Hibernate 生命周期
?Configuration 对象Ҏ(gu)配置文g的设|,d属性配|信息?br />
?Configuration 对象Ҏ(gu)配置信息Q按照映文件、类~存、集合缓存、监听器、事件的序依次dq解析?br />
?通过调用 Configuration 对象构徏 SessionFactory?br />
?调用 SessionFactory 实例获得 Session 对象?br />
?启动事务?br />
?提交事务?br />
?关闭应用QSession ?SessionFactoryQ?
4、Hibernate 中对象的状?/strong>
Z区分持久化类的实例对象,Ҏ(gu)对象和会话的兌状态,可以分ؓ三种情况Q?
?暂态状态。对象刚建立Q还没有使用 Hibernate q行保存。该对象在数据库中没有记录,也不?session ~存中。如果该对象是自动生成主键,则该对象的对象标识符为空?/p>
?持久化对象。对象已l通过 Hibernate q行了持久化Q数据库中已l存在对应的记录。如果该对象是自动生成主键,则该对象的对象标识符已被赋倹{?/p>
?托管对象。该对象是经q?Hibernate 保存q或者从数据库中取出的,但是与之兌?session 已经被关闭。虽然它拥有对象标识W,且数据库中存在对应的记录Q但是已l不再被 Hibernate 理?br />
ps. [转] PO BO VO DTO POJO DAO概念及其作用Q附转换图)
5、对象标识符
关系数据库表的主键在 Java 应用环境中的体现?
5-1、关pd数据库的主键生成机制
序列生成主键Q整?br />
自动增长lgQ整?br />
全局l一标识W?GUIDQGlobally Unique IdentifierQ,字符串主?/p>
5-2、Java 环境中的对象识别机制
引用比较Q比地址 “==”
内容比较Q比数据 equals() Ҏ(gu)
5-3、Hibernate 对象识别W的作用
在生?Java 对象Ӟl标识属性分配一个唯一的|用于区分同一个类的多个不同的实例。体现在 Hibernate 中就是对象标识符?/p>
5-4、Hibernate 内置标识W生成器的用方?br />
org.hibernate.id.IdentifierGenerator 接口?/p>
ps. 映射对象标识W?/a>
5-5、用复合主键时l合标识W的使用Ҏ(gu)Q常用于遗留的系l中Q?br />
嵌入式组合标识符/映射式组合标识符Q映多个主键字D和持久化类的多个属性?/p>
6、配|?Hibernate
6-1、配|方?br />
可编E还是文仉|方?
Hibernate JDBC 配置属?br />
hibernate.jdbc.fatch_sizeQ指?JDBC 抓取数据的数量大,非零?br />
hibernate.jdbc.batach_sizeQ允?Hibernate 使用 JDBC2 的批量更斎ͼ非零| 5 ?30
hibernate.jdbc.provider_classQ自定义?ConnectionProvider cdQ用于向 Hibernate 提供 JDBC q接
hibernate.jdbc.autocommitQ确认是否开?JDBC 自动提交功能Q默认ؓ false 不自动提?/p>
6-2、方a
屏蔽底层数据库系l的方言机制Q方便与数据库间q移?br />
MySQLQorg.hibernate.dialect.MySQLDialect
MySQL with InnoDBQorg.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAMQorg.hibernate.dialect.MySQLMyISAMDialect
6-3、Hibernate 日志pȝ
使用 Log4J 作ؓ Hibernate 的日志系l,需要将 Log4J 的库文g log4j.jar 攄到类路径下(其发布包以包?Log4J 的库文gQ。然后编写日志配|文?log4j.properties q放?classpath 路径中?/p>
Log4J 中,几个日志输出U别的顺序是Q只输出高于或等?讑֮U别 的记录?br />
trace < debug < info < warn < error < fatal
在开发模式中Q可以选择 DEBUG U别的输出;应用部v后,可以配置?ERROR?nbsp;
log4j.properties
1 #讄日志根别和输出路径
2 log4j.rootLogger= INFO,CONSOLE,FILE
3
4 #日志输出路径——控制台
5 log4j.appender.CONSOLE= org.apache.log4j.ConsoleAppender
6 log4j.appender.stdout.Target= System.out
7 log4j.appender.CONSOLE.layout= org.apache.log4j.PatternLayout
8 log4j.appender.CONSOLE.layout.ConversionPattern=% d | ABSOLUTE % 5p % c | 1 | : % L - % m % n
9
10 #日志输出路径——文?br />
11 log4j.appender.FILE= org.apache.log4j.FileAppender
12 log4j.appender.FILE.File= hibernate.log
13 log4j.appender.FILE.layout= org.apache.log4j.PatternLayout
14 log4j.appender.FILE.layout.ConversionPattern=% d | ABSOLUTE % 5p % c | 1 | : % L - % m % n
15
16 #日志输出U别
17 log4j.logger.org.hibernate= INFO
18
19 #日志输出cd
20 log4j.logger.org.hibernate.hql.ast.AST= WARN
21 log4j.logger.net.sf.ehcache= INFO
22 log4j.logger.org.hibernate.SQL= DEBUG
7、Hibernate 映射cd
7-1、时间日期映类型(内置映射cdQ?/p>
Java 语言提供?java.util.Date ?java.util.Calendar 两个cd现时间的q算。此外,JDBC q提供了 java.util.Date 的三个扩展类 java.sql.Timestamp、java.sql.Time ?java.sql.Date 分别对应标准 SQL 数据cd中的 TIMESPAME/DATETIMEQ时间日期)、TIMEQ时_、DATEQ日期)?/p>
java.util.Date/java.sql.Date H:date SQL:DATE
java.util.Time/java.sql.Time H:time SQL:TIME
java.util.Date/java.sql.Timestamp H:timestamp SQL:TIMESTAMP/DATETIME
java.util.Calendar H:calendar SQL:TIMESTAMP/DATETIME
java.util.Calendar H:calendar_date SQL:DATE
7-2、自定义映射cd
]]> 'Hibernate 完全手册' MW记Q一Q?对象持久化基 http://www.tkk7.com/kiant/articles/264770.html黄小?/dc:creator>黄小?/author>Fri, 10 Apr 2009 01:50:00 GMT http://www.tkk7.com/kiant/articles/264770.html http://www.tkk7.com/kiant/comments/264770.html http://www.tkk7.com/kiant/articles/264770.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/264770.html http://www.tkk7.com/kiant/services/trackbacks/264770.html
数据库技术已l成Z业信息^台的核心。应用程序必d业务相关的数据通过一定方式持久化到数据库Q还应能够从数据库获取已有的数据Q以适当的Ş式提供给客户或支撑系l的q行?/p>
关键点:如何高效地存取数据、简化编E模型、降低应用的复杂?/p>
在系l中引入持久层,负责所有相x据的持久化操作,可以为整个应用系l提供一个高层、统一、安全、ƈ发的数据持久机制?/p>
1、对象持久化技?/p>
1-1、Java 对象序列?br />
序列化是 Java 语言中内|的轻量U数据持久化机制Q该机制可以Q何实C java.io.Serializable 接口的对象{化ؓq箋的字节流数据Q保存在文g中,或者通过|络q行传输。这些数据日后可被还原ؓ原先的对象状态?br />
~点Q局限性大Q查询只能返回数据流的下一个对象,不提供部分的d和更斎ͼ不提供对象的生命周期理Q只是简单的d和写入,不提供ƈ发和事务Ҏ(gu)?/p>
1-2、?JDBC
JDBCQJava Database ConnectivityQ是用来讉K关系数据库系l的标准 Java API。JDBC 只是提供讉K数据的接口,其底层实现有特定的数据库厂商实现?br />
~点Q直接?JDBC 实现持久化时QSQL 语句和应用代码杂在一P逻辑混ؕ。另外直接?SQL 操作数据库,不是面向对象?/p>
1-3、?JDO
Java 数据对象QJava Data ObjectQ是 JCPQJava Community ProcessQ发布的一个规范,?Java 对象持久化的标准。JDO 仅定义了标准的编E接口,而把关系映射的定义留lY件供应商实现?/p>
1-4、实?EJB
实体 EJBQEnterpise Java BeanQ是 Java 领域的数据持久化标准?/p>
1-5、对象关pL?br />
对象关系映射QOjbect Relation MappingQ在对象模型和关pL型之间徏立沟通的桥梁。ORM 技术封装了数据持久化的操作l节Qؓ应用E序提供了一只访问的接口Q应用E序可以专注于业务逻辑的处理。它采用 POJOQPlain Old Java ObjectQ简单的传统对象Q作为域对象的表qͼ不涉及域对象之外的技术细节,降低?ORM 技术的侵入性,实现单,便于试Q具备高扩展性?/p>
2、对象关pL模?br />
一个完整的对象关系映射框架Q应具备以下四个斚wQ?/p>
①、一个元数据映射规范Q负责持久化cR类属性的数据库表、字D늚映射Q实现对象和关系的语义连接?br />
②、一l对象操作接口,用于完成数据的增加、删除、修改和更新{操作?br />
③、一U面向对象的查询语言Q该语言能理解ѝ多态和兌{面向对象特性,实现Z对象的查询ƈ在对象之间导航?br />
④、一pd与数据库现关的技术实现和最?jng)_践,保证pȝ的完整性ƈ提高pȝ的可用性和扩展性。比如:事务、缓存和数据抓取{略{?/p>
对象模型Q类、属性、关联) <==> 关系模型Q表、字Dc约束)
ps. <Hibernate 完全手册>
ISBN 978-7-111-23764-8
机械工业出版C?br />
侯志?余周 郑焕 {编?/p>
]]> 正则表达式相养I增加攉?..Q?/title> http://www.tkk7.com/kiant/articles/235788.html黄小?/dc:creator>黄小?/author>Tue, 21 Oct 2008 13:48:00 GMT http://www.tkk7.com/kiant/articles/235788.html http://www.tkk7.com/kiant/comments/235788.html http://www.tkk7.com/kiant/articles/235788.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/235788.html http://www.tkk7.com/kiant/services/trackbacks/235788.html
正则表达式是一个描q字W模式的对象?br />
Java 里的正则表达?/span>
化范式匹?/a>
使用正则表达式验证本地化数据
java中常用的匚w正则表达式实例大?/a>
安全~程: 验证输入
JavaScript 里的正则表达?/span>
[转] 一些常用的正则表达式(JSQ?/a>
JS的正则表辑ּ
javaScript 中的正则表达式解?/a>
]]> JAVA 中各U数据库q接方式Q补齐中Q?/title> http://www.tkk7.com/kiant/articles/234126.html黄小?/dc:creator>黄小?/author>Mon, 13 Oct 2008 15:39:00 GMT http://www.tkk7.com/kiant/articles/234126.html http://www.tkk7.com/kiant/comments/234126.html http://www.tkk7.com/kiant/articles/234126.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/234126.html http://www.tkk7.com/kiant/services/trackbacks/234126.html
JDBC-ODBC 桥连 Q不需驱动Q?br />
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:test", "sa", "love2you");
SQL SERVER 2005 直连 [驱动下蝲 ]
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection(
"jdbc:sqlserver://10.0.0.99:1433;databaseName=deviantART",
"sa",
"love2you");
?=============
常用 JDBC 驱动名字?URL 列表
ODBC driver
sun.jdbc.odbc.JdbcOdbcDriver
jdbc:odbc:name
?COM.ibm.db2.jdbc.net.DB2Driver q接?DB2 数据?br />
一?DB2 URL 的示?
jdbc:db2://aServer.myCompany.com:50002/name
?com.sybase.jdbc.SybDriverq接?Sybase 数据?br />
一?Sybase URL 的示?
jdbc:sybase:Tds:aServer.myCompany.com:2025
MySQL driver
com.mysql.jdbc.Driver
jdbc:mysql://hostname:3306/dbname?useUnicode=true&characterEncoding=GBK
Microsoft SQL Server Driver
com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=WapSvc;User=sa;Password=pwd
Informix
com.informix.jdbc.IfxDriver
jdbc:informix-sqli://hostname:1526/dbname:INFORMIXSERVER=informixservername;user=username;password=password
Oracle
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@hostname:1521:<SID>
Postgresql
org.postgresql.Driver
jdbc:postgresql://localhost/soft
Apache Derby/Java DB
org.apache.derby.jdbc.ClientDriver
jdbc:derby://localhost:1527/databaseName;create=true
Access 是通过 ODBC q接? Excel 也可? 甚至可以动态构造连接字W串:
q样可以直接q接?Access 数据库文?
jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\mydata.mdb
cM?Excel 文g也可以用cMҎ(gu):
jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=.\mydata.xls
]]> JavaE序设计语言Q第4版) W记 http://www.tkk7.com/kiant/articles/233806.html黄小?/dc:creator>黄小?/author>Sat, 11 Oct 2008 15:28:00 GMT http://www.tkk7.com/kiant/articles/233806.html http://www.tkk7.com/kiant/comments/233806.html http://www.tkk7.com/kiant/articles/233806.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/233806.html http://www.tkk7.com/kiant/services/trackbacks/233806.html
W一?nbsp; 快速浏?/a>
W二?nbsp; cM对象
W三?nbsp; cȝ扩展
W四?nbsp; 接口
W五?nbsp; 嵌套cd接口
W六?nbsp; 枚Dcd
W七?nbsp; 语言W号、值和变量
W八?nbsp; 包装器类
W九(ji)?nbsp; q算W和表达?/a>
W十?nbsp; 控制?/a>
W十一?nbsp; 泛型cd
W十二章 异常和断a
W十三章 字符串与正则表达?/a>
W十四章 U程
W十五章 注解
W十六章 反射
W十七章 垃圾回收器与内存
W十八章 ?/a>
W十?ji)?nbsp; 文档注释
W二十章 I/O ?/a>
W二十一?nbsp; 集合
W二十二?nbsp; 各种常用工具
W二十三?nbsp; pȝ~程
W二十四?nbsp; 国际化和本地?/a>
W二十五?nbsp; 标准?/a>
W一?nbsp; 快速浏?/span>
W二?nbsp; cM对象
2.1、静态字D?/strong>
字D声明ؓ staticQ静态字D)Q会使该字段只有一个实例,q且该实例能被该cȝ所有对象共享?br />
而且无论创徏了该cȝ多少个实例,q个字段的都只有一份(内存中唯一Q)?
2.2、初始化?/strong>
字段另一U更复杂的初始化方式是使用初始块?br />
初始块是一D出现在cd明中的语句块Q它位于所有成员、构造器以及声明之外Q它可以初始化对象的字段?br />
它们会被优先执行Q就像它们放|在cȝ每一个构造器的开头那P如果有多个块Q它们会按照在类中出现的先后序执行?br />
只有当类的所有构造器都声明会抛出某个查型异常Ӟ它的初始块才可以抛出该异常?br />
应该审慎的用初始块Q用它们来表C那些构造器不能单独L完成的工作?br />
例如
public long idNum;
private static long nextID = 0;
{
idNum = nextID++;
}
2.3、静态初始化
静态初始块被声明ؓ staticQ只能引用类的静态成员,不能抛出M查型异常?br />
cd部的初始化顺序是从前到后的,即代码中?#8220;字段初始化器”?#8220;初始?#8221;都是按照从头到尾的顺序执行?br />
例如Q要保静态字D?kk 在被讉K前已初始化?br />
static int kk = 9;
static{
System.out.println("1");
}
static{
System.out.println(kk);
}
2.4、参数?/strong>
准确的讲QJava 只有一U参C递方式,卛_g递,q样有利于保持简单,传递的也只是这个值的副本?br />
2.5、用方法来控制讉K
控制内部数据讉K的方法有时被UCؓ讉KҎ(gu)Qaccessor methodQ,使用它们可以增强cL据的装性?br />
W三?nbsp; cȝ扩展
3.1、扩展类的构造器
扩展cȝ构造器必须通过隐式或显式地调用其超cȝ构造器Q将l承而来的字D늚构造工作委托给类?br />
构造器的顺序依赖:
1、调用其类的构造器Q同?3步顺序递归调用?ObjectQ;
2、用q些字段的初始器和初始化块来初始化它们;
3、执行构造体?br />
3.2、承与重定义成?/strong>
?重蝲QoverloadingQ:提供多个h相同名字的方法,但是它们拥有可以彼此区分开的不同签名?br />
{是由Ҏ(gu)名及其参数的cd和数量组成的Q它q不包含q回cd或者抛出的异常列表Qƈ且我们无法基于这些因素来重蝲Ҏ(gu)?br />
不同重蝲的方法可以有不同cd的返回倹{?br />
?重写QoverridingQ:方法的类实现替换q实现。其{必须相同Q但是他们的q回cd可以按照某种方式变换?br />
1、签名(Ҏ(gu)名、参数类型和个数Q必ȝ同?br />
2、返回类型:引用cd的可以返回超cL声明的子c(is a 关系Q,基本cd的返回必ȝ同?br />
3、访问修饰符Q可以改变,但只能提供更多的讉K权限Q否则违反契U(不能替代类实现Q?br />
4、可以改变其他方法修饰符Qsynchronized、native和strictfpQ,static 则是必须保持一_final 可以修饰重写的方法(类被重写的Ҏ(gu)则不能是 finalQ?br />
5、throws 子句Q重?throws 子句可以于类所列出的数量、或者更为具体,q可以没有Q?throws 子句。但是不能比类的范围广Q必L多态兼容的Q?br />
6、私有的Ҏ(gu)Q对于超cȝ private Ҏ(gu)Q子cL有重写,对私有方法的调用M调用当前cM所声明的方法实现?br />
例如Q?br />
public static void name() throws IndexOutOfBoundsException {....}
正确的重写: public static void name() {....}
错误的重写: public static void name() throws ClassNotFoundException {....}
3.3、兼容类型的实现
?向上转型Q向l承l构高端转换Q其U程是安全的?br />
?向下转型Q向l承l构低端转换Q非安全U程?br />
instanceof 操作W检一个对象所输入的类Q返回gؓ false/trueQ常用语安全的将一个引用向下{型?br />
例:if (sref instanceof More)
mref = (More) sref;
W四?nbsp; 接口
4.1、抽象类与抽象方?/strong>
通过使用抽象c,我们可以声明只定义了部分实现的类Q而让扩展cd提供光分方法或者全部方法的具体实现?br />
M拥有 abstract Ҏ(gu)的类都必d明ؓ abstract?br />
不能创徏抽象cȝ对象Q应为某些可能会被调用的Ҏ(gu)没有M有效的实现?br />
不能?static 因ؓ static 不能?abstract 的?br />
4.2、接?/strong>
接口是纯设计的表现Ş式,而类则是设计和实现的混合物?br />
接口cd的引用只能访问接口成员?nbsp; Exam xxx = new ImplExam();
?接口帔RQ隐?public final staticQ必L初始器(|?br />
?接口Ҏ(gu)Q隐?public abstractQ除注解外不允许有其他方法修饰符Q如 synchronized、native和strictfp {用于定义实现细节的修饰W)Q不能是 final 因ؓ它还没有被实玎ͼ不能?static 因ؓ static 不能?abstract 的?br />
4.3、扩展接?/strong>
可以使用 extends 扩展接口Q接口承接口)Q接口支持多重承其他接口?br />
public interface C extends A, B {....}
?l承和隐藏常?br />
1、新声明帔R都将隐藏l承而来的常量?br />
2、承而来的常量可以用该帔R完全限定名访问(X.valQ常见引?static 成员形式Q?br />
3、一个接口承了两个或者多个名字相同常量,那么该常量所有简单引用都h二义性,会导致编译出错。所以,必须昑ּ使用接口帔RQ例?X.val ?Y.val {等?nbsp;
4、在l承一个类的同时还实现了多个接口,也可能会遇到二义性的问题?br />
?l承、覆盖和重蝲Ҏ(gu)
1、一个接口同时实C两个{相同的方法,只会有一个这L(fng)Ҏ(gu)存在Q不会有二义性?br />
2、遇到签名相同,q回不同的方法,除非某些q回的类型是其他的子cdQ否则不同的q回会生二义性?br />
4.4、接口的应用
M一个希望被l承的主要类Q不是否抽象类Q都应该是一个接口的实现。(同样?is a 的关p,l承只能扩展一个,但是接口能实现多个。)
W六?nbsp; 枚Dcd
枚D是一个特D的c,它要表示的每一个具名常量都有与之对应的预定义实例?br />
W七?nbsp; 语言W号、值和变量
W八?nbsp; 包装器类
8.1、包装器cL?/strong>
每一个包装器为它所指的基本cd定义一个不可改变对象?br />
例如Q?new Integer(1); 创徏对象Q他的值始l保?Q不可改变其倹{?br />
8.2、装/拆箱转换
Integer val = 3;
int x = val.intValue();
?拆箱转换需分配一个包装器cd例,q样会消耗内存?br />
׃包装器类是不可变的,所以两个拥有相同值的对象在一定范围是可以互换使用的(数值型?-128~127Q?br />
例如Q?br />
public static boolean sameArgs(Integer a, Integer b) {
return a == b; //判断是否对象相同
}
true sameArgs(12, 12);
false sameArgs(12, new Integer(12));
false sameArgs(1280, 1280);
W九(ji)?nbsp; q算W和表达?/strong>
9.1、类型{?/strong>
?隐式拓宽Q将整Ş转换为Q点型Q反之则不可以,整Ş转换点型不会生精度丢q象?br />
长整?long --> Q隐式{换)float --> Q强制{换)long 也是可行的,但会丢失_ֺ?br />
?昑ּ强制cd转换
1、QҎ(gu)转换为整数时Q小数点后的部分会舍厅R?br />
2、double 强制转换 float 可能会发生:a._ֺ丢失Qb.得到0Qc.或者大?float 型范_得到无穷大?br />
3、整数间转换Q通过舍去高位Q从而有可能被动改变W号?br />
9.2、运符优先U?/strong>
用括号将q算W括hQ可提高可读性ƈ保正确的优先顺序?br />
W十?nbsp; 控制?/span>
10.1、增强的 for 语句
for(Type loop-variable : set-expression)
statement
?对于数组Q?for-each 的优点在于不必用数l下标,~点是只能查看,不能修改数组元素?br />
?对于元素集合QP代的元素提供{语法结构,但不能同时P代多个集合?br />
?不是同步的,非线E安全的?br />
10.2、标?br />
label: statement
利用标号命名语句Q在配合 break lable; ?continue lable; 控制流转到严格受限的地斏V?br />
W十一?nbsp; 泛型cd
W十二章 异常和断a
12.1、断aQassertionQ?/strong>
用来查永q都应该?true 的情况,如果发现断言?falseQ就会抛出异常。添加测试断a可以为我们提供一U在E序中的错误引发奇怪后果前捕获它们的途径?br />
语法Q?nbsp; assert eval-expr [: detail-expr]
在断a被关闭时Q默认情况下Q,断言是不被计了。所?Q?br />
assert ++i < max; ++i 块有可能不会起作用,分开写?br />
断言应该用来试从来不发生的情况Q因为断a会抛?Error 而不?Exception。然而,使断a成ؓ必须会代码的运行环境变得复杂,因ؓ当前断言的打开及关闭间反复操作会带来复杂性,所以不使用?br />
W十三章 字符串与正则表达?/span>
13.1、正则表辑ּ的匹?/strong>
java.util.regex 包提?正则表达式(regular expressionQ用?#8220;字W串是否和某U模式匹?#8221;或?#8220;挑选字W串中各个部?#8221;?br />
?重用已编译的模式Q执行匹配所涉及的所有状态都ȝ在匹配器中,所以多个匹配器可以׃n同一模式?
Pattern p = Pattern.compile(regularExpression); //给定的正则表达式编译到模式?br />
Matcher m = p.matcher(sequence); //利用输入序列从模式创建匹配器
boolean b = m.matches(); //试整个输入序列与该模式匹?br />
?仅用一ơ正则表辑ּ
boolean b = Pattern.matches(regex, sequence); //~译l定正则表达式ƈ试给定输入与其匹?br />
13.2、正则表辑ּ的替?/strong>
通过调用模式?matcher Ҏ(gu)从模式创建匹配器。创建匹配器后,可以使用它执行三U不同的匚w操作Q?
?matches Ҏ(gu)试整个输入序列与该模式匹配?br />
?lookingAt 试输入序列从头开始与该模式匹配?
?find Ҏ(gu)扫描输入序列以查找与该模式匹配的下一个子序列?
每个Ҏ(gu)都返回一个表C成功或p|的布?yu)倹{通过查询匚w器的状态可以获取关于成功匹配的更多信息?
ps.正则表达式本w复杂,只有在确实需要的情况下才使用它。在使用的时候,量保模式的清晰度?br />
W十四章 U程
在计机中每ơ执行一步的操作序列被称为线E(threadQ,而这U单U程~程模型正是大多数程序员所使用的模型。线E可以独立于其他U程执行一Q务,U程间也可以׃n讉K对象。当两个U程在修改同一块数据时Q如果它们是会对数据造成破坏的交叉方式去执行Q那么就会出现竞争危机,解决的方法是利用一个锁和对象关联v来,q个锁可以告知该对象是否正在被用?br />
14.1、创建线E?/strong>
?扩展 Thread cL创徏新的U程Q重?run Ҏ(gu)?br />
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
下列代码会创建ƈ启动一个线E:
PrimeThread p = new PrimeThread(143); //创徏该类实例
p.start(); //启动U程QJava 虚拟用该U程?run Ҏ(gu)?br />
?声明实现 Runnable 接口的类。该cȝ后实?run Ҏ(gu)?br />
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
下列代码会创建ƈ启动一个线E:
PrimeRun p = new PrimeRun(143); //分配该类对象
new Thread(p).start(); //利用对象构造一个新的线E,q启?br />
ps.每个U程都有一个标识名Q多个线E可以同名。如果线E创建时没有指定标识名,׃为其生成一个新名称?br />
14.2、隐藏线E的 run Ҏ(gu)
run Ҏ(gu)是公qQؓ了防止客L(fng)U自调用该方法,我们可以不v实现 Runable 接口Q而是定义一个内部的 Runable 对象Q确保不被滥用。例如:
public class Ping2 {
public Ping2() {
Runnable service = new Runnable(){
public void run() {
//......
}
} ;
new Thread(service).start();
}
}
14.3、线E的l束
有三U情况可使线E终止:
?run Ҏ(gu)正常q回Q常规方式)
?run Ҏ(gu)意外l束
?应用E序l止
Thread.currentThread().interrupt(); 向线E发送中断:中断一个线E通常不会影响它正在执行的操作Q但是像 sleep ?wait q样会抛?InterruptedException 异常的方法除外?br />
一个线E可以用某UŞ式的 join Ҏ(gu)来等待另一个线E终止?br />
不要使用 stop Ҏ(gu)Q首先因?stop 不能强制l止MU程Q无力对付恶意方法;其次Qstop 会媄响同步锁Q破坏对象。所以徏议{而?interrupt Ҏ(gu)?br />
14? 同步
当多U程使用同一个对象时Q存在着׃交叉操作而破坏数据的可能性,所以在某些动作操作对象之前Q必d获得对象的锁来阻止其他对象获得这个锁Q直臛_被持有者释放ؓ止?br />
利用 synchronized 的声明,我们可以保多个q行的线E不会互相干扎ͼ因ؓ每一个方法都互斥地执行Q在该方法调用结束前不能被其他方法调用)?br />
U程安全Q多个线E可以ƈ发调用对象上的方法,q且在每个线E中被调用的Ҏ(gu)都在执行所期望的作业?br />
W十五章、注?/span>
注解以结构化的方式提供了E序及其元素Q类、方法、字Dc变量等{)的信息,q些信息能够被外部工兯动处理?br />
W十六章 反射
W十七章 垃圾回收器与内存
Java 虚拟机可以用一U称为垃圑֛Ӟgarbage collectionQ的技术来定对象在程序中何时不再被引用,因此它可以安全地释放对象占用的内存空间?br />
当我们从M可执行代码都无法到达某个对象Ӟ它所占的I间可以被回收。垃圑֛收会占用一定的pȝ资源Q通常情况下,只有需要更多的内存I间或者避免发生内存溢出时Q垃圑֛收器才会q行。但是程序可能没有发生内存溢出,甚至在没有接q内存退出的时候就退ZQ所以可能根本不需要执行垃圑֛收?br />
垃圾回收q不能保证内存中L会有I间来创建新对象Q不停的创徏对象q置于用列表中Q就会造成内存泄漏。垃圑֛收解决了很多Q但q全部Q的内存分配问题?br />
System.runFinalization(); //q行挂v finalization 的所有对象的l止Ҏ(gu)
System.gc(); //q行垃圾回收?br />
Runtime.getRuntime().runFinalization();
Runtime.getRuntime().gc();
W十八章 ?br />
18.1、导入机?/strong>
如果声明了一个对 Xxx cȝ引用Q那么编译器׃按照下面的顺序搜索该cdQ?br />
1、包括承类型在内的当前cd?br />
2、当前类型的嵌套cd?br />
3、显式命名的导入cdQ单cd导入Q?import attr.Attributed;Q?br />
4、在同一个包中声明的其他cd?br />
5、隐式命名的导入cdQ按需导入Qimport attr.*;Q?br />
Z避免导入同名的两个类型生二义性,使用完全限定名?br />
W十?ji)?nbsp; 文档注释
19.1、剖析文档注?/strong>
/**
* 文档注释W一句应该是一个良好的摘要?br />
* 文档注释中可以嵌套标准的 HTML 标签Q用于格式指令或链接到其他文档?br />
* 如果想?@ 字符Q请使用 @Q否则会被当作文档注释标{开始?br />
*/
W二十章 I/O ?/strong>
java.io 包是用流QstreamQ定?I/O 的,是有序的数据序列,它有一个源Q输入流Q和目的圎ͼ输出)?br />
java.nio 包是用缓冲区QbufferQ和通道QchannelQ定?I/O 的,它用于高吞吐量服务器?br />
java.net 包基于对套接字的使用Q用一U基于流或通道的模型提供对|络 I/O 的特D支持?br />
20.1、流的概q?/strong>
I/O 主要有两部分Q?br />
?字符(character streamQ?6位的 UTF-16 字符Q,它基于文本的 I/OQ有d器(readerQ和写入器(writeQ?br />
?字节(byte streamQ通常?8位)Q它Z数据?I/OQ有输入(input streamQ和输出(output streamQ?br />
转换?InputStreamReader ?OutputStreamWriter 可以通过指定或者默认的~码机制?字符??字节?之间互相转换Q类g“黏合?#8221;Q我们可以以一U统一的、^台无关的方式使用现有?8位字W编码机制去处理本地字符集?br />
InputStreamReader 对象d字节Qƈ使用适合该流的编码机制将其{换ؓ字符?br />
OutputStreamWriter 对象接受提供的字符Q用适合的编码机制将它们转换为字节?br />
Q注Q无 ReaderStreamInput cd字符转换为字节,也无 WriterOutputStream q个cd字节转译为字W)
InputStreamReader(InputStream in);
OutputStreamWriter(OutputStream out);
关闭转换的同时也会关闭掉将其关联的字节,所以一定要慎重?br />
20.2、数据字节流
通过来传输特定cd的二q制数据。DataInput ?DataOutput?br />
20.3、对象序列化
对象的表示转换为字节流的过E成为序列化Q而从字节中重构一个对象的q程被称为反序列化?br />
?ObjectOutputStream 写入序列化对象是Q该对象必须实现 Serializable 接口Q声明该cMؓ可序列化的?br />
W二十一?nbsp; 集合
21.1、P?/strong>
?Collection 使用 iterator Ҏ(gu)获得一?Iterator 对象Q这个对象可以遍历集合内容,而且每次都只能访问一个元素?br />
与增强型 for 循环相比Q它可以通过 remove Ҏ(gu)U除元素Q这U方式是安全的?br />
21.2、同?/strong>
java.util 包中提供的所有集合实现都是非同步的(除了 Vector、Dictionary、Hashtable {遗留下来的集合Q?br />
W二十二?nbsp; 各种常用工具
?FormatterQ用于生格式化文本?br />
?RandomQ用以生伪随机数序列的cR?br />
?ScannerQ该cȝ于扫描文本,q根据正则表辑ּ模式其解析成基本数据类型或者字W串?br />
?Timer/TimerTaskQ用于调度将来某个时刻运行Q务的一U方式(包括重复发生Q,每个 Timer 对象都有一个相兌的线E?br />
W二十三?nbsp; pȝ~程
应用E序有时必须?Java 虚拟机的q行时系l或底层操作pȝq行交互。java.lang 中有三个主要的类提供了这个访问:
23.1、System c?/strong>
System cL供了用于操纵pȝ状态的的静态方法,qvC资源仓库的作用。它有四个通用领域的功能性:
?标准 I/O ?br />
?操纵pȝ属?br />
?用于讉K当前 Runtime 对象的工h法和便利Ҏ(gu)?br />
?安全?br />
23.2、Runtime c?/strong>
提供了访问虚拟机的运行时pȝ的接口。当?Runtime 对象提供了对每个q行时系l的功能q行交互的能力,例如与垃圑֛收器交互、执行其他程序及关闭q行时系l?br />
23.3、Process c?/strong>
表示的是正在q行的进E,它是通过调用 Runtime.exec 来执行另一个程序时创徏的,也可以通过直接使用 ProcesssBuilder 对象来创建?br />
W二十四?nbsp; 国际化和本地?br />
24.1、区?/strong>
java.util.Locale 对象描述了区域?br />
24.2、资源束
java.util.ResourceBundle cR?br />
24.3、货?/strong>
java.util.Currency cd以帮助我们正格式化货币倹{?br />
24.4、时间、日期、日?/strong>
旉是用长整?long 表示的,?1970 q开始,可以通过 java.util.Date c获得时_旉的比较可以用 before ?after Ҏ(gu)Q或者可以用 getTime/setTime Ҏ(gu)获得/讄旉?long 型倹{Date 没有提供本地化支持,我们可以使用更有效复杂的区域敏感?Calendar ?DateFormat cL代替它?br />
抽象c?Calendar 表示不同标记旉的方式,同时也提供了许多用的日历字段?br />
GregorianCalendar c表C日历?br />
SimpleDateFormat cL式化、解析时间的cR?br />
例:
Calendar cal = new GregorianCalendar(1972, Calendar.OCTOBER, 26);
System.out.println(cal.getTime());
W二十五?nbsp; 标准?/strong>
?java.awtQ抽象工L(fng)的抽象层Q用来编写^台无关的囑Ş用户界面?br />
?java.appletQApplet cd相关cdQ用于编写可嵌入其他应用E序的子E序Q如 HTML 览器?br />
?java.beansQ用于编写客L(fng)可重用的 JavaBeans 构g?br />
?java.lang.instrumentQ用于定义代理的服务?br />
?java.lang.managermentQ用于监视ƈ理其所在的虚拟Z及操作系l服务?br />
?java.mathQ数?br />
?java.netQ网l?br />
?java.rmiQ远E方法调?br />
?java.security 与相关的工具包:安全工具?br />
?java.sqlQ关pL据库讉K
?javax.* Q标准扩展工具包
?javax.soundQ创建和操作声音的子包?br />
?javax.swingQGUI构徏?Swing 包?br />
]]> [转] java?Collection ?Map 详解 http://www.tkk7.com/kiant/articles/226964.html黄小?/dc:creator>黄小?/author>Thu, 04 Sep 2008 07:06:00 GMT http://www.tkk7.com/kiant/articles/226964.html http://www.tkk7.com/kiant/comments/226964.html http://www.tkk7.com/kiant/articles/226964.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/226964.html http://www.tkk7.com/kiant/services/trackbacks/226964.html http://www.diybl.com/course/3_program/java/javajs/2007917/71621.html
前言 U性表Q链表,哈希表是常用的数据结构,在进行Java开发时QJDK已经为我们提供了一pd相应的类来实现基本的数据l构。这些类均在java.util包中。本文试N过单的描述Q向读者阐q各个类的作用以及如何正用这些类?nbsp;
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection接口 Collection是最基本的集合接口,一个Collection代表一lObjectQ即Collection的元素(ElementsQ。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接承自Collection的类QJava SDK提供的类都是l承自Collection?#8220;子接?#8221;如List和Set?nbsp;
所有实现Collection接口的类都必L供两个标准的构造函敎ͼ无参数的构造函数用于创Z个空的CollectionQ有一个Collection参数的构造函数用于创Z个新的CollectionQ这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection?nbsp;
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个P代子Q用该q代子即可逐一讉KCollection中每一个元素。典型的用法如下Q?nbsp;
Iterator it = collection.iterator(); // 获得一个P代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元?nbsp;
}
由Collection接口z的两个接口是List和Set?nbsp;
List接口
List接口
List是有序的CollectionQ用此接口能够_的控制每个元素插入的位置。用戯够用烦引(元素在List中的位置Q类g数组下标Q来讉KList中的元素Q这cM于Java的数l。和下面要提到的Set不同QList允许有相同的元素?nbsp;
除了hCollection接口必备的iterator()Ҏ(gu)外,Listq提供一个listIterator()Ҏ(gu)Q返回一个ListIterator接口Q和标准的Iterator接口相比QListIterator多了一些add()之类的方法,允许dQ删除,讑֮元素Q还能向前或向后遍历?nbsp;
实现List接口的常用类有LinkedListQArrayListQVector和Stack?nbsp;
LinkedListc?
LinkedListc?nbsp;
LinkedList实现了List接口Q允许null元素。此外LinkedList提供额外的getQremoveQinsertҎ(gu)在LinkedList的首部或N。这些操作LinkedList可被用作堆栈QstackQ,队列QqueueQ或双向队列QdequeQ?nbsp;
注意LinkedList没有同步Ҏ(gu)。如果多个线E同时访问一个ListQ则必须自己实现讉K同步。一U解x法是在创建List时构造一个同步的ListQ?nbsp;
List list = Collections.synchronizedList( new LinkedList( ));
Vectorc?
Vectorc?nbsp;
Vector非常cMArrayListQ但是Vector是同步的。由Vector创徏的IteratorQ虽然和ArrayList创徏的Iterator是同一接口Q但是,因ؓVector是同步的Q当一个Iterator被创且正在被用,另一个线E改变了Vector的状态(例如Q添加或删除了一些元素)Q这时调用Iterator的方法时抛出ConcurrentModificationExceptionQ因此必L莯异常?/span>
Stack c?
Stack c?nbsp;
Stackl承自VectorQ实C个后q先出的堆栈。Stack提供5个额外的Ҏ(gu)使得Vector得以被当作堆栈用。基本的push和popҎ(gu)Q还有peekҎ(gu)得到栈顶的元素,emptyҎ(gu)试堆栈是否为空QsearchҎ(gu)一个元素在堆栈中的位置。Stack刚创建后是空栈?nbsp;
Set接口
Set接口
Set是一U不包含重复的元素的CollectionQ即L的两个元素e1和e2都有e1.equals(e2) = false QSet最多有一个null元素?nbsp;
很明显,Set的构造函数有一个约束条Ӟ传入的Collection参数不能包含重复的元素?nbsp;
h意:必须心操作可变对象QMutable ObjectQ。如果一个Set中的可变元素改变了自w状态导致Object.equals(Object) = true导致一些问题?nbsp;
ArrayListc?
ArrayListc?nbsp;
ArrayList实现了可变大的数组。它允许所有元素,包括null。ArrayList没有同步。sizeQisEmptyQgetQsetҎ(gu)q行旉为常数。但是addҎ(gu)开销为分摊的常数Q添加n个元素需要O(n)的时间。其他的Ҏ(gu)q行旉为线性?nbsp;
每个ArrayList实例都有一个容量(CapacityQ,即用于存储元素的数组的大。这个容量可随着不断d新元素而自动增加,但是增长法q没有定义。当需要插入大量元素时Q在插入前可以调用ensureCapacityҎ(gu)来增加ArrayList的容量以提高插入效率?nbsp;
和LinkedList一PArrayList也是非同步的QunsynchronizedQ?nbsp;
Map接口 h意,Map没有l承Collection接口QMap提供key到value的映。一个Map中不能包含相同的keyQ每个key只能映射一个value。Map接口提供3U集合的视图QMap的内容可以被当作一lkey集合Q一lvalue集合Q或者一lkey-value映射?
Hashtablec?
Hashtablec?nbsp;
Hashtablel承Map接口Q实C个key - value映射的哈希表。Q何非I(non - null Q的对象都可作ؓkey或者value?nbsp;
d数据使用put(key, value)Q取出数据用get(key)Q这两个基本操作的时间开销为常数。Hashtable通过initial capacity和load factor两个参数调整性能。通常~省的load factor 0 .75较好地实C旉和空间的均衡。增大load factor可以节省I间但相应的查找旉增大,q会影响像get和putq样的操作。用Hashtable的简单示例如下,?Q?/span>2 Q?攑ֈHashtable中,他们的key分别?#8221;one”Q?#8221;two”Q?#8221;three”Q?nbsp;
Hashtable numbers = new Hashtable();
numbers.put(“one”, new Integer( 1 ));
numbers.put(“two”, new Integer( 2 ));
numbers.put(“three”, new Integer( 3 ));
要取Z个数Q比?Q用相应的keyQ?nbsp;
Integer n = (Integer)numbers.get(“two”);
System.out.println(“two = ” + n);
׃作ؓkey的对象将通过计算其散列函数来定与之对应的value的位|,因此M作ؓkey的对象都必须实现hashCode和equalsҎ(gu)。hashCode和equalsҎ(gu)l承自根cObjectQ如果你用自定义的类当作key的话Q要相当心Q按照散列函数的定义Q如果两个对象相同,即obj1.equals(obj2) = true Q则它们的hashCode必须相同Q但如果两个对象不同Q则它们的hashCode不一定不同,如果两个不同对象的hashCode相同Q这U现象称为冲H,冲突会导致操作哈希表的时间开销增大Q所以尽量定义好的hashCode()Ҏ(gu)Q能加快哈希表的操作?nbsp;
如果相同的对象有不同的hashCodeQ对哈希表的操作会出现意想不到的l果Q期待的getҎ(gu)q回nullQ,要避免这U问题,只需要牢C条:要同时复写equalsҎ(gu)和hashCodeҎ(gu)Q而不要只写其中一个?nbsp;
Hashtable是同步的?nbsp;
HashMapc?
HashMapc?nbsp;
HashMap和HashtablecMQ不同之处在于HashMap是非同步的,q且允许nullQ即null value和null key。但是将HashMap视ؓCollectionӞvalues()Ҏ(gu)可返回CollectionQ,其P代子操作旉开销和HashMap的容量成比例。因此,如果q代操作的性能相当重要的话Q不要将HashMap的初始化定w讑־q高Q或者load factorq低?nbsp;
WeakHashMapc?
WeakHashMapc?nbsp;
WeakHashMap是一U改q的HashMapQ它对key实行“弱引?#8221;Q如果一个key不再被外部所引用Q那么该key可以被GC回收?nbsp;
ȝ 如果涉及到堆栈,队列{操作,应该考虑用ListQ对于需要快速插入,删除元素Q应该用LinkedListQ如果需要快速随问元素,应该使用ArrayList?/fieldset>
]]> JDBC 直连 SQL2005 的一点心?/title> http://www.tkk7.com/kiant/articles/214637.html黄小?/dc:creator>黄小?/author>Sun, 13 Jul 2008 15:39:00 GMT http://www.tkk7.com/kiant/articles/214637.html http://www.tkk7.com/kiant/comments/214637.html http://www.tkk7.com/kiant/articles/214637.html#Feedback 0 http://www.tkk7.com/kiant/comments/commentRss/214637.html http://www.tkk7.com/kiant/services/trackbacks/214637.html
一、配|?SQL Server 2005 以允许远E连?nbsp; (通过使用实例名称来运?SQL Server 2005 )
http://support.microsoft.com/kb/914277/zh-cn
摘要&ȝ
在尝试从q程计算接到 Microsoft SQL Server 2005 实例Ӟ可能会接收到错误消息。在使用ME序q接?nbsp;SQL Server 旉可能会发生此问题。例如,在?nbsp;SQLCMD 实用工具q接?nbsp;SQL Server 时收C下错误消息:
Sqlcmd:错误:Microsoft SQL Native Client:建立到服务器的连接时发生错误。连接到 SQL Server 2005 Ӟ默认讄 SQL Server 不允许远E连接这个事实可能会Dp|?br />
如果没有?nbsp;SQL Server 2005 配置为接受远E连接,则可能会发生此问题。默认情况下QSQL Server 2005 Express Edition ?nbsp;SQL Server 2005 Developer Edition 不允许远E连接。若要配|?nbsp;SQL Server 2005 以允许远E连接,请完成以下所有步骤:
• 在?zhn)要从q程计算接到?nbsp;SQL Server 实例上启用远E连接?nbsp;
• 打开 SQL Server Browser 服务?nbsp;
• 配置防火墙以允许?nbsp;SQL Server ?nbsp;SQL Server Browser 服务相关的网l通讯?nbsp;
启用 SQL Server Browser 服务
如果(zhn)是通过使用实例名称来运?nbsp;SQL Server 2005 q且在连接字W串中没有用特定的 TCP / IP 端口P则必d?nbsp;SQL Server Browser 服务以允许远E连接?br />
例如Q?strong> < 计算机名 > \SQLEXPRESS 的默认实例名U?/strong>安装?nbsp;SQL Server 2005 Express。不?zhn)正在q行多少?nbsp;SQL Server 2005 实例Q只需要启用一?nbsp;SQL Server Browser 服务?br />
(以下是个人的服务器上的配|,打开?nbsp;TCP / IP ?nbsp;实例?
二、通过 TCP 端口直接?SQL Server 实例 (端口默认值是 1433)
为SQL Server使用非标准的端口 http://www.windbi.com/showtopic-293.aspx
摘要&ȝ
1 、ؓC么要?nbsp;TCP / IP q接
在程序配|文仉QData Source= Q服务器的IP地址Q比 Data Source = (local) 更有利于UL?br />
2 、服务器端关于标准端? 1433 )的更?/strong>
当你安装SQL ServerӞ默认实例是监?433端口L(fng)。安全方面容易受到攻凅R?br />
当安装一个命名实例后Q在它启动的时候默认用的是动态决定的端口受因此,命名实例每次启动Ӟ都有可能监听不同的端口号。对于通过防火墙访问方式造成极大问题?br />
因此Q?strong>Z限制对你的SQL Server的访问,你需要配|SQL Serverȝ听一个特定的端口 ?br />
(怎样配置SQL Serverȝ听特定的端口Q示例中使用的是 1433 Q你可以自由选择)
3、用特定端口设|时的客L(fng)q接
客户端有3U方法连接到一个用特定非标准端口L(fng)实例?br />
W一U方法是q行SQL Server Browser服务?br />
W二个方法是在客L(fng)机器上创Z个SQL Server的别名?br />
最后一个方法是在连接字W串里通过~程来指定端口号。Data Source=SERVER2,8484;Initial Catalog=AdventureWorks
(客户端协?
l论
正如你所看到的,在用一个特定的端口h讄你的SQL Server实例时没有太多的工作要做。最大的问题是保q接字符串的~码要正。当讄端口L(fng)时候,要确保该端口h有被使用?strong>Z保你的环境更加安全Q我你关闭SQL Server Browser服务。这h有的客户端在q接SQL Server的时候都要求指定端口受?br />
三、程序中使用端口q接数据?br />
在连接到 SQL Server 数据库之前,必须首先在本地计机或服务器上安?SQL ServerQƈ且必d本地计算Z安装 JDBC 驱动E序?br />
Microsoft SQL Server 2005 JDBC Driver 1.2 下蝲
使用 JDBC 驱动E序 http://msdn.microsoft.com/zh-cn/library/ms378526.aspx
创徏q接 URL http://msdn.microsoft.com/zh-cn/library/ms378428.aspx
myeclicse怎么与sql server 2005q接 http://zhidao.baidu.com/question/55043158.html?fr=qrl&test=query
摘要&ȝ
MyEclipse Database Explor 配置
Driver Template Q在下拉框中选择数据库驱动模ѝ这里这里选择 Microsoft SQL Server 2005
Driver JARS : dsql jdbc 。点?nbsp;Add JARs 。JDBC包的sqljdbc.jar文g?br />
Connection URL: jdbc:sqlserver: // 10.0.0.99:1433;databaseName=AdventureWorks
?nbsp;jdbc:sqlserver: // A9DFC026515C47B\MYSQL;databaseName=AdventureWorks (已启动SQL Server Browser服务)
User name ?nbsp;Password为登陆名字和密码Q?nbsp;好像必须填, " window w䆾验证 " 无效
VS 2005 ?nbsp;SQL 2005 中的配置
几乎和MyEclipse Database Explor一P只不q是 端口号前面的 ' : ' 变成?nbsp; ' , '
服务器名Uͼ 10.0 . 0.99 , 1433
与数据库建立单连?/strong>
若要使用 DriverManager c连接到数据库,必须首先按如下方式注册驱动程序:
Class.forName( " com.microsoft.sqlserver.jdbc.SQLServerDriver " );
加蝲驱动E序后,可通过使用q接 URL 来徏立连接:
String connectionUrl = " jdbc:sqlserver://localhost:1433; " + " databaseName=AdventureWorks;user=MyUserName;password=*****; " ;
Connection con = DriverManager.getConnection(connectionUrl);
四、SQL 2005 更改sa密码
http://topic.csdn.net/u/20071130/13/54df9ff6-ad1d-45a3-9d9b-da6a33714227.html
旉匆忙Q没一一验证q?br />
摘要
企业理里—安全性—̎号—右健属?最好取消密码策略这?
sp_password ' OldPassword ' , ' NewPassword '
alter login [ sa ] with password = N ' NewPassword ' -- 旧密码可以不用提?/span>
]]>
վ֩ģ壺
˾Ʒ |
һƵ |
ŷۺ |
Ļ˾ƷAV |
Ƶѹۿ |
վѹۿ
|
ëƬ߲ |
AVһ
|
97þþƷĻ |
һɪ |
99aƷ |
ؼAƬëƬѿ |
һëƬ |
ԴСƵ߹ۿ |
žžƵ |
Ƶ߹ۿ |
AVŷAVվ |
jjzzjjzz߹ۿ |
һѿ |
˾Ʒҹapp |
Ʒ |
СƵ߹ۿ |
Ʒþþþ |
Ʒ˿ |
˳ɵӰ߹ۿ |
Ʒžѹۿ |
˼˼reѾƷƵ66 |
߹ۿ |
ĻۺϾþ2 |
xxxx߳Ƶ |
99re߾ƷƵ |
ѵӰ |
ۺ˵ɫ |
߹ۿ |
һػ¼Ѳŷ |
24Сʱձwwwѵ |
AVһDV |
AVһþþƷ
|
AVþþƷݺݰ˳ |
ɫվwww |
Ů߲վ |