??xml version="1.0" encoding="utf-8" standalone="yes"?>精品视频在线观看网站,欧美亚洲综合在线,亚洲人成免费http://www.aygfsteel.com/happyfish/category/556.htmlzh-cnTue, 27 Feb 2007 08:49:09 GMTTue, 27 Feb 2007 08:49:09 GMT60jdbcq接各种数据? (fr www.cybercorlin.net)http://www.aygfsteel.com/happyfish/archive/2005/04/29/3931.html鱼?/dc:creator>鱼?/author>Fri, 29 Apr 2005 03:14:00 GMThttp://www.aygfsteel.com/happyfish/archive/2005/04/29/3931.htmlhttp://www.aygfsteel.com/happyfish/comments/3931.htmlhttp://www.aygfsteel.com/happyfish/archive/2005/04/29/3931.html#Feedback0http://www.aygfsteel.com/happyfish/comments/commentRss/3931.htmlhttp://www.aygfsteel.com/happyfish/services/trackbacks/3931.htmldriver = "org.gjt.mm.mysql.Driver";
url = "jdbc:mysql://localhost/junit_test";
/*Sybase jconnect2.jar */
url = "jdbc:sybase:Tds:host:port";
driver = "com.sybase.jdbc2.SybDriver";
/*Oracle JDBC Thin Driver classes12.zip */
url = "jdbc:oracle:thin:@host:port:sid";
driver = "oracle.jdbc.driver.OracleDriver";
/*Oracle OCI Driver classes12.zip*/
url = "jdbc:oracle:thin:@host:port:sid";
driver = "oracle.jdbc.driver.OracleDriver";
/* OpenBase OpenBaseJDBC.jar (download from www.openbase.com) */
url = "jdbc:openbase://host/database";
driver = "com.openbase.jdbc.ObDriver";
/* MySQL Connector/J from MySql (www.mysql.com)
jdbc classes: mysql-connector-java-2.0.14-bin.jar (download from www.mysql.com) */
url = "jdbc:mysql://host/database";
driver = "com.mysql.jdbc.Driver";
/*JDBC Drivers from Microsoft MSSQL 2000
jdbc classes: msbase.jar, sqlserver.jar, msutil.jar */
url = "jdbc:microsoft:sqlserver://host:port";
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
/*JSQLConnect from JDBC Drivers from Microsoft MSSQL 2000
jdbc classes: msbase.jar, sqlserver.jar, msutil.jar */
url = "jdbc:microsoft:sqlserver://host:port";
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
/*DB2 Universal JDBC Driver from IBM
jdbc classes: db2java.zip */
url = "jdbc:db2:host";
driver = "COM.ibm.db2.jdbc.app.DB2Driver";


可以用开源项目实现轻量q接?BR>import com.devdaily.opensource.database.DDConnectionBroker;
String driver = null;
String url = null;
String username = null;
String password = null;
int minConnections = 0;
int maxConnections = 0;
long timeout = 0;
long leaseTime = 0;
String logFile = null;
DDConnectionBroker broker = null;

void setUp() {
/* MySQL With MM JDBC */
driver = "org.gjt.mm.mysql.Driver";
url = "jdbc:mysql://localhost/junit_test";
/*Sybase jconnect2.jar */
url = "jdbc:sybase:Tds:host:port";
driver = "com.sybase.jdbc2.SybDriver";
/*Oracle OCI Driver classes12.zip*/
url = "jdbc:oracle:thin:@host:port:sid";
driver = "oracle.jdbc.driver.OracleDriver";
/* OpenBase OpenBaseJDBC.jar (download from www.openbase.com) */
url = "jdbc:openbase://host/database";
driver = "com.openbase.jdbc.ObDriver";
/* MySQL Connector/J from MySql (www.mysql.com)
jdbc classes: mysql-connector-java-2.0.14-bin.jar (download from www.mysql.com) */
url = "jdbc:mysql://host/database";
driver = "com.mysql.jdbc.Driver";
/*JDBC Drivers from Microsoft MSSQL 2000
jdbc classes: msbase.jar, sqlserver.jar, msutil.jar */
url = "jdbc:microsoft:sqlserver://host:port";
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
/*JSQLConnect from JDBC Drivers from Microsoft MSSQL 2000
jdbc classes: msbase.jar, sqlserver.jar, msutil.jar */
url = "jdbc:microsoft:sqlserver://host:port";
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
/*DB2 Universal JDBC Driver from IBM
jdbc classes: db2java.zip */
url = "jdbc:db2:host";
driver = "COM.ibm.db2.jdbc.app.DB2Driver";
/*Oracle JDBC Thin Driver classes12.zip */
url = "jdbc:oracle:thin:@host:port:sid";
driver = "oracle.jdbc.driver.OracleDriver";

username = "";
password = "";
minConnections = 1;
maxConnections = 1;
timeout = 100;
leaseTime = 60000;
logFile = "queryconn.log";
broker = null;
}

