2013-09-10 4 views
0

У меня есть текстовый файл выглядит следующим образом:Как добавить содержимое файла в базу данных?

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

Я хочу прочитать этот файл и добавить его содержимое в таблицу с параметрами (имя, возраст, рост, вес) в моей базе данных. Имена george, paul, laura должны быть добавлены к именам и т. Д. Я написал такой код.

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

    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];  
     } 
     try { 
      addpatient(connection, preparedstatement, name, age, height, weight); 
      if (connection != null) 
      try{connection.close();} catch(SQLException ignore){} 
      } 
     catch (SQLException error) {System.out.println(error);} 
    } 

    catch (IOException e) {System.out.println("There was a problem: " + e);}   
    } 

    public static void addpatient(Connection connection, PreparedStatement preparedstatement, String name, String age2, String height2, String weight2) 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(); 

} 

Я думаю, что проблема с моим время цикла, может быть, я должен добавить цикл мне не удалось это сделать, я не очень хороший программист, и я ценю помощь. Благодаря!

+0

положить addpatient (соединение, PreparedStatement, имя, возраст, рост, вес); внутри цикла while – newuser

+0

В нем говорится: «После закрытия соединения никаких действий не разрешено». Потому что, когда вы это делаете, вы также принимаете оператор if внутри цикла, но после первого раунда соединения! = Null, поэтому он закрывает – Solijoli

+0

После того, как все данные будут обновлены, а затем только вы закроете соединение. В противном случае он будет открыт – newuser

ответ

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

if (connection != null) 
      try{connection.close();} catch(SQLException ignore){} 
      } 

Поместите addpatient() внутри цикла while, тогда он будет только звонить.

+0

Хорошо, это работает спасибо. Но теперь у меня есть другой вопрос, скажем, из другой программы, я добавляю контент в этот текстовый файл, используя буферную запись. Каждый раз, когда я запускаю эту программу, он снова сохраняет все данные, как я могу просто сохранить новые данные? Спасибо – Solijoli

+0

укажите любую идентификацию в файле перед тем, как добавить пример контента (дата или что-то еще). или удалить все содержимое файла перед добавлением содержимого в файл. Извините за поздний ответ – newuser

0

Вы делаете это неправильно. Что вам нужно сделать, это добавить значения в PreparedStatement в петле, а затем выполнить оператор из стороны петли

preparedstatement = //Initialize 
while(condition){ 
    preparedstatement.setString(1, name); 
    preparedstatement.setString(2, age); 
    preparedstatement.setString(3, height); 
    preparedstatement.setString(4, weight); 
    preparedstatement.addBatch(); 
} 
preparedstatement.executeBatch(); 
Смежные вопросы