Я создаю ArrayList из моей базы данных дерби вроде этого:Как вставить в ArrayList в базе данных
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;
}
и пытается вставить данные в удаленной базе данных MySQL, как это:
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){}
}
}
Аррайалист отлично отображает консоль. Но это всегда дает NumberFormatException ... Что не так в моем коде?
Еще один вопрос: есть ли другой вариант, чтобы я мог вставлять данные таблицы с локального компьютера (работающего в базе данных Derby) в удаленную базу данных MySQL? Пожалуйста, помогите.
Будет ли это излишним для вашего приложения, если вы должны использовать JPA, чтобы вам не нужно было писать весь код уровня данных вручную? Если это так, я мог бы извлечь пример, как это сделать с Derby. – axiopisty
Мне просто нужно решение. Но что случилось с arraylist и моим кодом? –
Может быть, при вводе данных из дерби в MySQL вы делаете неправильное преобразование. Вы пытаетесь вставить строку в числовое поле. Проверьте свое числовое значение в дерби, которое может содержать некоторый символ или строку – Shamse