try {
// construct the broker
broker = new DDConnectionBroker(driver,
url,
username,
password,
minConnections,
maxConnections,
timeout,
leaseTime,
logFile);
}
catch (SQLException se) {
// could not get a broker; not much reason to go on
System.err.println(se.getMessage());
System.err.println("Could not construct a broker, quitting.");
System.exit( -1);
}

db2?Ujdbcq接方式,我用的是type4(只支?以上的版?,也是直接通过jdbcq接,其他的客L(fng)好象q要安装客户端工P
type4的JDBC驱动:com.ibm.db2.jcc.DB2Driver
url的格?jdbc:db2://{host}:50000/{database name}
包名:db2jcc.jar
q有q接E序一定要用ibm的jdk来运行,要不然出?


]]>
JDBC+HibernateBlob数据写入Oracle http://www.aygfsteel.com/happyfish/archive/2005/03/02/1625.html鱼?/dc:creator>鱼?/author>Wed, 02 Mar 2005 15:04:00 GMThttp://www.aygfsteel.com/happyfish/archive/2005/03/02/1625.htmlhttp://www.aygfsteel.com/happyfish/comments/1625.htmlhttp://www.aygfsteel.com/happyfish/archive/2005/03/02/1625.html#Feedback0http://www.aygfsteel.com/happyfish/comments/commentRss/1625.htmlhttp://www.aygfsteel.com/happyfish/services/trackbacks/1625.html
  写入Blob字段和写入其它类型字D늚方式非常不同Q因为Blob自n有一个cursorQ你必须使用cursor对blobq行操作Q因而你在写入Blob之前Q必获得cursor才能q行写入Q那么如何获得Blob的cursor呢?

  q需要你先插入一个empty的blobQ这创Z个blob的cursorQ然后你再把q个empty的blob的cursor用select查询出来Q这样通过两步操作Q你p得了blob的cursorQ可以真正的写入blob数据了?BR>
  看下面的JDBC的demoQ把oraclejdbc.jarq个二进制文件写入数据库表javatest的content字段(q是一个blob型字D?

import java.sql.*;
import java.io.*;
import oracle.sql.*;
public class WriteBlob {

public static void main(String[] args) {

 try {
  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
  Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai");
  conn.setAutoCommit(false);

  BLOB blob = null;

  PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())");
  pstmt.setString(1,"fankai");
  pstmt.executeUpdate();
  pstmt.close();

  pstmt = conn.prepareStatement("select content from javatest where name= ? for update");
  pstmt.setString(1,"fankai");
  ResultSet rset = pstmt.executeQuery();
  if (rset.next()) blob = (BLOB) rset.getBlob(1);

  String fileName = "oraclejdbc.jar";
  File f = new File(fileName);
  FileInputStream fin = new FileInputStream(f);
  System.out.println("file size = " + fin.available());

  pstmt = conn.prepareStatement("update javatest set content=? where name=?");

  OutputStream out = blob.getBinaryOutputStream();

  int count = -1, total = 0;
  byte[] data = new byte[(int)fin.available()];
  fin.read(data);
  out.write(data);
  /*
  byte[] data = new byte[blob.getBufferSize()]; 另一U实现方?节省内存
  while ((count = fin.read(data)) != -1) {
   total += count;
   out.write(data, 0, count);
  }
  */

  fin.close();
  out.close();

  pstmt.setBlob(1,blob);
  pstmt.setString(2,"fankai");

  pstmt.executeUpdate();
  pstmt.close();

  conn.commit();
  conn.close();
 } catch (SQLException e) {
   System.err.println(e.getMessage());
  e.printStackTrace();
 } catch (IOException e) {
  System.err.println(e.getMessage());
 }
}

}

  仔细看上例,分三步:(x)

  1、插入空blob

