请教各位大虾,如何在不同的大类里添加相同名称的子类呢?

代码是书上的,源代码不允许子类重名,现因需要,要将其改成允许重名,请问如何修改?谢谢。

涉及添加子类的代码如下:
SubcateView.java:
......
String subName = txtSubName.getText().trim();
// 检查是否填写类别名
......
Collection sc = DBWorker.selSubcate(subName,SubcateSelType.BY_NAME);
if (!sc.isEmpty()) {
// 如果已存在该类别名
JOptionPane.showMessageDialog(frame, "该类别名已经存在!添加失败!",
"提示", JOptionPane.WARNING_MESSAGE);
txtSubName.requestFocus();
sc = null;
return;
}
sc = null;
String cateID = cboCateID.getSelectedItem().toString();
// 执行添加操作
String proc = "proc_addSubcate ('" + subName + "'," + cateID + ")";
int rowcount = DBWorker.modifyRecord(proc);
if (rowcount != 0) {
// 如果rowcount(影响行数)不等于0,则表明完成添加操作
JOptionPane.showMessageDialog(frame, "添加成功", "提示",
JOptionPane.INFORMATION_MESSAGE);
// 更新表格的显示
setTableModel(table,
DBWorker.selCate(" ", CateSelType.ALL), head);
// 更新树结构
DefaultMutableTreeNode root = new DefaultMutableTreeNode(
"固定资产管理系统--类别");
frame.trp.addNodes(frame.trp.tree, root, frame.trp
.getNodes());
frame.trp.setTreeModel(frame.trp.tree, root);
txtName.setText("");
txtSubName.setText("");
} else {
// 如果rowcount等于0,则表明执行添加时发生异常
JOptionPane.showMessageDialog(frame, "数据库访问错误,添加失败!", "错误",
JOptionPane.ERROR_MESSAGE);
}

里面涉及的添加子类的存储过程如下:
proc_addSubcate:
ALTER proc [dbo].[proc_addSubcate]
@Sname varchar(40),
@Cid int
as
declare @Sid int
set @Sid = (select max(Sid) from subcate where SCid = @Cid) + 1--找出指定大类的最大子类编号并加1
if @Sid is null--如果子类表中指定大类编号没有记录
set @Sid = @Cid * 100--由大类编号得到子类编号
--插入新记录
insert into subcate(Sid,Sname,SCid)
values(@Sid,@Sname,@Cid)

第1个回答  2011-12-17
这个你看数据表中设置了吗?sname是否允许重复值如果有去除就可以了。

同时把这个校验去掉。

if (!sc.isEmpty()) {
// 如果已存在该类别名
JOptionPane.showMessageDialog(frame, "该类别名已经存在!添加失败!","提示", JOptionPane.WARNING_MESSAGE);
txtSubName.requestFocus();
sc = null;
return;
}

其实把上面这个校验去掉就可以了。一般数据中没人这么设置。除非是主键ID。。追问

有关sname的sql语句节选如下,你看如何去掉允许重复值呢?
CONSTRAINT [uq_Sname] UNIQUE NONCLUSTERED
(
[Sname] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

追答

不需要了,你直接把我上面那句话,注释掉就行了。

追问

能否留个QQ?我刚才试了下注释掉还是不行,提示数据库访问错误,添加失败!

追答

= = 数据库访问错误,很明显是你数据库连接存在问题。
检查你的数据库服务是否启动。
如服务启动,检查你的链接,用户名,密码是否错误
或者你的数据库存在的机器,是否启动,就是这几个错误。很容易调试的。

你这个是引发的另一个问题。我QQ就是用户名

相似回答