2015-07-11 4 views
0

это мой код для хранения arraylist в базе данных, но я столкнулся с проблемой, которая только первый элемент arraylist хранится в базе данных. Просьба помочьмагазин arraylist в базе данных оракулов

int invoice_no,bookno; 
    static ArrayList<Integer> reference=new ArrayList<>(); 
    static ArrayList<Integer> quantity2 = new ArrayList<>(); 


    public void abc1() 
    { 
     try 
    { 
     System.out.println("hello"); 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection connection=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","anchit"); 
     Statement statement=connection.createStatement(); 

     ResultSet r1=statement.executeQuery("select max(invoice_no) from invoice_detail"); 
     int a=1; 

     while(r1.next()) 
     { 
      a=r1.getInt(1); 
      System.out.println(r1.getInt(1)); 
     } 

     System.out.println("a="+a); 
     invoice_no=a+1; 
     if(invoice_no%50==0) 
      bookno=(invoice_no/50); 
     else 
      bookno=(invoice_no/50)+1; 

     System.out.println(invoice_no+","+bookno); 
     System.out.println(reference); 

     for(int i=0;i<reference.size();i++) 
     { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection connection1=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","anc123hit"); 
     Statement statement1=connection1.createStatement(); 

      //int b= 
      System.out.println(reference.get(i)); 
      //int c=quantity2.get(i); 
      ResultSet r=statement1.executeQuery("insert into invoice_detail values("+invoice_no+","+bookno+"," 
        +reference.get(i)+","+quantity2.get(i)+", to_char(sysdate,'dd-mon-yy'),'anchit','abcd')"); 
      r.next(); 
      connection1.close(); 
     } 
     connection.close(); 
    } 
    catch(Exception e) 
    {} 
    } 

это мой код для хранения ArrayList в базе данных, но я перед некоторые проблемы только первый элемент ArrayList хранится в базе данных. Просьба помочь

+0

проверки размера 'reference'. Также избегайте загрузки драйвера и объекта соединения внутри цикла 'for' – Rustam

+0

Никогда, ** никогда ** не создавайте запросы, используя конкатенацию String. Это была невероятно плохая практика в течение многих лет и открывает вам SQL-инъекции, а также многочисленные, трудно диагностировать, ошибки. ** Всегда ** используйте 'PreparedStatement'. –

+0

Кроме того, этот 'catch (Exception e) {}' является очень серьезным нарушением во многих домах разработки. Ожидайте официальный выговор, если вы когда-либо совершаете код в VCS с пустым блоком catch. ** Никогда не используйте пустой блок catch **. Вы проглотили ошибку, а затем попросили нас угадать, что это может быть. –

ответ

0

Такое поведение возникает, когда вы пытаетесь использовать .executeQuery() на DML (insert, update, delete) операции, вы должны использовать вместо .executeUpdate().

Statement statement1=connection1.createStatement(); 

      //int b= 
    System.out.println(reference.get(i)); 
      //int c=quantity2.get(i); 
      //ResultSet r=; 
    statement1.executeUpdate("insert into invoice_detail values("+invoice_no+","+bookno+"," 
        +reference.get(i)+","+quantity2.get(i)+", to_char(sysdate,'dd-mon-yy'),'anchit','abcd')"); 
      //r.next(); 

Обычно компилятор брошенной ошибки, что ваш запрос не возвращает ResultSet при использовании .executeQuery на DML

Смежные вопросы