Wie Legen Sie ein ArrayList-in-Datenbank

Erstelle ich eine arraylist von meinem derby-Datenbank wie diese:

public ArrayList<ArrayList<String>> createArray(String ticket, JLabel message){


String sl = ticket;
List rowData ;
List<String> columnHeaders;
ArrayList<ArrayList<String>> tableData =  null;

try{
conn= new data.connection().db();
String query="SELECT * FROM SERVICE_TICKET WHERE TICKET_NO ='"+sl+"' ";
stmtt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmtt.executeQuery(query);
md = rs.getMetaData();
            int count = md.getColumnCount();
            columnHeaders = new ArrayList<>();
            tableData = new ArrayList<>();
         /*
                for (int i = 1; i <= count; i++) {
                columnHeaders.add(md.getColumnName(i));
                System.out.print(columnHeaders);
            }

         */
            while (rs.next()) {
                rowData = new ArrayList<>();
                for (int i = 2; i <= count; i++) {
                    rowData.add(rs.getObject(i));
                    message.setText(rs.getObject(i).toString());
                }
                tableData.add((ArrayList<String>) rowData);
            }
            System.out.println(tableData);
 }
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Unknown Error!! Data cannot be displayed!"+ex);
} 
finally{try{stmtt.close(); conn.close(); rs.close();} catch(SQLException ex){}}

return tableData;
    }

und versuchen zum einfügen der Daten in eine remote-MySQL-Datenbank wie diese:

public void save(String ticket, JLabel message){

ArrayList<ArrayList<String>> tableData = createArray(ticket, message);


 String query = "INSERT INTO SERVICE_TICKET(ID, TICKET_NO, " //VARCHAR(40),
    +" SL_NO, " //INTEGER,
    +" CODE, " //VARCHAR(30),
    +" ITEM_NAME, " //VARCHAR(300),
    +" GROUP_NAME, " //VARCHAR(50),

    +" QNTY, " //INTEGER,
    +" UNIT, " //VARCHAR(30),
    +" TAXABLE, " // VARCHAR(3),
    +" BONUSABLE, " // VARCHAR(3),

    +" PRICE, " //DECIMAL(30 , 2),
    +" AMOUNT, "//DECIMAL(30, 2) DEFAULT 0.00,

    +" DISC_PERCENTAGE, " //DECIMAL(30, 2) DEFAULT 0.00,
    +" DISCOUNT, " //DECIMAL(30, 2) DEFAULT 0.00,

    +" FEDERAL, " // DECIMAL(30, 2) DEFAULT 0.00,
    +" GST, " //DECIMAL(30, 2) DEFAULT 0.00,
    +" TOTAL_TAX, " //DECIMAL(30, 2) DEFAULT 0.00,

    +" NET_AMOUNT) " //DECIMAL(30 , 2) 
        +" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" ;


 try{
     Class.forName("java.sql.Driver");
     conn = DriverManager.getConnection("jdbc:mysql://www.example.com:3306/myDatabase", "user_1", "password_123");
     conn.setAutoCommit(false);
     stmt = conn.prepareStatement(query);
 if(conn != null ){
 JOptionPane.showMessageDialog(null, "Connected to Internet....");}
 else{JOptionPane.showMessageDialog(null, "Failed to connect to the server");}


     for(int i = 0; i<tableData.size(); i++){ 
     ArrayList<String> innerList = (ArrayList<String>)tableData.get(i);
     for(int j = 0; j<innerList.size(); j++){ 

     stmt.setString(1, innerList.get(j).toString()) ; //  TICKET_NO VARCHAR(40),
     stmt.setInt(2, Integer.parseInt(innerList.get(j).toString())) ; //SL_NO INTEGER,
     stmt.setString(3, innerList.get(j).toString()) ; //CODE VARCHAR(30),
     stmt.setString(4, innerList.get(j).toString()) ; //ITEM_NAME VARCHAR(300),
     stmt.setString(5, innerList.get(j).toString()) ; //GROUP_NAME VARCHAR(50),

     stmt.setInt(6, Integer.parseInt(innerList.get(j).toString())) ; //QNTY INTEGER,
     stmt.setString(7, innerList.get(j).toString()) ; //   UNIT VARCHAR(30),
     stmt.setString(8, innerList.get(j).toString()) ; //   TAXABLE VARCHAR(3),
     stmt.setString(9, innerList.get(j).toString()) ; //   BONUSABLE VARCHAR(3),

     stmt.setDouble(10, Double.parseDouble(innerList.get(j).toString())) ; //  PRICE DECIMAL(30 , 2),
     stmt.setDouble(11, Double.parseDouble(innerList.get(j).toString())) ; //  AMOUNT DECIMAL(30, 2) DEFAULT 0.00,

     stmt.setDouble(12, Double.parseDouble(innerList.get(j).toString())) ; //  DISC_PERCENTAGE DECIMAL(30, 2) DEFAULT 0.00,
     stmt.setDouble(13, Double.parseDouble(innerList.get(j).toString())) ; //  DISCOUNT DECIMAL(30, 2) DEFAULT 0.00,

     stmt.setDouble(14, Double.parseDouble(innerList.get(j).toString())) ; //  FEDERAL DECIMAL(30, 2) DEFAULT 0.00,
     stmt.setDouble(15, Double.parseDouble(innerList.get(j).toString())) ; //  GST DECIMAL(30, 2) DEFAULT 0.00,
     stmt.setDouble(16, Double.parseDouble(innerList.get(j).toString())) ; //  TOTAL_TAX DECIMAL(30, 2) DEFAULT 0.00,

     stmt.setDouble(17, Double.parseDouble(innerList.get(j).toString())) ; //  NET_AMOUNT DECIMAL(30 , 2)

     stmt.addBatch(); 

     stmt.executeBatch();
    conn.commit();

 }}

     JOptionPane.showMessageDialog(null, "Data saved successfully.");
 }
 catch(SQLException | ClassNotFoundException ex){JOptionPane.showMessageDialog(null, "Cannot Save"+ex);}
 finally{
 try{
     stmt.close(); conn.close(); conn.setAutoCommit(true);
 }catch(SQLException ex){}
 }
 }   

