2013-03-10 85 views
0
import java.sql.*; 
public class Login 
{ 
    public static void main(String args[]) throws SQLException 
    { 
     Connection con = null; 
     PreparedStatement stmt = null; 
     Statement st = null; 
     try { 
      Driver driver = new oracle.jdbc.driver.OracleDriver(); 
      DriverManager.registerDriver(driver); 
      System.out.println("coneecting to the database:"); 
      con = DriverManager.getConnection("driverURL","usrr","pass"); 
      System.out.println("creating statement"); 
      String sql = "Update abhi SET age = ? WHERE id = ?"; 
      stmt = con.prepareStatement(sql); 
      stmt.setInt(1, 35); 
      stmt.setInt(2,102); 
      int rows = stmt.executeUpdate(); 
      S.O.P("rows updated"+rows); 
      stmt.close(); 
      String sql2; 
      sql2 = "select * from abhi"; 
      st = con.createStatement(); 
      ResultSet rs = st.executeQuery(sql2); 
      while(rs.next()) 
      { 
       System.out.println("hi"); 
       int age = rs.getInt("age"); 
       System.out.println("age is"+age); 
      } 
      rs.close(); 
      stmt.close(); 
      con.close(); 
     } 
     catch(SQLException e) { 
      e.printStackTrace(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 
      try { 
       if (st != null) 
        st.close(); 
      } 
      catch(Exception e) { 
       // nthing to do 
      } 
      try { 
       if(con != null) 
        con.close(); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     System.out.println("good bye johny"); 
    } 
} 

這是我的代碼,它的prefectly乳寧沒有任何錯誤......但在我的數據庫的NT 更新我無法明白其中的道理就任何機構幫助我 與價值觀爲什麼它的NT更新的價值年齡其中id是102 ...如何有效地使用prepared語句?

+4

我沒有看到提交。 (請儘量和格式化你的代碼,這真的很難跟隨你的貼吧。) – Mat 2013-03-10 10:40:28

回答

0

嘗試使用

con.setAutoCommit(false); 


con.commit(); 
0

在Oracle中,

的默認數據庫事務模式是兩階段提交。

即插入或更新數據,

你應該明確地提交操作,在Oracle數據庫中留存數據之後。

但在這裏,我沒有看到你的代碼中有任何提交。

可以在代碼中檢查此問題嗎?

你應該使用 -

con.setAutoCommit(false);在代碼的begining

con.commit(); to commit the data 
+0

但我的代碼也顯示行0更新 – ricky 2013-03-10 10:53:10

+0

coneecting到數據庫: 創建聲明 再見約翰尼拉 我只是得到這個O/P即使我使用上面1 ......... con.commit更新後查詢 – ricky 2013-03-10 11:05:06

+0

我仍然無法理解我的代碼中的問題...我已經包括CON.COMMIT()後STMT.EXECUTEuPDATE() ; – ricky 2013-03-10 11:15:57

0

正如其他人所提到的,儘量使用連接提交這樣。

import java.sql.*; 
public class Login 
{ 
public static void main(String args[]) throws SQLException 
{ 
    Connection con = null; 
    PreparedStatement stmt = null; 
    Statement st = null; 
    try 
    { 
     Driver driver = new oracle.jdbc.driver.OracleDriver(); 
     DriverManager.registerDriver(driver); 
     System.out.println("coneecting to the database:"); 

    con = DriverManager.getConnection("driverURL","usrr","pass");  
    con.setAutoCommit(false); 
    System.out.println("creating statement"); 

    String sql = "Update abhi SET age = ? WHERE id = ?"; 

    stmt = con.prepareStatement(sql); 

    stmt.setInt(1, 35); 

    stmt.setInt(2,102); 

    int rows = stmt.executeUpdate(); 

    S.O.P("rows updated"+rows); 

    stmt.close(); 
    con.commit(); 
    String sql2; 

    sql2 = "select * from abhi"; 

    st = con.createStatement(); 

    ResultSet rs = st.executeQuery(sql2); 

    while(rs.next()) 
    { 
     System.out.println("hi"); 


     int age = rs.getInt("age"); 

     System.out.println("age is"+age); 
    } 

       rs.close(); 

    stmt.close(); 

    con.close(); 
} 

catch(SQLException e) 
{ 
    e.printStackTrace(); 
} 
catch (Exception e) 
     { 
    e.printStackTrace();  
} 
finally 
{ 
    try 
    { 
     if(st!=null) 
      st.close(); 
    } 

    catch(Exception e) 
    { 
       // nthing to do 

       } 
    try 
    { 
     if(con!=null) 

     con.close(); 
    } 
    catch (Exception e) 
    { 

       e.printStackTrace(); 

       } 


     } 

     System.out.println("good bye johny"); 

     } 
+0

謝謝大家,但我明白了,我在寫查詢時犯了一些錯誤 – ricky 2013-03-10 15:35:57

相關問題