`
penghao122
  • 浏览: 357558 次
  • 性别: 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; 
  } 

}


分享到:
评论

相关推荐

    VC开发工具使用技巧源代码_usertype.zip

    VC开发工具使用技巧源代码_usertype.zipVC开发工具使用技巧源代码_usertype.zipVC开发工具使用技巧源代码_usertype.zipVC开发工具使用技巧源代码_usertype.zipVC开发工具使用技巧源代码_usertype.zip

    CUDA SDK 语法高亮必备 usertype.dat

    在VS中配置CUDA时,本身是不识别CUDA关键字的,关键字不能高亮。早期的CUDA版本在SDK中提供了usertype.dat,其中包含CUDA的关键字,但后来的CUDA没有这个文件,网上找了好久,现在贴出来亲测可用~

    usertype.dat

    HLSL的关键字,放在vs的IDE文件下,以在vs中高亮HLSL的关键字

    VS2005编辑器支持着色器语法高亮,一个完整的usertype.dat

    1. 创建或编辑usertype.dat文件(此文件在VS安装目录下的Common7\IDE下面,比如我的就在D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\usertype.dat),添加如下的关键字列表,每个单词占一行,如果你想...

    spring aop+自定义注解+反射实现统一校验脚手架

    工程介绍:SpringBoot项目脚手架,利用spring aop+java反射实现自定义注解校验参数 源码里有使用都例子在DemoContorller example1:校验userName参数必填 @CheckParams(notNull = true) private String userName;...

    商业编程-源码-VC开发工具使用技巧源代码 usertype.zip

    商业编程-源码-VC开发工具使用技巧源代码 usertype.zip

    科汛Kesion Eshop v5.0 GBK正式版

    23、修复小论坛里面的查看精华贴和置顶贴无效 24、改进经被认定为精华的帖子,在主题列表页有图标暗示 25、小论坛增加回复字数及发表贴子字数限** 26、前台所有调用编辑器的地方增强 [removed]过滤,以免跨站漏洞 27...

    网页短视频管理系统,框架 vs2019 + asp.net webform + sql server

    网页短视频管理系统 框架 vs2019 + asp.net webform + sql server 注意sql server类和access数据库可以使用vs自带的数据库启动,不需要安装庞大的sql安装包。...Id UserName PW Sex Explian UserType

    网页短视频播客视频管理系统,框架 vs2019 + asp.net webform + sql server

    网页短视频播客视频管理系统框架 vs2019 + asp.net webform + sql server 注意sql server类和access数据库可以使用vs自带的数据库启动,不需要安装庞大的sql安装包。...Id UserName PW Sex Explian UserType

    BaiduNetdisk_mac_3.4.1.dmg

    百度网盘mac

    有安全需求的选题系统

    系统为每个访问者都设立一个独立的Session对象,用以存储Session变量,并且各个访问者的Session对象互不干扰。Session与Cookie是紧密相关的。 Session的使用要求用户浏览器必须支持Cookie,如果浏览器不支持使用...

    benderco-angular-atm:https:github.combenderCOangular-atm

    UserType.basic 1000000 abc123! UserType.basic 2000 abc123! UserType.admin 1000000000 abc123! UserType.admin 500000 abc123! UserType.super 250000 abc123! UserType.super 6500000 ...

    Log_Encapsulation_demo.rar

    使用C++ fstream,ofstream,ifstream封装日志操作类,可设置日志文件存储大小,超出限制新建日志;日志事件毫秒级打印。

    JSP报名系统

    public String login(String userName,String userPw,int userType) { String result="no"; if(userType==0)//系统管理员登陆 { String sql="select * from t_admin where userName=? and userPw=?"; ...

    SSH+mysql编写的在线考试系统

    自己写的很稚嫩的代码,还剩下一个...接着往selectinfo表中添加A\B\C\D四个选项,往usertype表中也添加上数据。如果要登录,先往userinfo或者studentinfo表中添加一些数据,根据添加的数据**Num和**password进行登录。

    wow-rn-live-stream

    React本机哇直播流实时流媒体组件是React Native Jitsi( )之上的自定义包装器安装$ npm install react-native-wow-rn-live-stream --save用法import { LiveStreamComp } from 'react-native-wow-rn-live-stream' ;...

    expense-manager-app

    项目目的: 展示了如何组合一个小的spring-boot / angular js应用程序。 试用新的Spring-data CrudRepository接口。 使用joda中的Money类,包括使用org.jadira.usertype.moneyandcurrency.joda....

    C++学生成绩管理系统设计源码+设计文档资料.zip

    ⽤户类中UserType被⽤来表⽰这个⽤户是教师,本科⽣,研究⽣还是博⼠⽣。其中教师拥 有管理权限。包括UserType在内,StudentNo(学号),sname(姓名),spassword(密码) 和Score(成绩)都将在User(string)这个...

    Java学生信息管理系统源码(含数据库脚本等).zip

    学生信息管理系统 功能说明 ...要添加管理员账号(userType = 1)必须在数据库添加。 DumpStructure_and_Data.sql数据库的tb_user表中有学生系统管理员账号:admin,密码为空,可以用其登录测试。

    visual studio c++HLSL 用户关键字包

    建立名字叫做"usertype.dat"的纯文本文件, 把以下关键字Copy到里面,一个关键字一行. 2.把此文件放到和VS IDE同目录下.(..\Microsoft Visual Studio X.0\Common7\IDE\) 3.打开VS, TOOL-&gt;OPTION-&gt;TEXT EDITOR-&gt;...

Global site tag (gtag.js) - Google Analytics