【问题标题】:No data found Exception未找到数据异常
【发布时间】:2014-05-05 03:32:23
【问题描述】:

我正在使用 servlets 进行 jdbc odbc 连接。但是我得到 java.sql.SQLException: No data found.what could be the reason.?请帮助。我从一天开始就在寻找我的错误但无法得到到现在为止。

Connection con=null;
PreparedStatement ps=null,ps1=null,ps2=null;
ResultSet rs=null,rs1=null;


con=DriverManager.getConnection("jdbc:odbc:SharedCryptography", "fyp", "fyp");
ps=con.prepareStatement("insert into tbGroup values ('G0',?,?,?,'Y')");
ps2=con.prepareStatement("insert into tbGroupAdmin values ('U0',?,?,?,?,?,?,?,?)");  

这里的String n1,n2,n3,n4,n5,n6,n7,n8是从html表单获取的字符串

String sql1 = "SELECT GNAME,OEMAIL FROM tbGroup where GNAME = '"+n1+"' and OEMAIL = '"+n3+"'" ;          
ps1 = con.prepareStatement(sql1);
rs=ps1.executeQuery();
if(rs.next()){
  out.println("THIS GROUP WITH SAME ID EXISTS");  
}
else{
    ps.setString(1,n1);
    ps.setString(2,n3);
    ps.setString(3,n5);
    ps.execute();
    out.println("inserted");
    ResultSet rs2=null;

    String sql2="SELECT G_ID FROM tbGroup where GNAME like '"+n1+"' and OEMAIL like '"+n3+"'";
    PreparedStatement ps3 = con.prepareStatement(sql2);
    rs2=ps3.executeQuery();

    rs2.next();
    String mypassword="password";
    ps2.setString(1,rs2.getString(1));
    ps2.setString(2,n2);
    ps2.setString(3,mypassword);
    ps2.setString(4,n6);
    ps2.setString(5,n7); 
    ps2.setString(6,n3);
    ps2.setString(7,n4);
    ps2.setInt(8,Integer.parseInt(n8));
    ps2.execute();

}

我的数据库有两个表:

表 1:tbGroup

G_ID    VARCHAR2(10)    
GNAME   VARCHAR2(20)        
OEMAIL  VARCHAR2(50)        
Agenda  VARCHAR2(50)    
Status  CHAR(5)         

表 2:tbGroupAdmin

GADMIN_ID           VARCHAR2(5) 
GA_GROUPID          VARCHAR2(5) 
GA_NAME         VARCHAR2(20)
GA_PASSWORD         VARCHAR2(20)    
GA_FNAME            VARCHAR2(20)    
LastName            VARCHAR2(20)    
GA_EmailId          VARCHAR2(50)    
GA_ContactNumber    VARCHAR2(20)    
GA_Age          NUMBER  

【问题讨论】:

  • 您已经发布了 90 行代码,但没有给出引发异常的在哪里的指示。理想情况下,您应该尽可能减少这种情况,以便您发布的代码 just 包含重现问题所需的内容。 (您是否需要所有这些查询和非查询才能重现问题?)
  • @JonSkeet 在执行 ps2 之前,我打印了我用来设置 ps2 的所有值。它们打印正确。但我不知道之后发生了什么问题
  • 这并没有真正回答我的问题。它建议ps2.execute() 引发了异常,但您应该对此更清楚 - 并从您的问题中删除任何不必要的内容。
  • @JonSkeet 我发布了整个代码,这样他们在解释它时就没有问题了。是的,我也同意他们是 ps2.execute() 的问题。但是什么问题没有得到它
  • 我还不知道——你能确定的越多,我们就越有可能找到原因。这就是我的观点。

标签: java sql servlets jdbc


【解决方案1】:

这是一个完整的猜测,但你为什么要这样做?

if(rs.next()){
  out.println("THIS GROUP WITH SAME ID EXISTS");  
}

如果它有row,它将返回true。 从这里我知道你要检查是否有这个ID的行?

你在上面做的是

String sql1 = "SELECT GNAME,OEMAIL FROM tbGroup where GNAME = '"+n1+"' and OEMAIL = '"+n3+"'"; 

你需要做的是

select G_ID from tbGroup where GNAME = '"+n1+"' and OEMAIL = '"+n3+"'"; 

*这样您就可以确定是否存在相同的G_ID。*

我认为你放错了 sql1sql2

此外,在您正在设置的代码中

ps2.setString(1,rs2.getString(1));//this string may have size>5 as G_ID has size 10

而 G_ADMINID 的大小为 VARCHAR2(5)

对不起,如果我错了。

【讨论】:

  • 实际上代码在 ps2 执行之前运行良好。我打印了所有 rs2.getString(1),n1,n2,n3 以及所有在将其分配给 db 之前它们绝对没问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2019-07-27
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多