Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Java by frug ( 17 years ago )
// Извлекаем таблицу из указанного dbf файла и отправляем её в MySQL
    // overwrite - пересоздавать ли таблицу в MySQL
    public int pumpTable(String dbfFile, String myTable, boolean overwrite, String mark) throws SQLException {
        File dbf = new File(dbfFile);
        int count = 0;
        if (dbf.isFile() && dbf.canRead() && dbf.getName().matches(".*\\.[dD][bB][fF]")) {
            String curHash = md5File(dbfFile);
            myCon = DriverManager.getConnection(myUrl, myUser, myPass);
            Statement myStmt = myCon.createStatement();
            myStmt.execute(myCashLog);
            // Здесь можно было бы пересоздать таблицу платежей (но я пересоздам её вначале)
            String query = "SELECT * FROM " + myCashLoadLog + " WHERE file_name='" + dbf.getPath() + "';";
            ResultSet myRes = myStmt.executeQuery(query);
            try {
                // Запрашиваем данные о предыдущих загрузках этого файла
                CashLogLine cll = CashLogLine.getFromRes(myRes);
                // Сравниваем хэш в таблице с хэшем файла
                if (cll != null && cll.md5_hash.equals(curHash)) {
                // Запись существует и файл не изменился
                    return 0;
                } else {
                // Запись не существует или хэш не совпадает, нужно загрузить файл

                    // Добавляем начальную запись в лог
                    // Начинаем транзакцию
                    myCon.setAutoCommit(false);
                    myStmt = myCon.createStatement();
                    int genKey = 0;
                    int loadCount = 0;

                    if (cll == null) {
                    // Если запись не существует
                        query = "INSERT INTO " + myCashLoadLog + "(load_date, file_name, dest_table, md5_hash, recs_loaded, load_count) " +
                                        "VALUES ('" + now() + "', '" + dbf.getPath() + "', '" + myTable + "', '" + curHash + "', " + 0 + ", 0);";

                        myStmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
                        myRes = myStmt.getGeneratedKeys();

                        // Получаем auto_gen_id
                        while (myRes.next()) {
                          ResultSetMetaData rsMetaData = myRes.getMetaData();
                          int columnCount = rsMetaData.getColumnCount();

                          for (int i = 1; i <= columnCount; i++) {
                            //String key = myRes.getString(i);
                            genKey = myRes.getInt(i);
                            System.out.println("Generated key " + i + " is " + genKey);
                          }
                        }
                    } else {
                    // Запись существует, но хэш не совпадает
                        // Получаем id существующей записи для дальнейшего обновления
                        genKey = cll.index;
                        loadCount = cll.load_count;
                        // Удаляем записи загруженные из этого файла прежде
                        query = "DELETE FROM " + myTable + " WHERE file_id=" + cll.index + ";";
                        myStmt.execute(query);
                        myCon.commit();
                    }
                    String url = dbfUrlBase + dbf.getParent() + dbfProps;
                    logString(url);
                    System.out.println(url);
                    dbfCon = DriverManager.getConnection(url);

                    if (!dbfCon.isClosed()) {
                        Statement dbfStmt = dbfCon.createStatement();
                        String tableName = dbf.getName().substring(0, dbf.getName().length()-4);
                        ResultSet dbfRes = dbfStmt.executeQuery("SELECT * FROM " + tableName + ";");
                        ResultSetMetaData resmd = dbfRes.getMetaData();
                        while (dbfRes.next()) {
                            // Форматируем строку запроса для вставки данных в MySQL
                            query = "INSERT INTO " + myTable +"(date,time,id_kvit,id_kassa,id_ls,id_usl,summa,new,id_gash,n_kassa,del,comment,tmp,file_id,mark) VALUES(";
                            int cols = resmd.getColumnCount();
                            // c=2 для пропуска поля id
                            for(int c=2;c < cols+1; c++) {
                                String field = dbfRes.getString(c);
                                if ((dbfRes.getObject(c) != null) &&
                                    !(dbfRes.getObject(c).getClass().equals(Boolean.class))) {
                                    query = query + "'" + field + "'";
                                } else {
                                    query = query + field;
                                }
                               if (c < (cols)) query = query + ", ";
                            }
                            query = query + ", '" + genKey + "', '" + mark + "');";
                            //System.out.println(query);
                            myStmt.execute(query);
                            count++;
                        }
                    }
                       //count = count + printResultSet(dbfRes);
                       dbfCon.close();
                       // Записываем в cash_load_log результаты загрузки для файла который ранее не был загружен
                       //query = "INSERT INTO " + myCashLoadLog + "(load_date, file_name, md5_hash, recs_loaded, reload_count) " +
                       //                "VALUES ('" + now() + "', '" + dbf.getPath() + "', '" + curHash + "', " + count + ", 0);";
                       query = "UPDATE " + myCashLoadLog +
                                  " SET md5_hash='" + curHash + "'" +
                                      ", recs_loaded=" + count +
                                      ", load_count=" + (loadCount+1) +
                                  " WHERE id=" + genKey;
                       myStmt = myCon.createStatement();
                       myStmt.execute(query);
                       myCon.commit();
                       myCon.setAutoCommit(true);
                }
            } catch (Exception ex) {
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
                myCon.rollback();
                myCon.setAutoCommit(true);
            }
            myCon.setAutoCommit(true);
            myCon.close();
        }
        return count;
    }

 

Revise this Paste

Parent: 13155
Your Name: Code Language: