用过VC+SQL的大虾进来看看

来源:百度知道 编辑:UC知道 时间:2024/05/29 17:54:51
假设在表 TB 中有个字段 ID ,我把它设为主键,当我用VC插入一个记录时,若ID值没有重复就没报告错误,而且确实增加了一条记录,若出现重复就会出错,程序终止.我曾经想过两种方法:
1.用try, catch屏蔽掉错误.(可是这样不管什么错误都屏蔽掉了,我想知道具体是哪种错误,这样可以方便程序根据具体情况作出相应处理.当然可以用e.ErrorMessage()显示给我看,但我是要用程序来判断)
2.把TB中所有的ID读出来,再判断有没重复.(可是这样每次插入一个记录就要读一次,很费时,又费变量空间.)

遇到这种情况一般是怎么处理的呢,高手给点实用性的建议.
还有一个问题:如果我的ID字段中的值想自动生成(要是唯一的),是在SQL中生成好,还是VC中生成再写到SQL中好,SQL中有没有做这一个问题的相关函数可用.

我是用java的,不过这种问题以前也碰到过,不过似乎都没有想那么细。两种方法也都用过不过有点不同。
1.用try, catch屏蔽掉错误。(感觉楼主想多了,我们做出来的系统或软件主要是给用户看的,所以最主要的是让用户明白是什么错,而我们只要知道错误是出在这条语句,一调试就能很快找到具体原因。)我们一般的做法都是判断执行语句结果有几条vc里应该也有相应方法。如果结果为0表示插入失败,那就给用户提示插入失败可能该条数据已存在或者数据格式不对等。。。
2.这种情况一般用于比较重要的表,或者插入,删除,更新操作比较频繁且都需要判定唯一问题的表。一般称呼为唯一性判定? 和楼主不太一样,是根据id搜索tb表,判断是否有结果。根据有没有 进行 添加,更新,及删除操作。

这是我们的主键生成机制说明,楼主参考下:
主键产生器的可选项说明:

1) Assigned

主键由外部程序负责生成,无需Hibernate参与。

2) hilo

通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

3) seqhilo

与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

4) increment

主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。

这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

5) identity

采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。

6) seq