2012-04-16 3 views
0

привет Я новичок в Java, и я вставить в в в базу данных, используя цикл из массива он занимает много времени, как бы я вставить данные в БД в качестве сыпучего вставки мой код здесь,Java Bulk Loose Loops Loops Ввод временного кода?

if(con != null) 
      { 

        rs = dboperation.DBselectstatement(con,"select host_object_id from nagios_hosts where address='"+ip+"'"); 

        if (rs != null) 
        { 
         rs.next(); 
         String id = rs.getString(1); 
         for(int i= 0;i<serviceArray.length;i++) 
         {   
         status.append(serviceArray[i]+"\n"); 
         dboperation.DbupdateStatement(DbAcess.getNagios_connection(),"insert into nagios_servicelist(service_name,host_object_id) values('"+serviceArray[i]+"','"+id+"')"); 
         } 
        } 

      } 

не идут подробно о этот код я скажу вам, что я получаю идентификатор от первого запроса в наборе результатов «rs», а «servicearray» имеет службы, которые я хочу вставить в Db, но требуется время в цикле, как я буду делать массивную вставку массива в базе данных?

надежды слушать от вас скоро

Заранее спасибо

ответ

2

Вы shuld использовать JDBC массовой вставки для вашей цели -

//Create a new statement 
Statement st = con.createStatement(); 

//Add SQL statements to be executed 
st.addBatch("insert into nagios_servicelist(service_name,host_object_id) values('"+serviceArray[0]+"','"+id+"')"); 
st.addBatch("insert into nagios_servicelist(service_name,host_object_id) values('"+serviceArray[1]+"','"+id+"')"); 
st.addBatch("insert into nagios_servicelist(service_name,host_object_id) values('"+serviceArray[2]+"','"+id+"')"); 

// Execute the statements in batch 
st.executeBatch(); 

Вы можете вставить свою собственную логику здесь. Но это обзор того, как это сделать.

+0

У меня есть много значений в массиве, так что я придется использовать цикл для вашего кода ?? –

+0

Да, вам нужно использовать цикл. – Pushkar

+0

, но если я буду использовать цикл, он снова займет столько времени, сколько займет мой цикл в моем коде ??? –

1

Следующий код позволяет избежать ошибок из памяти, а также SQL инъекции

String sql = "insert into employee (name, city, phone) values (?, ?, ?)"; 
Connection connection = new getConnection(); 
PreparedStatement ps = connection.prepareStatement(sql); 

final int batchSize = 1000; 
int count = 0; 

for (Employee employee: employees) { 

    ps.setString(1, employee.getName()); 
    ps.setString(2, employee.getCity()); 
    ps.setString(3, employee.getPhone()); 
    ps.addBatch(); 

    if(++count % batchSize == 0) { 
     ps.executeBatch(); 
    } 
} 
ps.executeBatch(); // insert remaining records 
ps.close(); 
connection.close();