我在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,。原因 ???

解决方案 »

  1.   

    给出你的 create table 语句,然后到一般普通日志中看一下JSP提交的SQL语句实际上是什么。
      

  2.   

    a(id ,email , superID) 
    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())走通???
      

  3.   

     LAST_INSERT_ID() 是MYSQL的函数,不是java的函数,当前无法使用了。
      

  4.   

    可以这样用吗 
    ps.setString(29, "LAST_INSERT_ID()");???
      

  5.   

    ps.setString(29, "LAST_INSERT_ID()");
    在java里跳不过去 即使放到 mysql执行  发现最后得到字段值 是0  
    不是 153432这id值不知道有其他的替换方法
      

  6.   

    #
    #             //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
      

  7.   

    insert a( emai,superId)  
    这个a表的id是自动增长
    上面的insert语句希望superId能得到  当钱自动增长的id值
      

  8.   

    int nLastID=isLastInsertID(conn);
    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 ();