into javatest(name,content) values(?,empty_blob());

  2、获得blob的cursor

select content from javatest where name= ? for update;

  注意Q!Q必dfor updateQ这锁定该行,直至该行被修改完毕,保证不生ƈ发冲H?BR>
  3、update javatest set content=? where name=

  用cursor往数据库写数据

  q里面还有一点要提醒大家Q?BR>
  JDK1.3带的JDBC2.0规范是不完善的,只有读Blob的接口,而没有写Blob的接口,JDK1.4带的JDBC3.0加入了写Blob的接口。你可以使用JDBC3.0的接口,也可以直接用Oracle的JDBC的APIQ我在上例中使用了Oracle的JDBC的API?BR>
  另外要注意的是:(x)

java.sql.Blob

oracle.sql.BLOB

  注意看blob的大写Q是不一L(fng)。写E序的时候不要搞混了?BR>
  下面看看用Hibernate怎么写,原理是一L(fng)Q也要分三步Q但是代码简单很?BR>
  q是Cat对象定义

package com.fankai;

import java.sql.Blob;

public class Cat {
 private String id;
 private String name;
 private char sex;
 private float weight;
 private Blob image;
 public Cat() { }

 public String getId() { return id; }
 public void setId(String id) { this.id = id; }

 public String getName() { return name; }
 public void setName(String name) { this.name = name; }

 public char getSex() { return sex; }
 public void setSex(char sex) { this.sex = sex; }

 public float getWeight() { return weight; }
 public void setWeight(float weight) { this.weight = weight; }

 public Blob getImage() { return image; }
 public void setImage(Blob image) { this.image = image;}
}

  q是Cat.hbm.xml

Q?xml version="1.0"?Q?BR>Q?DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"Q?BR>
Qhibernate-mappingQ?BR>Qclass name="com.fankai.Cat" table="cat"Q?BR>Q?--jcs-cache usage="read-only"/--Q?BR>Qid name="id" unsaved-value="null"Q?BR>Qgenerator class="uuid.hex"/Q?BR>Q?idQ?BR>Qproperty name="name" length="16" not-null="true"/Q?BR>Qproperty name="sex" length="1" not-null="true"/Q?BR>Qproperty name="weight" /Q?BR>Qproperty name="image" /Q?BR>Q?classQ?BR>Q?hibernate-mappingQ?/TD>

  下面是完整的用Hibernate写入Blob的例子,相比JDBCQ已l简单轻村֤了,也不用写那些OracleҎ(gu)的sql了:(x)

package com.fankai;

import java.sql.Blob;
import net.sf.hibernate.*;
import oracle.sql.*;
import java.io.*;

