我在jsp页面上填写数据 之后确定 在email不在原来的a表的时候有错误
user register failed:No data - zero rows fetched, selected, or processed我的触发器如下CREATE TRIGGER `a_insert` BEFORE INSERT ON `a` FOR EACH ROW BEGIN
declare bIDexists int default 0;
select id into bIDexists from a where email=NEW.email limit 1;
IF bIDexists>0 THEN
set new.SuperId=bIDexists;
insert ignore into b values(bIDexists);
else
set new.superId=LAST_INSERT_ID()
end if;
END;;
DELIMITER ;这个触发器字单独在数据库里用没有任何问题 。
用mysql的gui 工具测试 insert into a(email ,superid) values('sss',LAST_INSERT_ID())
insert into a(email) values('sssd') 都是没有问题的但是现在应用的架构是mysql+linux+java我在jsp页面上填写数据 之后确定 在email不在原来的a表的时候有错误
user register failed:No data - zero rows fetched, selected, or processed如果email是a表存在的(比如以前a表有条记录的email是 a@163。com, 你在页面上填入这个旧email,这条记录可以添加成功), 填完数据点 【确定】 是正确 ;反过来,如果email是a表不存在的, 会发生以上错误user register failed:No data - zero rows fetched,。原因 ???
user register failed:No data - zero rows fetched, selected, or processed我的触发器如下CREATE TRIGGER `a_insert` BEFORE INSERT ON `a` FOR EACH ROW BEGIN
declare bIDexists int default 0;
select id into bIDexists from a where email=NEW.email limit 1;
IF bIDexists>0 THEN
set new.SuperId=bIDexists;
insert ignore into b values(bIDexists);
else
set new.superId=LAST_INSERT_ID()
end if;
END;;
DELIMITER ;这个触发器字单独在数据库里用没有任何问题 。
用mysql的gui 工具测试 insert into a(email ,superid) values('sss',LAST_INSERT_ID())
insert into a(email) values('sssd') 都是没有问题的但是现在应用的架构是mysql+linux+java我在jsp页面上填写数据 之后确定 在email不在原来的a表的时候有错误
user register failed:No data - zero rows fetched, selected, or processed如果email是a表存在的(比如以前a表有条记录的email是 a@163。com, 你在页面上填入这个旧email,这条记录可以添加成功), 填完数据点 【确定】 是正确 ;反过来,如果email是a表不存在的, 会发生以上错误user register failed:No data - zero rows fetched,。原因 ???
if(user.getEmail()!= null)
{
if(isEmailExists(conn,user.getEmail()) >0 )
ps.setInt(29, isEmailExists(conn,user.getEmail()));
else
ps.setInt(29, LAST_INSERT_ID()); ----------------这个地方编译错误
}
else
ps.setInt(29, 0);
ps.executeUpdate();不知道有什么方法 可以让
ps.setInt(29, LAST_INSERT_ID())走通???
ps.setString(29, "LAST_INSERT_ID()");???
在java里跳不过去 即使放到 mysql执行 发现最后得到字段值 是0
不是 153432这id值不知道有其他的替换方法
# //Get the DISCOUNT_ID from the last INSERT statement.
# String identityQuery = "SELECT @@IDENTITY AS IDENTITY";
# Statement identityStatement = connection.createStatement();
# ResultSet identityResultSet = identityStatement.executeQuery(identityQuery);
# identityResultSet.next();
# int discountId = identityResultSet.getInt("IDENTITY");
# identityResultSet.close();
# identityStatement.close(); 得到上次插入的id值, 如果是这样 要分2次进行
第1次插入
之后进行udpate superID
这个a表的id是自动增长
上面的insert语句希望superId能得到 当钱自动增长的id值
if(user.getEmail()!= null)
{
int nSuperId=isEmailExists(conn,user.getEmail());
if(nSuperId >0 )
{
updateSuperID(conn,nSuperId,nLastID);
DAO.insertLimitBySuperid(conn, nLastID+"", nSuperId+"");
}
else
{
updateSuperID(conn,nLastID,nLastID);
DAO.insertLimitBySuperid(conn, nLastID+"", nLastID+"");
}
}
;
user.setId(nLastID); } finally {
DBConnection.closeRS(rs);
DBConnection.closeStmt(ps);
}
public static int isUserExists (Connection conn, String userName) throws SQLException
{
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(_sqlisUserExists); ps.setString(1, userName);
ps.setLong(2, passwrod); rs = ps.executeQuery();
if (rs.next()) {
return rs.getInt(1);
}
} finally {
DBConnection.closeRS(rs);
DBConnection.closeStmt(ps)
} return -1;
}
update ----------------ps.executeUpdate ();