作者:手机用户2702933567 | 来源:互联网 | 2023-08-31 15:54
java.sql.SQLException:[Microsoft][ODBCSQLServerDriver][SQLServer]INSERT?句与COLUMNFOREIGNKEY
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]INSERT ?句与 COLUMN FOREIGN KEY ?发生'FK_users_userOrder' ?冲突。?冲突发生于?用户? 'liu',表 'userOrder', column 'id'。
Connection aborted by peer:socket write error
有没有解决的方法呢??
21 个解决方案
程序的源代码如下
<%@ page
language="java"
errorPage="bookStoreErr1.jsp"
import="java.sql.*,
java.io.*,
xbook.common.*,
xbook.bookstore.*;"
cOntentType="text/html; charset=Big5" %>
id="connPool" scope="application"
type="xbook.common.ConnPool" />
" />
" />
<%
String password = userPassword.getPassword();
String[] id = userTbl.getId();
try{
if( ( id == null ) || ( id[0].trim().length() == 0 ) ){
sqlBridge.closeDB();
throw new Exception( "请从首页进入" );
}
sqlBridge.execSQL( "select * from users where id = '" + util.ISO88591ToBig5( id[0] ) + "'" );
if( sqlBridge.nextRow() )
throw new SQLException( "id : " + util.ISO88591ToBig5( id[0] ) + " 已经存在" );
sqlBridge.execSQL( util.ISO88591ToBig5( "insert into users values( '" +
id[0] + "', '" +
password + "', '" +
userTbl.getName()[0] + "', '" +
userTbl.getSex()[0] + "', '" +
userTbl.getAge()[0] + "', '" +
userTbl.getVocation()[0] + "', '" +
userTbl.getTel()[0] + "', '" +
userTbl.getFax()[0] + "', '" +
userTbl.getAddr()[0] + "', '" +
userTbl.getEmail()[0] + "', 'n')" ) );
}
catch( SQLException sqlex ){
sqlBridge.closeDB();
throw sqlex;
}
sqlBridge.closeDB();
%>
' />
' />
' />
它说主关键字重复,你看看是否添加时关键字与以前的记录重复
大虾,你说是向数据库中的表userOrder添加数据时,发生id冲突吗?
但是我试过注册时申请不同的帐号和用户名还是不行,请问怎么改写??
我的数据库中的表usrOrder是空的,没有数据呀?
Sorry,看错了,不是关键字冲突,而是外键。你的这个表与另一个表做了外键关联,你看一下是哪一个,那么对应的字段必须那个表有这条数据,这个表的相应字段才能插入这个数据
还有,我打开我的注册用户的查询网页时,系统提示说没找到java.lang.string类,这是怎么回事??我有jdk呀
1.你看看数据库中users表和userOrder表是否有外键连接?
2.java.lang.string --> java.lang.String
它们是用userID连接的,一共是三个表连接
还有一个表作为管理员登录的表
最简单的方法,把连接删掉。
否则比如你要加userID为3的数据,先在userOrder中加入userID为3的数据
如果把连接删掉,那表和表之间不就没联系了吗??
先加入数据,会不会发生用户已经存在呢??
我不是让你在user表中加,是在userOrder表里加。表是你建立的吗?怎么会不清楚表的连接关系呢?
表是我建的
但是我不明白,在userOrder表中添加一个userID后才能向表中添加数据,那帐号是管理员给的,而不是用户注册产生的吧???
还有大虾,小弟正在用jsp制作电子商务课题,有很多不懂的地方,问题幼稚点,请您见量。
大虾,能否和您用email联系呢??
我不大明白你想如何做。如果userID是系统自动产生的,且要求userOrder中有这个id,user中才能有对应的id,那么外键是可以要的,如果是用户输入的或者不需要userOrder和user间的关系,那么外键应该删掉。
在第一种情况下,你在新建user前,应该新建一条userOrder,然后将id作为新建userOrder的id
能说的更具体点吗??
说实话,我不是很懂。但是要是用户注册的话,那个id应该是系统产生的!!但是要是管理员的话
那个id应该是管理员给的
您有这方面的列子吗??
还有,能不能和您email联系呢?
用户注册时,你先生成一个id,并且在userOrder中用这个id加一条记录,然后用id加用户信息到user表。
管理员加用户时,管理员应该输入一个id,也是一样,用这个id加一条记录,然后用id加用户信息到user表。
brentivan@163.net
那大虾,您说的是让我在sql中先建立id,然后在tomcat中在试一下能否添加数据吗?
我点击提交按钮时,就出现错误信息,在浏览器里是没法产生id的
大虾,您做过类似课题吧,现在还有没有源代码??
谢谢,您能给我email,我会好好珍惜的
东西是做过,不过给你看也没用,没有共通性的。
你的id既然是系统生成的,总该有一定规则吧,比如说顺序编号。那你在新建时,就用顺序编号的方法生成一个id。(我说的这些都是用程序做,当然你在实验的时候用sql做也可以。)
那您用过sql吗?
怎么要求id按递增顺序
jsp说实话,实现起来真没asp容易,但我将来是做java的程序员,不知道明天会如何?
也不知道,jsp和java的命运如何??呵呵
如果你的id是数字型的可以
sSql ="Select IsNull(Max(id), 0) + 1 From userOrder"
然后执行sSql,用rs.getLong(0)取出最大id + 1,就是下一次添加数据时应该用的id了。
如果是字符型,麻烦一点
sSql ="Select Convert(Char, Convert(Int, IsNull(Max(id), '0')) + 1) From userOrder"
然后用rs.getString(0)取出
我的id是varchar型的
那要是用您的方法,您看一下我上面程序的源代码,应该把它加入到哪里??
还有,定义sSql时候,用String sSQl=