一、简单的方法
此种方法在快速大量生成时,会有重复
SELECT concat (hex (RAND ()), hex (RAND ())) as uuid FROM SYSIBM.SYSDUMMY1; --32位大写
select lower(hex(RAND())||hex(RAND())) as uuid from sysibm.sysdummy1;--32位小写
二、自定函数,调用java生成uuid
1.创建java类
import java.util.UUID; import COM.ibm.db2.app.UDF; public class UDFUUID extends UDF { public static String uuid() { // UUID uuid = UUID.randomUUID(); // String uid = uuid.toString().replaceAll("-", ""); // return uid; return UUID.randomUUID().toString().replaceAll("-", ""); } }
然后用db2自带的jdk(比如$HOME/sqllib/java/jdk/bin)编译成class
查看DB2自带的jdk_path
$ db2 get dbm cfg | grep -i jdk_path
Java Development Kit installation path (JDK_PATH) = /home/db2inst4/sqllib/java/jdk64
/home/db2inst4/sqllib/java/jdk64/bin
(/opt/IBM/db2/V9.7/java/jdk64/bin)
/home/db2inst4/sqllib/java/jdk64/bin/java -c /home/myUserName/UDFUUID.java
2.创建自定义函数
第一种:
直接把UDFUUID.class拷贝到$HOME/sqllib/function下。
实例用户cp /home/myUserName/UDFUUID.class /home/db2inst4/sqllib/function/UDFUUID.class
不用重启数据库
然后执行:
drop function uuid; create function uuid() returns char(32) fenced variant no sql language java parameter style java external name 'UDFUUID!uuid';
第二种:
把此类打成jar包(最好用db2的jdk打包),比如叫UUIDUDF.jar 并放在d盘,然后在命令行调用
Db2 call sqlj.install_jar('file:d:\customfunction.jar', 'UUIDUDFJAR')
然后执行
drop function uuid;
create function uuid()
RETURNS char(32)
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT DETERMINISTIC NO EXTERNAL ACTION NO SQL
EXTERNAL NAME 'UUIDUDFJAR:UDFUUID.uuid';
最后像使用一般函数一样使用,
values uuid(); select uuid() from SYSIBM.SYSDUMMY1;
参考:
db2 uuid
http://blog.csdn.net/qqqwwwqw/article/details/8055413
DB2基于JAVA的自定义函数(user-defined-function)示例
相关推荐
直接通过 dbo.[FunGetUUID32](NEWID())即可获取到32位UUID,非常简单方便。
在Oracle和DB2等数据库中,用户可以自定义创建序列,这提供了更大的灵活性,如从特定数值开始自增。而在MySQL和Microsoft SQL Server等数据库中,系统会自动创建并管理自增主键,无需用户干预。 在Oracle中,创建...
9. **uuid.hex**:生成16进制表示的128位UUID,以32字符的字符串形式表示,具有良好的性能和跨数据库兼容性。 10. **uuid.string**:与uuid.hex类似,但不编码,直接以16字符的字符串表示,可能在某些数据库中存在...
- **定义**:采用数据库提供的主键生成机制,例如 DB2、SQL Server 和 MySQL 中的主键生成机制。 - **应用场景**:适用于大多数现代关系型数据库,这些数据库通常提供了内置的自动增长字段功能,可以高效地生成主键...
- **描述**:`uuid`策略生成一个128位的全局唯一标识符(UUID),适用于需要全球唯一性的场景。 - **实现机制**:默认情况下,UUID由MAC地址、时间戳和其他随机数组成。 - **应用场景**:适用于需要跨系统共享数据的...
6. identity:该策略采用数据库提供的主键生成机制,如DB2、SQL Server、MySQL中的主键生成机制。 7. sequence:该策略采用数据库提供的sequence机制生成主键,如Oracle中的Sequence。 8. uuid.hex:该策略由...
- **UUID.HEX**:生成128位UUID并转换为32位十六进制字符串。 - **UUID.STRING**:生成随机的16字节UUID,并转换为字符串表示。 - **配置示例**: ```xml <generator class="uuid.hex"/> ``` ### 总结 ...
UUID主键生成策略是使用Universally Unique Identifier生成主键。这种策略可以生成唯一的主键,但它有一个缺点,即生成的主键可能很长,影响数据库的性能。 在选择主键生成策略时,需要根据项目的需求和数据库的...
UUID策略采用128位的通用唯一标识符来生成主键。 **特点:** - 可以保证在时间和空间上的唯一性。 - 生成的UUID占用空间较大,约为16字节。 - 适用于分布式环境,尤其是跨数据库的需求。 **应用场景:** - 分布式...
1. **uuid.hex**: 这种生成器使用128位算法生成一个32位的字符串。由于其通用性,它适用于所有类型的数据库。在`.hbm.xml`映射文件中,你可以这样配置: ```xml <generator class="uuid.hex"/> ``` 2. **...
9. **uuid.string**:生成未编码的UUID(长度16),不适用于PostgreSQL。 10. **foreign**:使用关联对象的标识符作为主键。 示例配置如下: ```xml ``` ### 普通属性配置(property) `property`标签用于映射...
- **uuid.string**: 生成基于 UUID 的字符串作为主键,适用于 PostgreSQL 数据库。 例如: ```xml ``` #### 四、property标签 `property` 标签用于定义 Java 类的属性与数据库表中列之间的映射关系。它有以下...
- `uuid.hex`和`uuid.string`: 生成128位UUID的16进制或非编码版本。 - `foreign`: 使用关联对象的ID作为主键。 - 可自定义主键生成策略,扩展Hibernate类。 2. **普通属性(property)配置**: - `property`...
- 使用128位UUID算法生成字符串类型的标识符。 - 具有全局唯一性。 #### 四、联合主键 在Hibernate中,可以使用复合主键来表示具有多个字段作为主键的实体。以下是一种定义复合主键的方法: ```xml ...
- **UUID**:使用 UUID 生成器生成全局唯一标识符。 - **Native**:根据使用的数据库类型选择最合适的策略。 - **Assigned**:手动指定主键值。 ##### 2.7 JPA 主键生成策略 - **AUTO**:由实现决定。 - **IDENTITY...
`GenerationType.HILO`和`GenerationType.UUID`分别用于高效生成唯一ID和生成128位的UUID字符串。 在实际开发中,应根据项目的特性和数据库环境选择合适的策略。例如,如果计划在不同的数据库平台上运行程序,`...
- **uuid**:生成128位的UUID字符串主键。 **Configuration类** `Configuration`类是Hibernate的核心组件,它负责管理和加载配置信息,包括数据库连接参数(URL、用户名、密码)、驱动类、映射文件等。配置完成后...
1.系统支持6种主流数据库:MSSQL 2005、mysql 5.x、Oracle、Sybase、DB2、PostgreSQL(其它数据库以后版本推出)。 2.系统支持6种语言:简体中文、繁体中文、英文、**文、西班牙文、俄文。 3.系统自带模块:文章、...
- Hibernate定义了多种数据类型和主键生成策略,如assigned(手动指定)、increment(自动递增)、identity(数据库自增长)、sequence(数据库序列)、native(根据数据库类型自动选择)、uuid(128位UUID)、...