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