Java Resultset.next()while循环打印两次和
我正在尝试这个教程代码,它似乎从MySQL打印出了我的数据库两次。它来自下面的while循环:Java Resultset.next()while循环打印两次和,java,mysql,resultset,Java,Mysql,Resultset,我正在尝试这个教程代码,它似乎从MySQL打印出了我的数据库两次。它来自下面的while循环: 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
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) {
}
package de.vogella.mysql.first;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.sql.Statement;
导入java.util.Date;
公共类MySQLAccess{
私有连接connect=null;
私有语句=null;
private PreparedStatement PreparedStatement=null;
私有ResultSet ResultSet=null;
public void readDataBase()引发异常{
试一试{
//这将加载MySQL驱动程序,每个数据库都有自己的驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
//设置与数据库的连接
connect=DriverManager
.getConnection(“jdbc:mysql://localhost/feedback?"
+“user=sqluser&password=sqluserpw”);
//语句允许向数据库发出SQL查询
语句=connect.createStatement();
//结果集获取SQL查询的结果
结果集=语句
.executeQuery(“从FEEDBACK.COMMENTS中选择*);
writeResultSet(结果集);
//PreparedStatements可以使用变量,效率更高
preparedStatement=connect
.prepareStatement(“插入到FEEDBACK.COMMENTS值中(默认值),,,,,,,,,,,)”;
//“我的用户、网页、数据、摘要、反馈意见。意见”);
//参数以1开头
编制报表。设置字符串(1,“测试”);
准备好的报表。设置字符串(2,“测试邮件”);
准备好的声明。设置字符串(3,“测试网页”);
setDate(4,新java.sql.Date(2009-12-11));
编制报表。设置字符串(5,“测试摘要”);
准备好的声明。集合字符串(6,“测试注释”);
preparedStatement.executeUpdate();
preparedStatement=connect
.prepareStatement(“从反馈中选择myuser、电子邮件、网页、数据、摘要、评论”);
resultSet=preparedStatement.executeQuery();
writeResultSet(结果集);
//再次删除插入注释
preparedStatement=connect
.prepareStatement(“从FEEDBACK.COMMENTS中删除,其中myuser=?;”;
编制报表。设置字符串(1,“测试”);
preparedStatement.executeUpdate();
结果集=语句
.executeQuery(“从FEEDBACK.COMMENTS中选择*);
writeMetaData(结果集);
}捕获(例外e){
投掷e;
}最后{
close();
}
}
私有void writeMetaData(ResultSet ResultSet)引发SQLException{
//现在从数据库中获取一些元数据
//结果集获取SQL查询的结果
System.out.println(“表中的列为:”);
System.out.println(“表:+resultSet.getMetaData().getTableName(1));
对于(int i=1;i)您的代码调用writeResultSet()两次:一次在插入之前,一次在插入之后。可能打印了两次,因为您调用了两次?查找writeResultSet调用。尝试注释第一个writeResultSet()。然后执行。以连词结尾的标题?我肯定会看一看,但是