2014-03-26 52 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

檢查我更新的答案。 –