0

我有一个文本文件,如下所示:

    george   19   180     75
    paul     20   182     84
    laura    21   176     73
    ...      ...  ...     ...

在我的程序中,我读取了这个文件并将其内容添加到我的数据库中的一个表中,该表具有参数(姓名、年龄、身高、体重)。代码看起来像

    public static void main(String[] args) throws IOException, SQLException {

    PreparedStatement preparedstatement = null;

    try{
        String read=null;
        in = new BufferedReader(new FileReader("patientlist.txt")); 
        while ((read = in.readLine()) != null) {
            String[] splited = read.split("\\s+");
            name=splited[0];
            age=splited[1];
            height=splited[2];
            weight=splited[3];      
            addpatient(connection, preparedstatement, name, age, height, weight);
        }
    }
    catch (IOException e) {System.out.println("There was a problem: " + e);}
        if (connection != null)
        try{connection.close();} catch(SQLException ignore){} 
    }

    public static void addpatient(Connection connection, PreparedStatement preparedstatement, String name, String age, String height, String weight) throws SQLException{
    preparedstatement=connection.prepareStatement("insert into allpatients(name, age, height, weight) values(?,?,?,?)");
    preparedstatement.setString(1, name);
    preparedstatement.setString(2, age);
    preparedstatement.setString(3, height);
    preparedstatement.setString(4, weight);
    preparedstatement.executeUpdate();

    }

当我运行此代码时,这会将乔治、保罗添加到名称列等。但我的问题是当我向我的文件中添加一个新条目时,例如:

   Rachel   20   175  78

并再次运行程序,它将所有值再次添加到我的数据库中,但我只想添加最新条目。我怎样才能做到这一点。有没有类似追加的东西?谢谢您的帮助!

4

2 回答 2

0

首先,在您的代码中准备好的语句没有任何意义。意味着每次调用addpatient方法时都会创建准备好的语句。除此之外,您还可以这样做:

In your main method :
{
    preparedstatement=connection.prepareStatement("insert into allpatients(name, age, height, weight) values(?,?,?,?)");

   //Your rest code comes here

    addPatient(preparedstatement,name,age,height,weight);
}

public static void addPatient(PreparedStatment preparedstatement, String name, String age, String height, String weight ){
    preparedstatement.setString(1, name);
    preparedstatement.setString(2, age);
    preparedstatement.setString(3, height);
    preparedstatement.setString(4, weight);
    preparedstatement.executeUpdate();
}

并且每次执行 addPatient 方法时,它只添加当前表中的记录。

于 2013-09-10T12:10:44.110 回答
-1

您可以尝试preparedstatement.clearBatch() 方法,当您完成jdbc 提交时,您应该关闭它。连接对象有 close() 方法;

我建议如果你有很多数据要一次存储,你可以使用带有 PreparedStatement 的 addBatch() 方法。

于 2013-09-10T12:13:18.847 回答