2012-12-08 72 views
0

我有一個程序可以將值插入到本地數據庫的表中。它工作正常,但是當我檢查數據庫時,它不會更新。該程序甚至輸出正確的值。我有錯誤地連接到數據庫在MySQL數據庫不從Java更新

connect = 
    DriverManager.getConnection("jdbc:MySQL://localhost/test", "root", ""); 

任何想法爲什麼?

import java.sql.Connection; 
import java.sql.Date; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

//static because when creating an object of it in main, you won't have to make an object of the outer class (SQLProject) first 
public class MySQLAccess{ 
    private Connection connect = null; 
    private Statement statement = null; 
    private PreparedStatement preparedStatement = null; 
    private ResultSet resultSet = null; 

    public void readDatabase() throws Exception 
    { 
     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      connect = DriverManager.getConnection("jdbc:MySQL://localhost/test", "root", ""); 

      statement = connect.createStatement(); 
      System.out.println("here1"); 
      resultSet = statement.executeQuery("select * from test.comments"); 
      writeResultSet(resultSet); 



      preparedStatement = connect.prepareStatement("INSERT INTO test.comments values(default, ?, ?, ?, ?, ?, ?)"); 
      //columsn in test.comments 
      // myuser, email, webpage, datum, summary, COMMENTS 
      preparedStatement.setString(1, "Test"); 
      preparedStatement.setString(2, "TestEmail"); 
      preparedStatement.setString(3, "TestWebpage"); 
      preparedStatement.setDate(4, new java.sql.Date(2009, 12, 11)); 
      preparedStatement.setString(5, "Test Summary"); 
      preparedStatement.setString(6, "Test Comment"); 
      System.out.println("here2"); 
      preparedStatement.executeUpdate(); 

      preparedStatement = connect.prepareStatement("SELECT myuser, webpage, datum, summary, comments FROM test.comments"); 
      System.out.println("here3"); 
      resultSet = preparedStatement.executeQuery(); 
      writeResultSet(resultSet); 

      preparedStatement = connect.prepareStatement("DELETE FROM test.comments WHERE myuser=?;"); 
      preparedStatement.setString(1, "Test"); 
      preparedStatement.executeUpdate(); 

      resultSet = statement.executeQuery("SELECT * FROM test.comments;"); 
      System.out.println("Writing meta data"); 
      writeMetaData(resultSet); 
      connect.setAutoCommit(false); 
      connect.commit(); 
     } 
     catch (Exception e){ 
      throw e; 
     } 
     finally{ 

      close(); 
      System.out.println("ALMOST"); 
      } 
     System.out.println("AT THE END"); 
    } 

    private void writeMetaData(ResultSet resultSet) throws SQLException 
    { 
     System.out.println("The columns in the table are: "); 
     System.out.println("Table: " + resultSet.getMetaData().getTableName(1)); 

     for(int i=1;i<=resultSet.getMetaData().getColumnCount(); i++) 
     { 
      System.out.println("Column " + i + " " + resultSet.getMetaData().getColumnName(i)); 
     } 
    } 

    private void writeResultSet(ResultSet resultSet) throws SQLException 
    { 
     while(resultSet.next()) 
     { 
      String user = resultSet.getString("myuser"); 
      String website = resultSet.getString("webpage"); 
      String summary = resultSet.getString("summary"); 
      Date date = resultSet.getDate("datum"); 
      String comment = resultSet.getString("comments"); 

      System.out.println("User: " + user); 
      System.out.println("website: " + website); 
      System.out.println("summary: " + summary); 
      System.out.println("date: " + date); 
      System.out.println("comment: " + comment); 
     } 
    } 

    private void close() 
    { 
     try{ 
      if(resultSet != null) 
       resultSet.close(); 
      if(statement != null) 
       statement.close(); 
      if(connect != null) 
       connect.close(); 

     } 
     catch(Exception e){ 
      e.printStackTrace(); 

      System.out.println(e); 
     } 
    } 
}//private inner class 

回答

2

connect.setAutoCommit(false);

應立即來初始化連接

connect = DriverManager.getConnection("jdbc:MySQL://localhost/test", "root", ""); connect.setAutoCommit(false);

+0

都能跟得上沒有工作了。 – rasen58

+0

請注意,您正在插入,再次閱讀,然後刪除插入的評論行。所以db不會在事務提交時創建新行 – Subin

+0

如果不是,那麼該怎麼辦?自動提交只需要在某些特定情況下顯式處理,例如需要最後插入的id(作爲示例)。否則,系統會很好地處理它。 – Lion