2014-03-26 66 views
1

我正在使用servlets.jdbc连接jdbc odbc,但得到了java.sql.SQLException:没有找到数据。可能是什么原因。请帮助。我一直在寻找我的错误,但是,直到现在还没有得到它。找不到数据例外

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',?,?,?,?,?,?,?,?)"); 

这里字符串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 
+2

你已经发布了90行代码,但没有提供* where引发异常的迹象。理想情况下,你应该努力尽可能减少这些,这样你发布的代码*就包含重现问题所需的内容。 (你需要*所有*这些查询和非查询来重现这个问题?) –

+0

@JonSkeet在执行ps2之前,我打印了所有用于设置ps2的值。他们打印的是正确的。但我不知道什么是错误的在此之后 – user3462609

+0

这并没有真正回答我的问题。它*建议*它是抛出异常的'ps2.execute()',但你应该更清楚一点 - 并删除你的问题中不必要的东西。 –

回答

1

这是一个完整的猜测,但你为什么这样做呢?如果它有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存在与否。*

正如我认为你错位sql1 and sql2

在你的代码而且要设置

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

而G_ADMINID有大小VARCHAR2(5)

很抱歉,如果我出了问题。

+0

实际上代码在ps2之前运行正常我打印所有rs2.getString(1),n1,n2,n3和所有之前,分配给他们他们是绝对罚款 – user3462609

+0

检查我更新的答案。 –