public class TestCatHibernate {
 public static void testBlob() {
  Session s = null;
  byte[] buffer = new byte[1];
  buffer[0] = 1;
  try {
   SessionFactory sf = HibernateSessionFactory.getSessionFactory();
   s = sf.openSession();
   Transaction tx = s.beginTransaction();
   Cat c = new Cat();
   c.setName("Robbin");
   c.setImage(Hibernate.createBlob(buffer));
   s.save(c);
   s.flush();
   s.refresh(c, LockMode.UPGRADE);
   BLOB blob = (BLOB) c.getImage();
   OutputStream out = blob.getBinaryOutputStream();
   String fileName = "oraclejdbc.jar";
   File f = new File(fileName);
   FileInputStream fin = new FileInputStream(f);
   int count = -1, total = 0;
   byte[] data = new byte[(int)fin.available()];
   fin.read(data);
   out.write(data);
   fin.close();
   out.close();
   s.flush();
   tx.commit();

  } catch (Exception e) {
   System.out.println(e.getMessage());
  } finally {
   if (s != null)
   try {
    s.close();
   } catch (Exception e) {}
  }
 }
}


]]>
让Struts与Hibernate利协同工作 http://www.aygfsteel.com/happyfish/archive/2005/03/02/1624.html鱼?/dc:creator>鱼?/author>Wed, 02 Mar 2005 15:02:00 GMThttp://www.aygfsteel.com/happyfish/archive/2005/03/02/1624.htmlhttp://www.aygfsteel.com/happyfish/comments/1624.htmlhttp://www.aygfsteel.com/happyfish/archive/2005/03/02/1624.html#Feedback0http://www.aygfsteel.com/happyfish/comments/commentRss/1624.htmlhttp://www.aygfsteel.com/happyfish/services/trackbacks/1624.html久久学院
 安装?/FONT>

  一Q下载安?j2sdk1.4Qwww.sun.com)Q或以上,讄 CLASSPATHQjava_home?

  二,下蝲服务器,免费版本的有 tomcat,resin,当然也还?weblogic之类的巨无霸Q不q得看你?sh)脑的配|是否承受的?

  q里只以resin来说明,其他的配|都差不多,可以查看各个服务器自带的说明文g?BR>
  resin 服务器可以在 caucho.com下蝲Q选择合适的版本Q下载解压羃?yu)可以直接用?BR>
  q里resin有一?resin-ee版本Q这个主要是带ejb功能支持的?如果用不到ejbQ一般的p够了?
  三,然后是数据库,有很多数据库产品可以选择QDB2,Oracle,MSSQL,MySQL{等太多了。这里我选择MySQLQ不仅因为它是免费的Q而且它的4.0版本在承以前版本的快速稳定的基础上,整合了InnoDB(http://www.innodb.com)先进的事务处理机制。相信伴随着Linux的壮大,它将在商业数据库市场占的一席之地。不q就数据库本w,它还~少子查询等强大功能的支持?BR>安装׃多说了,配置好用户名Q密码?然后可以下?MySQL-Front 来可视化操作数据库?

  四,在Java~程上,一个IDE的功能显然不可缺,现在行的IDE很多Q有JBuilder,Eclipse,IntellJ IDEA,JCreator{等Q其?eclipse借着开源东风,依靠强大的插件功能被誉ؓ(f)最有前途的工具QJBuilder从来都最强大功能的java工具Q不q大到我的电(sh)脑实在运行不了,I啊Q可没钱配新?sh)脑。所以我q是喜欢JCreatorQ小巧而又功能不俗Q应付小规模的应用Ԓl有余。编译开发时要想获得提示支持Q需要在 configure--option--JDK Profiles 导入jar文g?BR>
  五,一个站点前台的界面开发,当然M开大名鼎鼎?Dreamweaver 了,它支持jspQasp{很多语a的开发。特别是最q的Dreamweaver MX 2004 增强了站点的功能Q可以方便的对一个站点进行控制。面对struts的前台自定义标签Q有一个mxp插g可以用来支持昄sturts的标{。用前q要在编?-标签?里面导入.tld文gQ目前只支持htmlQ和bean 两个标签?BR>
  配置?/FONT>

  一Qresin虚拟站点配置

Qhost id='yourweb:8080' app-dir='e:\blog\' class-update-interval='2'Q?BR>Qweb-app id='/'Q?BR>Qdirectory-servlet id='false'/Q?
Q?web-appQ?BR>Qerror-log id='log/web-error.log'/Q?
QhostQ?/TD>

  然后在定义的目录下面建立站点?

  二,Dreamweaver站点的配|就不多说了?BR>
  三,Struts的配|?BR>
  q里我们使用的是struts1.1,下蝲q解压羃C(f)时文件夹Q就假设是tem文g夹吧?BR>
  首先拯tem/lib/下面所有的.tld文g到站点的/WEB-INF/目录下,再拷贝所有的.jar文g?WEB-INF/lib/目录下,最后web.xml文g中的配置差不多如下:(x)

Q?xml version="1.0" encoding="ISO-8859-1"?Q?
Q?DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"Q?BR>
Qweb-appQ?BR>
QservletQ?BR>Qservlet-nameQactionQ?servlet-nameQ?BR>Qservlet-classQorg.apache.struts.action.ActionServletQ?servlet-classQ?BR>Qinit-paramQ?BR>Qparam-nameQconfigQ?param-nameQ?BR>Qparam-valueQ?WEB-INF/struts-config.xmlQ?param-valueQ?BR>Q?init-paramQ?BR>Qinit-paramQ?BR>Qparam-nameQdebugQ?param-nameQ?BR>Qparam-valueQ?Q?param-valueQ?BR>Q?init-paramQ?BR>Qinit-paramQ?BR>Qparam-nameQdetailQ?param-nameQ?BR>Qparam-valueQ?Q?param-valueQ?BR>Q?init-paramQ?BR>Qload-on-startupQ?Q?load-on-startupQ?BR>Q?servletQ?BR>
Qservlet-mappingQ?BR>Qservlet-nameQactionQ?servlet-nameQ?BR>Qurl-patternQ?.doQ?url-patternQ?BR>Q?servlet-mappingQ?BR>

Q?-- The Usual Welcome File List --Q?BR>Qwelcome-file-listQ?BR>Qwelcome-fileQindex.jspQ?welcome-fileQ?BR>Q?welcome-file-listQ?BR>

Q?-- Struts Tag Library Descriptors --Q?BR>QtaglibQ?BR>Qtaglib-uriQ?tags/struts-beanQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-bean.tldQ?taglib-locationQ?BR>Q?taglibQ?BR>
QtaglibQ?BR>Qtaglib-uriQ?tags/struts-htmlQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-html.tldQ?taglib-locationQ?BR>Q?taglibQ?BR>
QtaglibQ?BR>Qtaglib-uriQ?tags/struts-logicQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-logic.tldQ?taglib-locationQ?BR>Q?taglibQ?BR>
QtaglibQ?BR>Qtaglib-uriQ?tags/struts-nestedQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-nested.tldQ?taglib-locationQ?BR>Q?taglibQ?BR>
QtaglibQ?BR>Qtaglib-uriQ?tags/struts-tilesQ?taglib-uriQ?BR>Qtaglib-locationQ?WEB-INF/struts-tiles.tldQ?taglib-locationQ?BR>Q?taglibQ?BR>
Q?web-appQ?/TD>

  四,Hibernate配置

  下蝲q拷?lib目录下的

hibernate2.jar
commons-beanutils.jar
commons-collections.jar
commons-dbcp.jar
commons-lang.jar
commons-logging.jar
commons-pool.jar
dom4j.jar
cglib-asm.jar
connector.jar

  到应用站点的/lib目录下。接下来配置 hibernate.cfg.xml文g

Q?xml version='1.0' encoding='utf-8'?Q?BR>Q?DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"Q?
Qhibernate-configurationQ?BR>Qsession-factoryQ?BR>
Qproperty name="hibernate.connection.url"Q?BR>jdbc:mysql://localhost:3306/yourdatabase
Q?propertyQ?BR>Qproperty name="hibernate.connection.driver_class"Q?BR>org.gjt.mm.mysql.Driver
Q?propertyQ?BR>Qproperty name="hibernate.connection.username"Q?BR>yourname
Q?propertyQ?BR>Qproperty name="hibernate.connection.password"Q?BR>youyrpassword
Q?propertyQ?BR>
Q??- 是否运行期生成的SQL输出到日志以供调?-Q?BR>Qproperty name="show_sql"QfalseQ?propertyQ?BR>
Q?--dialect Q每个数据库都有其对应的Dialet以匹配其q_Ҏ(gu)?-Q?BR>Qpropertyname="dialect"Qnet.sf.hibernate.dialect.MySQLDialectQ?propertyQ?BR>Q??- 事务理cdQ这里我们用JDBC Transaction --Q?BR>Qproperty name="transaction.factory_class"Q?BR>net.sf.hibernate.transaction.JDBCTransactionFactoryQ?propertyQ?BR>
Qproperty name="jdbc.batch_size"Q?0Q?propertyQ?BR>Qproperty name="jdbc.use_scrollable_resultset"QtrueQ?propertyQ?BR>
Q??映射文g配置Q注意配|文件名必须包含其相对于根的全\?-Q?BR>Qmapping resource="net/seerlog/hbm/Cat.hbm.xml"/Q?BR>
Q?session-factoryQ?BR>
Q?hibernate-configurationQ?/TD>

  以上配置了数据库q接所用的地址和用户名Q密码等。具体参数的含义请参考官Ҏ(gu)档?BR>
  映射文g的内容可以手工来写,也可通过一些工h自动生成?

  整个需要两U文Ӟ(x) .hbm.xml配置文g ?.java持久化对?, 两者是怺兌的,.hbm.xml Ҏ(gu)据库的映还需?.javaq个bean来操作。所以整个过E需要首先设计好数据库,然后Ҏ(gu)数据库导?.hbm.xml文g ,然后再导?.java 文g?有很多工具可以实现这个工E,我们q里采用 Middlegen-Hibernate来实?数据库到.hbm.xml文g的{化,用Hibernate-Extension工具包中?hbm2java 来实?.hbm.xml ?.java 文g的{化!

 

  查找关键字?FONT color=#ff0000>!ENTITY
”,得到Q?BR>
Q?DOCTYPE project [
Q?ENTITY database SYSTEM
"file:./config/database/hsqldb.xml"Q?BR>]Q?/TD>

  b) Application name

Qproperty name="name" value="airline"/Q?

  c) 输出目录

  查找关键字“name="build.gen-src.dir"”,得到Q?BR>
Qproperty name="build.gen-src.dir" value="${build.dir}/gen-src"/Q?

  d) 对应代码的Package name

Qhibernate
destination="${build.gen-src.dir}"
package="${name}.hibernate"
genXDocletTags="false"
genIntergratedCompositeKeys="false"
javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
/Q?

  配置完成后,在MiddleGen 根目录下q行antQ就出现MiddleGen的界面:(x)

  选择需要的表,单击H口剙的Generate 按钮QMiddleGen 即ؓ(f)我们生成q些数据库表所对应的Hibernate映射文g?

  接下来的工作通过Hibernate Extension 来完成,Hibernate Extension 的tools\bin目录下包含三个工P(x)

  1Q?hbm2java.bat

  Ҏ(gu)映射文g生成对应的POJO。通过MiddleGen 我们已经得到了映文Ӟ下一步就是通过hbm2java.bat工具生成对应的POJO?BR>
  2Q?class2hbm.bat

  Ҏ(gu)POJO class 生成映射文gQ这个工具很用刎ͼq里也就不再详细介绍?BR>
  3Q?ddl2hbm.bat

  由数据库导出库表l构Qƈ生成映射文g以及(qing)POJO。这个功能与MiddleGen的功能重叠,但由于目前还不够成熟Q实际上已经被废弃,不再l护Q,提供的功能也有限Q所以我们还是采用MiddleGen生成映射文gQ之后由hbm2javaҎ(gu)映射文g生成POJO 的方式?

  q里我们使用W一个hbm2java.batQ利用刚才生成的.hbm.xml文g自动生成 java 文g?

  Z使用q个工具Q首先我们需要配|一些参敎ͼ打开tools\bin\setenv.bat 文gQ修改其中的JDBC_DRIVER和HIBERNATE_HOME环境变量Q其指向我们的实际JDBC Driver文g和Hibernate所在目录。同时检查一下环境变量CP中的各个目中是否实际存在,特别?CORELIB%下的jar文gQ某些版本的发行包中Q默认配|中的文件名与实际的文g名有所出入Q如%CORELIB%\commons-logging.jar, 在Hibernate 发行包中Q可能实际的文g名是commons-logging-1.0.3.jarQ诸如此c)?

  使用hbm2javaQ根据MiddleGen生成的映文件生成Java 代码Q?BR>
  打开Command WindowQ在tools\bin目录下执行:(x)

hbm2java c:\sample\org\hibernate\sample\*.xml --output=c:\sample\

  通过以上步骤我们q成了所需要的所有基本配|文件。接下来可以来初始化这些配|啦?
  实战?/B>

  在这一节我们要配置一个完整的应用配置。其实每一个单独拿出来都能写本书,不过我只是侧重对自己ȝQ在以后我会(x)不断地把学习(fn)的经验教训写下来?BR>
  一QLog4j 的初始化

  配置log4j.properties

### direct log messages to stdout ###
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.out
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
%c{1}:%L - %m%n
#log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n
log4j.logger.seerlog=DEBUG,A2
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.file=d:\\log\\applog.txt
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %m%n

#log4j.logger.ALL=DEBUG,A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file=d:\\log\\all.log
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

###log4j.rootLogger=warn, stdout
log4j.rootLogger=info, A1

#以下是hibernate API需要的配置

log4j.logger.net.sf.hibernate=info

### log just the SQL
#log4j.logger.net.sf.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.net.sf.hibernate.type=info

### log schema export/update ###
log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

### log cache activity ###
#log4j.logger.net.sf.hibernate.cache=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trac

  配置后如下来调用,首先需要初始化配置文gQ这个过E只需要一ơ,所以我们可以在ServletContextListener中来q行?BR>
String prefix = context.getRealPath("/");
PropertyConfigurator.configure(prefix+"/WEB-INF/classes/log4j.properties");

  q里需要你的配|文件的路径来初始化?BR>
  初始化完成后Q我们在以后的action中就可以 象下面一h调用Q?BR>
static Logger log=Logger.getLogger("seerlog");
log.warn("it's log4j warn");
log.info("it's log4j info");

  关于 log4j 的完全用方法,偶会(x)在以后做详细的说明!

  二,hibernate 的初始化

  首先我们要把hibernate.cfg.xml 攑ֈ应用?classes 目录中,然后可以使用hibernate参考文档提供的例子来封装对后台的用?BR>
public class Hi{

private static final SessionFactory sessionFactory;
private static Connection conn;
static {
 try {
  sessionFactory = new Configuration().configure().buildSessionFactory();
 } catch (HibernateException ex) {
  throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
 }
}

public static final ThreadLocal session = new ThreadLocal();
public static Session getSession() throws HibernateException {
 Session s = (Session) session.get();
 // 假如没有一个可用的U程Q开启一个新 Session,
 if (s == null) {
  conn=DBConnectionManager.getConnection();
  s = sessionFactory.openSession(conn);
  session.set(s);
 }
 return s;
}

public static void closeSession() throws HibernateException {
 Session s = (Session) session.get();
 session.set(null);
 if (s != null)
  s.close();
 if(conn!=null)
  DBConnectionManager.returnConnection(conn);
 }
}

  文中DBConnectionManager.getConnection()是一个DAOc,提供q接池的实现?

  我们使用q个conq接来创Z?session Qsission是一个数据库q接操作的会(x)话周期,它提供了强大的管理数据的能力?

  以后我们在action?execute Ҏ(gu)中就可以使用 Hi.getSession()来获得一个会(x)话支持。典型的应用如下Q?

try{
 //开启一个会(x)话,q启动事务回滚能?BR> Session session = Hi.getSession();
 Transaction tx= session.beginTransaction();

 //查询数据库,使用HQL
 Query q = session.createQuery("from Topic as topic order by topic.id desc");
 q.setFirstResult(0);
 q.setMaxResults(5);

 //得到一个Listcd的数?
 List newTopicList = q.list();

 // 业务处理
 NewTopicList ntlBean=new NewTopicList();
 ntlBean.setList(newTopicList);
 req.setAttribute("newtopiclist",ntlBean);

 //事务提交Q记得关闭会(x)话!
 tx.commit();
 Hi.closeSession();

}//因ؓ(f)整个?x)话会(x)抛出异常,所以需要用try--catch来包?BR>catch(HibernateException e){

 //日志记录
 Log.error(e.toString());
}

  其中的HQL 可以参?hibernate 官方文档来学?fn)?
  实战?/B>

  在这一节我们要配置一个完整的应用配置。其实每一个单独拿出来都能写本书,不过我只是侧重对自己ȝQ在以后我会(x)不断地把学习(fn)的经验教训写下来?BR>
  一QLog4j 的初始化

  配置log4j.properties

