Oracle 如何阻止用户输入重复值

Oracle 如何阻止用户输入重复值,oracle,jakarta-ee,duplicates,Oracle,Jakarta Ee,Duplicates,在我的一个JavaEE应用程序中,我使用了一个注册页面来注册新用户,一旦注册,他/她的注册值将被插入到Oracle数据库中。但无法检测重复值。因此,我考虑向一些列值添加unique约束。但后来我了解到,我不能将多个列声明为unique(在我的例子中,我已经将userid声明为主键)。但我需要使多个列的值唯一(如emalidfield)。同样,仅添加unique也无济于事,因为如果用户提交了一个具有重复值的表单,将捕获异常,用户将无法理解,因为他将被重定向到空白页。所以我有两个问题 1) 如何通知

在我的一个JavaEE应用程序中,我使用了一个注册页面来注册新用户,一旦注册,他/她的注册值将被插入到Oracle数据库中。但无法检测重复值。因此,我考虑向一些列值添加
unique
约束。但后来我了解到,我不能将多个列声明为
unique
(在我的例子中,我已经将
userid
声明为主键)。但我需要使多个列的值唯一(如
emalid
field)。同样,仅添加
unique
也无济于事,因为如果用户提交了一个具有重复值的表单,将捕获异常,用户将无法理解,因为他将被重定向到空白页。所以我有两个问题

1) 如何通知用户插入重复值

2) 如何使Oracle中的多个列唯一


N.B.我不懂javascript

如果您使用JPA,您可以构建一个唯一的约束:

@Entity
@Table(name = "entity_table_name", uniqueConstraints={
   @UniqueConstraint(columnNames={"uniqueField1"}), // Unique value on one field.
   @UniqueConstraint(columnNames={"uniqueField2", "uniqueField3"}) // Unique combination.
})
public class YourEntity {
  private Long id;
  private String uniqueField1;
  private String uniqueField2;
  private String uniqueField3;
  private String uniqueField4;

// ...
}

实现(hibernate、eclipseLink)将负责oracle部分。

如果您使用JPA,您可以构建一个独特的约束:

@Entity
@Table(name = "entity_table_name", uniqueConstraints={
   @UniqueConstraint(columnNames={"uniqueField1"}), // Unique value on one field.
   @UniqueConstraint(columnNames={"uniqueField2", "uniqueField3"}) // Unique combination.
})
public class YourEntity {
  private Long id;
  private String uniqueField1;
  private String uniqueField2;
  private String uniqueField3;
  private String uniqueField4;

// ...
}

实现(hibernate、eclipseLink)将负责oracle部分。

首先,您当然可以在一个表上声明多个唯一约束。您可以声明
userid
是主键,然后将
emailid
声明为唯一。您可以根据需要声明任意多个唯一约束


其次,您的应用程序需要捕获复制键约束并对其执行一些有用的操作。将用户重定向到空白页是没有用的——应用程序应该捕获约束异常并向用户显示有用的消息。例如,如果您收到一个异常,说明违反了约束
UK\u EMAILID
,您可能希望向用户显示一条错误消息,内容大致是“此电子邮件地址已存在”。

首先,您当然可以在一个表上声明多个唯一约束。您可以声明
userid
是主键,然后将
emailid
声明为唯一。您可以根据需要声明任意多个唯一约束


其次,您的应用程序需要捕获复制键约束并对其执行一些有用的操作。将用户重定向到空白页是没有用的——应用程序应该捕获约束异常并向用户显示有用的消息。例如,如果您收到一个异常,说明违反了约束
UK\u EMAILID
,您可能希望向用户显示一条错误消息,内容大致为“此电子邮件地址已存在”

在我的Oracle 10g中,我收到错误消息
ORA-02261:表中已经存在这样的唯一或主键
@SubirAdhikari-您能否准确发布创建表和创建约束所执行的
DDL
(请编辑您的问题以包含此信息)。好的。我解决了这个问题。该列已经是
唯一的
,我正试图使其成为
唯一的
。很抱歉给您带来不便!!还有一个请求@JustinCave您可以发布一些代码片段来说明如何处理
UK_EMAILID
的异常,并向用户显示“此电子邮件地址已经存在”。@SubirAdhikari-您需要描述您的应用程序体系结构。你是在直接编写JDBC吗?使用JPA?还有什么?在我的Oracle 10g中,我收到错误消息
ORA-02261:表中已经存在这样的唯一或主键
@SubirAdhikari-您能否准确地发布创建表和创建约束所执行的
DDL
(请编辑您的问题以包含此信息)。好的。我解决了这个问题。该列已经是
唯一的
,我正试图使其成为
唯一的
。很抱歉给您带来不便!!还有一个请求@JustinCave您可以发布一些代码片段来说明如何处理
UK_EMAILID
的异常,并向用户显示“此电子邮件地址已经存在”。@SubirAdhikari-您需要描述您的应用程序体系结构。你是在直接编写JDBC吗?使用JPA?还有别的吗?