`
penghao122
  • 浏览: 363046 次
  • 性别: Icon_minigender_1
  • 来自: 广东珠海
社区版块
存档分类
最新评论

贴几个自定义usertype

    博客分类:
  • java
阅读更多
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import oracle.sql.BLOB;

import net.sf.hibernate.Hibernate;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.UserType;

public class BinaryBlobType implements UserType {

	public Object deepCopy(Object value) throws HibernateException {
		if(value==null)return null;
		byte[] bytes=(byte[])value;
		byte[] result=new byte[bytes.length];
		System.arraycopy(bytes,0,result,0,bytes.length);
		return result;
	}

	public boolean equals(Object x, Object y) throws HibernateException {
		return (x == y)
				|| (x != null && y != null && java.util.Arrays.equals(
						(byte[]) x, (byte[]) y)); 
	}

	public boolean isMutable() {
		return true;
	}

	public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
		Blob blob=rs.getBlob(names[0]);
		return blob.getBytes(1,(int)blob.length());
	}

	public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
		
        if(st instanceof org.apache.commons.dbcp.DelegatingPreparedStatement && 
            ((org.apache.commons.dbcp.DelegatingPreparedStatement)st).getDelegate()     
               instanceof oracle.jdbc.OraclePreparedStatement)
          {
            oracle.sql.BLOB blob = oracle.sql.BLOB
                .createTemporary(
                    ((org.apache.commons.dbcp.PoolableConnection) st
                        .getConnection()).getDelegate(), false,
                    oracle.sql.BLOB.DURATION_SESSION);
                    
            blob.open(BLOB.MODE_READWRITE);
            
            OutputStream out = blob.getBinaryOutputStream();
                    
            try
            {
              out.write((byte[])value);
              out.flush();
              out.close();
            }
            catch(IOException e)
            {
              throw new SQLException("failed write to blob" + e.getMessage());
            }

            blob.close();
            ((oracle.jdbc.OraclePreparedStatement) ((org.apache.commons.dbcp.DelegatingPreparedStatement) st)
                .getDelegate()).setBLOB(index, blob);
          }
          else if(st instanceof oracle.jdbc.OraclePreparedStatement)
          {
              oracle.sql.BLOB blob =oracle.sql.BLOB.createTemporary(st.getConnection(),false,oracle.sql.BLOB.DURATION_SESSION);
              blob.open(BLOB.MODE_READWRITE);
              OutputStream out = blob.getBinaryOutputStream();
              try
              {
                  out.write((byte[]) value);
                  out.flush();
                  out.close();
              }
              catch (IOException e)
              {
                  throw new SQLException("failed write to blob" + e.getMessage());
              }
              blob.close();
             ((oracle.jdbc.OraclePreparedStatement)(st)).setBLOB(index,blob);
          }
          else
          {
            st.setBlob(index, Hibernate.createBlob((byte[]) value));
          } 
	}

	public Class returnedClass() {
		return Types.class;
	}

	public int[] sqlTypes() {
		return new int[]{Types.BLOB};
	}
	
}


import java.io.IOException;
import java.io.OutputStream;
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Types; 
import java.sql.Blob; 

import oracle.sql.BLOB;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.UserType;

 
/**
* <li>Title: ORABinaryBlobType.java</li>
* <li>Project: Trunk</li>
* <li>Package: com.ideal.common.db.usertype</li>
* <li>Description: </li>
* <li>Copyright: Copyright (c) 2005</li>
* <li>Company: IdealTechnologies </li>
* <li>Created on Aug 24, 2006 12:36:01 PM</li>
* @author lei_chen
* @version 1.0
*/
public class ORABinaryBlobType implements UserType 
{ 
  public int[] sqlTypes() 
  { 
    return new int[] { Types.BLOB }; 
  }

  public Class returnedClass() 
  { 
    return byte[].class; 
  } 

  public boolean equals(Object x, Object y) 
  { 
    return (x == y) 
      || (x != null 
        && y != null 
        && java.util.Arrays.equals((byte[]) x, (byte[]) y)); 
  } 

  public Object nullSafeGet(ResultSet rs, String[] names, Object owner) 
  throws HibernateException, SQLException 
  { 
    Blob blob = rs.getBlob(names[0]); 
    return blob.getBytes(1, (int) blob.length()); 
  } 

  public void nullSafeSet(PreparedStatement st, Object value, int index) 
  throws HibernateException, SQLException 
  { 
      BLOB t_blob = BLOB.createTemporary(st.getConnection(),
          false, BLOB.DURATION_SESSION);
      OutputStream t_out = null;

      t_blob.open(BLOB.MODE_READWRITE);

      t_out = t_blob.getBinaryOutputStream();

      try
      {
        t_out.write((byte[]) value);
        t_out.flush();
        t_out.close();
      }
      catch (IOException e)
      {
        throw new SQLException("failed write to blob" + e.getMessage());
      }

      t_blob.close();

      st.setBlob(index, t_blob);
  } 

  public Object deepCopy(Object value) 
  { 
    if (value == null) return null; 

    byte[] bytes = (byte[]) value; 
    byte[] result = new byte[bytes.length]; 
    System.arraycopy(bytes, 0, result, 0, bytes.length); 

    return result; 
  } 

  public boolean isMutable() 
  { 
    return true; 
  } 

}


分享到:
评论

相关推荐

    QListWidget自定义布局例程

    我们将从以下几个方面展开讨论: 1. **QListWidgetItem类型**:QListWidget的基本单元是QListWidgetItem,它代表了列表中的一个条目。有三种类型的QListWidgetItem:Type, UserType和NoType,其中Type和UserType...

    J2EE企业级项目开发-1期 04 Hibernate使用经验.doc

    3. **自定义UserType实例**:例如,如果我们需要在`TUSER`表中存储用户的电子邮件,但不想为每个邮箱创建单独的记录,可以使用`UserType`将多个邮箱地址存储在一个`VARCHAR`字段内,以分号分隔。自定义的`Email`类...

    JSP 中Hibernate实现映射枚举类型

    本文将详细介绍如何在Hibernate中实现枚举类型到数据库的映射,包括对应的枚举类的定义、自定义UserType以及在映射文件hbm.xml中的配置。 首先,定义一个枚举类型Gender,它包含了性别相关的几个枚举值,分别是...

    Hibernate 配置跟数据库字段的对应关系

    总结来说,配置Hibernate与数据库字段的对应关系主要包括以下几个步骤: 1. 在`hibernate.cfg.xml`配置数据源和实体类。 2. 使用注解或XML映射文件建立实体类字段与数据库列的映射。 3. 确定合适的Mysql数据库数据...

    webservice接口文档说明.docx

    泛微 Webservice 接口文档说明提供了以下几个主要部分: 1. 传输格式:泛微 Webservice 接口使用 XML(Extensible Markup Language)作为数据交换格式。 2. 格式要求:泛微 Webservice 接口的数据交换格式要求为 ...

    DataBinding2使用手册

    在使用DataBinding2之前,我们首先需要理解几个基本的概念: 1. **数据绑定**:指的是将HTML元素(如`&lt;td&gt;`、`&lt;input&gt;`等)与后端返回的数据进行关联的过程。一旦完成绑定,当数据发生变化时,页面上的元素也会自动...

    2022年Hibernate 的原理与配置Java教程.docx

    在配置Hibernate时,我们需要以下几个步骤: 1. 创建Hibernate的配置文件(hibernate.cfg.xml),设置数据库连接参数,如URL、用户名、密码等。 2. 编写映射文件(.hbm.xml),将Java类与数据库表进行映射。映射...

    hbm xml配置详解 ssh框架

    在`.hbm.xml`文件中,映射元素主要包括以下几部分: 1. ****:这是映射文件的根元素,表示一个Java类。它包含类名(class属性)和对应的数据库表名(table属性)。 2. ****:标识符映射,对应于数据库中的主键。...

    MFC学习必备工具,看完掌握MFC

    学习MFC时,你需要掌握以下几个核心概念和关键点: 1. **基础类**:像CWinApp、CWnd、CDialog、CButton等都是MFC的基础类,它们分别代表应用程序、窗口、对话框和控件等基本元素。 2. **文档/视图架构**:MFC中...

    Hibernate的char问题.txt

    为了更精确地控制 `char` 类型的处理方式,可以考虑使用 Hibernate 提供的自定义类型,比如 `CharacterType` 或者自定义实现 `org.hibernate.usertype.UserType` 接口来创建自定义的类型转换器。 ##### 3. 参数绑定...

    中控zktime5.0考勤管理系统数据库表结构.doc

    本文将深入解析该系统的几个核心数据库表,包括考勤记录表、指纹模板表、用户信息表、面部模板表以及考勤记录修改日志表,以帮助读者理解系统背后的数据逻辑。 首先,考勤记录表(Checkinout)是系统的核心表之一,...

    Android实现可复用的选择页面

    本示例代码提供了一个具体的实现方案,主要涉及以下几个关键知识点: 1. **活动(Activity)**:`UserSelectActivity` 是一个继承自 `AppCompatActivity` 的类,它是Android应用中的一个基本组件,用于展示用户界面并...

    CUDA配置说明 SDK

    CUDA安装主要包括以下几个部分: - **开发驱动(Toolkit)**:提供了基础的CUDA编程工具。 - **工具包(devdriver)**:用于支持EMU模式,无需实际的CUDA硬件支持即可进行开发测试。 - **SDK样例代码**:包含了丰富...

    织梦CMS数据库表和字段说明手册

    本文将详细介绍织梦CMS中的几个核心数据库表及其字段,帮助开发者更好地掌握织梦CMS的使用技巧。 #### 二、核心数据库表及字段解析 ##### 1. dede_addonarticle - 附加文章表 - **aid (int(11))**:文章编号,用于...

    Hibernate-API-3.3.1-GA.chm.zip_Java编程_Java_

    在Hibernate 3.3.1 GA中,我们可以找到以下几个关键知识点: 1. **实体管理**:在Hibernate中,实体是与数据库表相对应的Java类。开发者可以通过`@Entity`注解来标记一个类为实体,并通过`@Table`注解指定对应的...

    优化使用mysql存储session的php代码

    以下是几个核心要点: 1. **结合Session处理与统计**:将Session管理和访问者记录相结合,以便更好地分析用户行为。 2. **利用数据库和Cookie模拟Session功能**:通过这种方式,可以减少对服务器资源的需求,并提供...

    ssh(structs,spring,hibernate)框架中的上传下载

    Spring针对几个著名的Web服务器的数据源提供了相应的JDBC抽取器:  •WebLogic:WebLogicNativeJdbcExtractor  •WebSphere:WebSphereNativeJdbcExtractor  •JBoss:JBossNativeJdbcExtractor  在定义了JDBC...

Global site tag (gtag.js) - Google Analytics