### direct log messages to stdout ###
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.out
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
%c{1}:%L - %m%n
#log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n
log4j.logger.seerlog=DEBUG,A2
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.file=d:\\log\\applog.txt
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %m%n

#log4j.logger.ALL=DEBUG,A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file=d:\\log\\all.log
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

###log4j.rootLogger=warn, stdout
log4j.rootLogger=info, A1

#以下是hibernate API需要的配置

log4j.logger.net.sf.hibernate=info

### log just the SQL
#log4j.logger.net.sf.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.net.sf.hibernate.type=info

### log schema export/update ###
log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

### log cache activity ###
#log4j.logger.net.sf.hibernate.cache=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trac

  配置后如下来调用,首先需要初始化配置文gQ这个过E只需要一ơ,所以我们可以在ServletContextListener中来q行?BR>
String prefix = context.getRealPath("/");
PropertyConfigurator.configure(prefix+"/WEB-INF/classes/log4j.properties");

  q里需要你的配|文件的路径来初始化?BR>
  初始化完成后Q我们在以后的action中就可以 象下面一h调用Q?BR>
static Logger log=Logger.getLogger("seerlog");
log.warn("it's log4j warn");
log.info("it's log4j info");

  关于 log4j 的完全用方法,偶会(x)在以后做详细的说明!

  二,hibernate 的初始化

  首先我们要把hibernate.cfg.xml 攑ֈ应用?classes 目录中,然后可以使用hibernate参考文档提供的例子来封装对后台的用?BR>
