简体   繁体   中英

Database how add data without overwriting?

I have a text file looks like:

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

In my program I read this file and add its content to a table in my database which has parameters(name, age, height, weight). The code looks like

    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();

    }

When I run this code this adds george, paul to name column etc. But my problem is when I add a new entry to my file like:

   Rachel   20   175  78

and run the program again, it adds all the values into my database again but I just want to add the newest entry. How can I do that. Is there something like append? Thanks for the help!

First thing, in your code prepared statement has no significance meaning. Means every time prepared statement is created when you call the addpatient method. Besides that you can do like this :

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();
}

And every time you execute the addPatient method, it adds records in current table only.

u can try preparedstatement.clearBatch() method and when u finished a jdbc commit,u should close it. The connection object has close() method;

I suggested that if u have many data to store in one time u can use addBatch() method with PreparedStatement.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM