2016-11-17 40 views
0

RS始終是真實的,即使表的員工是不存在的servlet的數據庫,要創建表只有當表不存在於數據庫 的,哪些是SELECT count(*)FROM INFORMATION_SCHEMA.TABLES WHERE(TABLE_SCHEMA = 'servlet') AND (TABLE_NAME = 'employee')" 當PreparedStement執行和結果存儲ResultSet中時表不存在,當表是有兩種情況RS始終是真實的,即使表的員工是不存在的servlet數據庫

public class Table { 
public static void main(String[] args) 
{ 
Connection con=null; 
PreparedStatement pstmt=null; 
PreparedStatement pstmt1=null; 
PreparedStatement pstmt2=null; 
ResultSet rs=null; 
String qry="SELECT count(*)FROM INFORMATION_SCHEMA.TABLES WHERE(TABLE_SCHEMA = 'servlet') AND (TABLE_NAME = 'employee')"; 
String qry1="CREATE TABLE servlet.Employee (" + 
      " ID INT(6) NOT NULL AUTO_INCREMENT, " + 
      " NAME VARCHAR(50) NOT NULL, " + 
      " Department varchar(20) NOT NULL, " + 
      " Salary DECIMAL(8,2) NOT NULL, " + 
      " PRIMARY KEY (ID))"; 
String qry2="insert into servlet.Employee values(?,?,?,?)"; 

Class.forName("com.mysql.jdbc.Driver"); 
con=DriverManager.getConnection("jdbc:mysql://localhost:3306?user=root&password=passworD"); 
pstmt=con.prepareStatement(qry); 
rs=pstmt.executeQuery(); 
System.out.println(rs.next()); 
    if(true==!rs.next()){ 
    pstmt1=con.prepareStatement(qry1); 
    pstmt1.executeUpdate(); 
    pstmt2=con.prepareStatement(qry2); 
    pstmt2.setInt(1,id); 
    pstmt2.setString(2, name); 
    pstmt2.setString(3, dept); 
    pstmt2.setDouble(4, salary); 
    pstmt2.executeUpdate(); 
    } 
    else{ 

    pstmt2=con.prepareStatement(qry2); 
    pstmt2.setInt(1,id); 
    pstmt2.setString(2, name); 
    pstmt2.setString(3, dept); 
    pstmt2.setDouble(4, salary); 
    pstmt2.executeUpdate(); 
    } 
} 

} 

回答

1

如果表中存在的值將是1否則會0將返回。所以一個記錄總是存在的。正如文檔所述:

ResultSet.next:將光標向前移動一行。如果光標現在位於一行上,則返回true;如果光標位於最後一行之後,則返回false。

rs.next將始終返回true,因爲它將光標定位在您的案例的第一條記錄上。您需要根據count(*)的值處理邏輯。你不需要else子句,因爲你沒有做任何不同的事情。

if(rs.next()) 
    int count = rs.getInt(1); 
    if (count == 0) { 
    pstmt1=con.prepareStatement(qry1); 
    pstmt1.executeUpdate(); 
    } 
    pstmt2=con.prepareStatement(qry2); 
    pstmt2.setInt(1,id); 
    pstmt2.setString(2, name); 
    pstmt2.setString(3, dept); 
    pstmt2.setDouble(4, salary); 
    pstmt2.executeUpdate(); 
} 
+0

謝謝,但爲什麼rs總是對的 –

+0

你的問題解決了嗎? – randominstanceOfLivingThing

+0

是的我的問題已經解決,但我不明白什麼是錯誤的邏輯應用我的(!rs.next())是真正的時,表不存在,它應該只有當表不存在時,其餘的代碼應該像你糾正的一樣工作@randominstanceoflivingthing –

相關問題