public class Hi{

private static final SessionFactory sessionFactory;
private static Connection conn;
static {
 try {
  sessionFactory = new Configuration().configure().buildSessionFactory();
 } catch (HibernateException ex) {
  throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
 }
}

public static final ThreadLocal session = new ThreadLocal();
public static Session getSession() throws HibernateException {
 Session s = (Session) session.get();
 // 假如没有一个可用的U程Q开启一个新 Session,
 if (s == null) {
  conn=DBConnectionManager.getConnection();
  s = sessionFactory.openSession(conn);
  session.set(s);
 }
 return s;
}

public static void closeSession() throws HibernateException {
 Session s = (Session) session.get();
 session.set(null);
 if (s != null)
  s.close();
 if(conn!=null)
  DBConnectionManager.returnConnection(conn);
 }
}

  文中DBConnectionManager.getConnection()是一个DAOc,提供q接池的实现?

  我们使用q个conq接来创Z?session Qsission是一个数据库q接操作的会(x)话周期,它提供了强大的管理数据的能力?

  以后我们在action?execute Ҏ(gu)中就可以使用 Hi.getSession()来获得一个会(x)话支持。典型的应用如下Q?

try{
 //开启一个会(x)话,q启动事务回滚能?BR> Session session = Hi.getSession();
 Transaction tx= session.beginTransaction();

 //查询数据库,使用HQL
 Query q = session.createQuery("from Topic as topic order by topic.id desc");
 q.setFirstResult(0);
 q.setMaxResults(5);

 //得到一个Listcd的数?
 List newTopicList = q.list();

 // 业务处理
 NewTopicList ntlBean=new NewTopicList();
 ntlBean.setList(newTopicList);
 req.setAttribute("newtopiclist",ntlBean);

 //事务提交Q记得关闭会(x)话!
 tx.commit();
 Hi.closeSession();

}//因ؓ(f)整个?x)话会(x)抛出异常,所以需要用try--catch来包?BR>catch(HibernateException e){

 //日志记录
 Log.error(e.toString());
}

  其中的HQL 可以参?hibernate 官方文档来学?fn)?


]]>
վ֩ģ壺 ʡ| | | ͨ| | | | ľ| ¹| | ɾ| | | | | | пǰ| | ǡ| | մ| | | ƽ| | | | | IJ| Ȫ| | ʢ| ʲ| Ϫ| Ȫ| ȷ| ³| | | ˻| ߷|