Posted on 2009-05-27 10:04
hanwei 阅读(4438)
评论(0) 编辑 收藏
Oracle相关配置参数
我在Oracle中建立了一个单独的用户:HD,设置其密码为:abc。为该用户分配好相应的数据库空间, 细致的配置方法和信息不再多说,总之你需要得到类似下面的信息以备开发时所使用:
机器地址:hdibm(因为是在本机还可以使用localhost和127.0.0.1,如果是另一台机器使用该机器的IP地址)
oracle的侦听端口:1521
数据库实例名:hdorc
访问用户名:hd
访问密码:abc
需
要注意的是要给HD用户分配至少Connect的角色。另外在他所使用的表空间中分配足够或是无限制的限额大小,否则在开发时都会遇到问题。 除这些之外
还需要你从安装的Oracle或Oracle网站上下载最新的JDBC包,它有两个包,其中一个是与JDK相关的驱动,另一个是多语言支持包(这里我们不
使用OCI的驱动,使用Thin的驱动)。 因为我使用的JDK为1.4所以驱动包我使用了 ojdbc14.jar ,JDK1.4使用的多语言支持包与JDK1.2相同都是 nls_charset12.jar 。
在数据库中我们建立一些表以用于程序开发,以一个简单的用户管理为例我们先建立一个简单的用户表(sysuser):
表名:sysuser
用户ID:userid(vchar:32)
用户名:username(vchar:20)
用户密码:userpasword(vchar:20)
用户最后登录时间:lastlogin(date)
你也可以使用这个sql语句来创建表:
CREATE TABLE "HD"."SYSUSER" ("USERID" VARCHAR2(32) NOT NULL,
"USERNAME" VARCHAR2(20) NOT NULL, "USERPASWORD" VARCHAR2(20)
NOT NULL, "LASTLOGIN" DATE, PRIMARY KEY("USERID"),
UNIQUE("USERNAME"))
TABLESPACE "USERS"
驱动名称:Oracle Thin Driver
驱动程序包名:浏览选择你的ojdbc14.jar文件
驱动程序类:oracle.jdbc.driver.OracleDriver
驱
动程序前
缀:jdbc:oracle:thin: < username >; @ < password >; // < server >; [: < 1521 >; ] / < database_name >; (这
里是最新的驱动的URL书写方法,具体的最好看一下相关Oracle驱动的有关URL的说明)
配置好驱动程序后我们来增加一个数据库连接:
这里:
数据库连接名:HDTestDB
驱动名称:Oracle Thin Driver(就是在上面我们建立的)
驱动程序类:oracle.jdbc.driver.OracleDriver
数据库连接:jdb c:oracle:thin:hd@abc//hdibm:1521/hdorc
用户名:hd
密码:abc
将之前准备好的Oracle驱动包也加入到Web项目中。主要是这两个文件:
nls_charset12.jar
ojdbc14.jar
配置Hibernate的配置文件
配置Hibernate数据库连接配置
数据库的连接配置很简单,在项目的 src目录 下建立一个xml文件,名为 hibernate.cfg.xml 。这个文件的内容为:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="dialect">net.sf.hibernate.dialect.Oracle9Dialect</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.username">hd</property>
<property name="connection.password">abc</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:hdorc</property>
<property name="connection.pool.size">1</property>
<property name="statement_cache.size">25</property>
<property name="jdbc.fetch_size">50</property>
<property name="jdbc.batch_size">30</property>
<property name="show_sql">true</property>
<!-- Mapping files -->
<mapping resource="com/huangdong/demo/dao/SysUser.hbm.xml"/>
</session-factory>
</hibernate-configuration>
我们对这里的各个property元素一一说明:
dialect:使用了Oracle9的对照
connection.driver_class:Oracle的JDBC驱动类名
connection.username:Oracle数据库访问用户名
connection.password:Oracle数据库访问密码
connection.url:Oracle数据库访问URL
connection.pool.size:数据库连接池大小
statement_cache.size:JDBC statement缓冲大小
jdbc.fetch_size:设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数
jdbc.batch_size:设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小
show_sql:设定是否在控制台上显示向数据库提交的SQL语句,在开发调试时比较有用
下面是在com.huangdong.demo.dao包中生成SysUser类和SysUser.hb.xml文件。
由于在Java中使用java.util.Date有很多不方便的地方,所以我将lastlogin的映射后的java属性改为了calendar。
这是修改后的SysUser.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.huangdong.demo.dao.SysUser" table="SYSUSER">
<id column="userid" length="32" name="userid" type="string">
<generator class="uuid.hex"/>
</id>
<property column="username" length="20" name="username" not-null="true" type="string" unique="true"/>
<property column="userpasword" length="20" name="userpasword" not-null="true" type="string"/>
<property column="lastlogin" length="7" name="lastlogin" type="calendar"/>
</class>
</hibernate-mapping>
这是修改后的SysUser.java文件:
package com.huangdong.demo.dao;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/** @author Hibernate CodeGenerator */
public class SysUser implements Serializable {
/** identifier field */
private String userid;
/** persistent field */
private String username;
/** persistent field */
private String userpasword;
/** nullable persistent field */
private java.util.Calendar lastlogin;
/** full constructor */
public SysUser(java.lang.String username, java.lang.String userpasword, java.util.Calendar lastlogin) {
this.username = username;
this.userpasword = userpasword;
this.lastlogin = lastlogin;
}
/** default constructor */
public SysUser() {
}
/** minimal constructor */
public SysUser(java.lang.String username, java.lang.String userpasword) {
this.username = username;
this.userpasword = userpasword;
}
public java.lang.String getUserid() {
return this.userid;
}
public void setUserid(java.lang.String userid) {
this.userid = userid;
}
public java.lang.String getUsername() {
return this.username;
}
public void setUsername(java.lang.String username) {
this.username = username;
}
public java.lang.String getUserpasword() {
return this.userpasword;
}
public void setUserpasword(java.lang.String userpasword) {
this.userpasword = userpasword;
}
public java.util.Calendar getLastlogin() {
return this.lastlogin;
}
public void setLastlogin(java.util.Calendar lastlogin) {
this.lastlogin = lastlogin;
}
public String toString() {
return new ToStringBuilder(this)
.append("userid", getUserid())
.toString();
}
public boolean equals(Object other) {
if ( !(other instanceof SysUser) ) return false;
SysUser castOther = (SysUser) other;
return new EqualsBuilder()
.append(this.getUserid(), castOther.getUserid())
.isEquals();
}
public int hashCode() {
return new HashCodeBuilder()
.append(getUserid())
.toHashCode();
}
}
编写数据库连接获取类
我们编写一个单独的类,用于从SessionFactory中获取数据库连接session。这个类名为HibernateUtil,我们将其放于com.huangdong.demo.util包中,具体的代码如下:
package com.huangdong.demo.util;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
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 currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
我们为该类加入一个向数据库中增加数据的方法:
public boolean TestAdd() {
try {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
SysUser user = new SysUser();
user.setUsername("丫丫");
user.setUserpasword("uhkuhkqepdwqi");
user.setLastlogin(Calendar.getInstance());
session.save(user);
tx.commit();
HibernateUtil.closeSession();
} catch (HibernateException e) {
e.printStackTrace();
return false;
}
return true;
}