Arraylist gut zeigt in der Konsole. Aber es gibt mir immer NumberFormatException...
Was ist falsch in meinem code ?

Noch eine Frage: gibt es irgendeine andere option, die ich einfügen kann meine Tabelle die Daten aus dem lokalen computer (im Derby-Datenbank), um eine remote-MySQL-Datenbank ?
Bitte helfen Sie.

  • Wäre es zuviel für Ihre Anwendung, wenn Sie verwenden würden, JPA, damit Sie nicht schreiben müssen, alle Daten layer code manuell? Wenn ja, ich könnte Graben Sie ein Beispiel, wie dies mit Derby.
  • Ich brauche nur eine Lösung. Aber was ist falsch mit arraylist und meinen code?
  • Mai werden beim einfügen von Daten aus derby, MySQL-Sie machen eine falsche Bekehrung. Sie versuchen, legen Sie eine Zeichenfolge in ein numerisches Feld. Überprüfen Sie Ihren numerischen Wert im derby, kann mit char-oder string
  • Ich war nicht zu implizieren, dass etwas falsch ist, mit Hilfe der Werkzeuge, die Sie momentan verwenden, vor allem, wenn das Projekt sehr klein ist. Ich war nur neugierig, also ich könnte eine Antwort, die die Verwendung der JPA-wenn es annehmbar ist. Und ich bin auch darauf hin, dass einer der Gründe für die Verwendung von JPA ist, weil es erheblich reduziert, wenn nicht beseitigt, Fehler manuell aus dem schreiben der JDBC-code. Außerdem vereinfacht die Anwendung und ermöglicht Ihnen, sich mehr auf Ihre business-Logik. Es erlaubt Ihnen auch, das zu tun, was Sie zu tun versuchen, Schalter DB-Anbieter, sehr leicht.
Schreibe einen Kommentar