Resultset.next()while循环打印两次

时间:2013-12-08 07:54:51

标签: java mysql resultset

我正在尝试这个教程代码,它似乎从MySQL打印出我的数据库两次。它来自下面的循环:

 while (resultSet.next()) {
  // It is possible to get the columns via name
  // also possible to get the columns via the column number
  // which starts at 1
  // e.g. resultSet.getString(2);
  String user = resultSet.getString("myuser");
  String email = resultSet.getString("email");
  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("Email: " + email);
  System.out.println("Website: " + website);
  System.out.println("Summary: " + summary);
  System.out.println("Date: " + date);
  System.out.println("Comment: " + comment);

}

该循环打印两次。如果我在循环结束时放置一个break语句,它仍然会打印我的数据库的第一行两次。我认为它与resultSet.next()有关。以下是完整的代码:

package de.vogella.mysql.first;

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

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 {
  // This will load the MySQL driver, each DB has its own driver
  Class.forName("com.mysql.jdbc.Driver");
  // Setup the connection with the DB
  connect = DriverManager
      .getConnection("jdbc:mysql://localhost/feedback?"
          + "user=sqluser&password=sqluserpw");

  // Statements allow to issue SQL queries to the database
  statement = connect.createStatement();
  // Result set get the result of the SQL query
  resultSet = statement
      .executeQuery("select * from FEEDBACK.COMMENTS");
  writeResultSet(resultSet);

  // PreparedStatements can use variables and are more efficient
  preparedStatement = connect
      .prepareStatement("insert into  FEEDBACK.COMMENTS values (default, ?, ?, ?, ? , ?, ?)");
  // "myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
  // Parameters start with 1
  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, "TestSummary");
  preparedStatement.setString(6, "TestComment");
  preparedStatement.executeUpdate();

  preparedStatement = connect
      .prepareStatement("SELECT myuser, email, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
  resultSet = preparedStatement.executeQuery();
  writeResultSet(resultSet);

  // Remove again the insert comment
  preparedStatement = connect
  .prepareStatement("delete from FEEDBACK.COMMENTS where myuser= ? ; ");
  preparedStatement.setString(1, "Test");
  preparedStatement.executeUpdate();

  resultSet = statement
  .executeQuery("select * from FEEDBACK.COMMENTS");
  writeMetaData(resultSet);

} catch (Exception e) {
  throw e;
} finally {
  close();
}

}

private void writeMetaData(ResultSet resultSet) throws SQLException {
//   Now get some metadata from the database
// Result set get the result of the SQL query

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 {
// ResultSet is initially before the first data set
while (resultSet.next()) {
  // It is possible to get the columns via name
  // also possible to get the columns via the column number
  // which starts at 1
  // e.g. resultSet.getString(2);
  String user = resultSet.getString("myuser");
  String email = resultSet.getString("email");
  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("Email: " + email);
  System.out.println("Website: " + website);
  System.out.println("Summary: " + summary);
  System.out.println("Date: " + date);
  System.out.println("Comment: " + comment);

 }
}

// You need to close the resultSet
private void close() {
try {
  if (resultSet != null) {
    resultSet.close();
  }

  if (statement != null) {
    statement.close();
  }

  if (connect != null) {
    connect.close();
  }
} catch (Exception e) {

}

}

0 个答案:

没有答案