Вставка значений из Excel для доступа к базе данных с использованием Java

1

Я использую этот код для импорта значений из файла Excel в мою базу данных Access. Все работает хорошо, за исключением того, что код будет читать все ячейки, но не будет копировать все в таблицу доступа.

(Например, строки -200 читаются успешно, но в базу данных записано только 97, а код останавливается без ошибок). Описание, которое вводится здесь, составляет около 100 слов в строке.

public class selector extends javax.swing.JFrame {

    final JFileChooser fc = new JFileChooser();
    File file;
    static String filename, query2, item;
    static String[][] itemss = new String[10000][10000];
    static double xxx;
    static datacon dc = new datacon();
    public static Statement st;

    static int i, j, rows = -1, p;

        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            try {
                // TODO add your handling code here:
                fileChose();
            } catch (SQLException ex) {
                Logger.getLogger(selector.class.getName()).log(Level.SEVERE, null, ex);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(selector.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (InvalidFormatException ex) {
            Logger.getLogger(selector.class.getName()).log(Level.SEVERE, null, ex);
        }

    }                                        
    public static String fileChose() throws InvalidFormatException, SQLException, FileNotFoundException {
        JFileChooser fc = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("XLS files", "xls", "XLSX files", "xlsx");
        fc.setFileFilter(filter);
        int ret = fc.showOpenDialog(null);

        if (ret == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();

            filename = file.getAbsolutePath();
            System.out.println(filename);

            work();
            return filename;
        } else {
            return null;
        }
    }

    static void work() throws InvalidFormatException, SQLException, FileNotFoundException {
        try {
            FileInputStream file = new FileInputStream(new File(filename));

            org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(file);
            org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
            dc.connect();

            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                rows++;
                i = 0;
                //For each row, iterate through all the columns 
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext()) {
                    Cell cell;
                    cell = cellIterator.next();

                    //Check the cell type and format accordingly 
                    switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_NUMERIC:
                            xxx = cell.getNumericCellValue();
                            itemss[rows][i] = Double.toString(xxx);
                            break;
                        case Cell.CELL_TYPE_STRING:
                            item = "" + cell.getRichStringCellValue();
                            itemss[rows][i] = item;
                            break;
                        case Cell.CELL_TYPE_BLANK:
                            item = "" + cell.getRichStringCellValue();
                            itemss[rows][i] = item;
                            break;
                    }
                    System.out.println("coloumn " + i + " : " + itemss[rows][i]);
                    i++;
                }
            }
            file.close();

            for (j = 0; j < rows; j++) {
                String query = " INSERT INTO schedule ([counter],[description]) VALUES ('" + j + "','" + itemss[j][1] + "') ";
                st.executeUpdate(query);
                System.out.println(query);
            }

        } catch (Exception e) {
        }
    }
public static class datacon {

        public Connection con;
        // public Statement st;
        public ResultSet rs;

        public void connect() {
            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection("jdbc:odbc:database4");
                st = con.createStatement();

            } catch (Exception t) {
                System.out.println(t.toString());
            }

        }
    }
}

Изображение 174551

  • 0
    каково значение rows перед циклом for (j = 0; j <row; j ++) {
  • 0
    @NikhilTalreja Это 261 для моего файла
Показать ещё 2 комментария
Теги:
excel
swing
poi-hssf
jdbc-odbc

2 ответа

1
Лучший ответ

Ваш запрос Insert может вызывать исключения. Вы не регистрируете их:

    for (j = 0; j < rows; j++) {
            String query = " INSERT INTO schedule ([counter],[description]) VALUES ('" + j + "','" + itemss[j][1] + "') ";
            st.executeUpdate(query);
            System.out.println(query);
        }

    } catch (Exception e) {
        //no logging
    }

Кроме того, work() объявляет исключения, которые могут быть выбраны, и все же вся реализация выполняется в try catch

  • 0
    Спасибо ... Вы правы. Это ошибка (java.sql.SQLException: общая ошибка в sun.jdbc.odbc.JdbcOdbc.createSQLException (JdbcOdbc.java:6993) в sun.jdbc.odbc.JdbcOdbc.createSQLException (JdbcO6b) j jdbc.odbc.JdbcOdbc.standardError (JdbcOdbc.java:7121) в sun.jdbc.odbc.JdbcOdbc.SQLExecDirect (JdbcOdbc.java:3117) в sun.jdbc.odbc.Jdbcd.jjjjjjtjtjtjtjtjstjt .jdbc.odbc.JdbcOdbcStatement.executeUpdate (JdbcOdbcStatement.java:287)
  • 0
    Большое спасибо ..... Я не смог решить это за последние 7 дней. Ваш быстрый ответ действительно помог. Мой код теперь работает нормально.
0

Возможно, у вас есть проблема в коде коммутатора.

Добавьте значение по умолчанию и проверьте, прошел ли код в этой части и каков тип ячейки.

что-то вроде этого:

default:
    System.out.println("Default case: "+ cell.getCellType());
  • 0
    На самом деле все правильно хранится в строке itemss [] [], и этот случай по умолчанию нигде не выполняется. Проблема с его вставкой в таблицу доступа.
  • 0
    у вас есть функция st.commit ()? попробуй!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню