|
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 615
|
||||||
Lotus и MySQL (jdbc)19.04.2009, 20:42. Показов 26937. Ответов 19
Метки нет (Все метки)
вроде работающий агент:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код"</div></div><div class="sp-body"><div class="sp-content">
0
|
||||||
| 19.04.2009, 20:42 | |
|
Ответы с готовыми решениями:
19
Lotus и Firebird (jdbc) Lotus и Oracle (jdbc) Lotus и db2 (jdbc) |
|
0 / 0 / 0
Регистрация: 29.03.2005
Сообщений: 151
|
|
| 19.04.2009, 23:08 | |
|
Вместо множества try {} catch () лучше использовать один блок для всего кода. И я бы еще очень посоветовал в блоке finally для всех нотесовских объектов делать recycle(). Домино не очень хорошо следит за использованием памяти
0
|
|
|
doptyr123
|
|
| 20.11.2009, 04:46 | |
|
Возможно кому-то поможет.
На Линуксовом сервере с лотусом, sql коннектор завелся после того как положил коннектор.jar в lib/ext. Прописывание пути к конектору в Classpath не помогает. <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Коннектор к mysql</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class=java>import java.sql.*; void initbase() { odbcName = "cfg_odbcname"; odbcUserName = "cfg_odbcusername"; odbcPassword = "cfg_odbcpassword"; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDri ver"); conn = DriverManager.getConnection("jdbc:odbc:" + odbcName, odbcUserName, odbcPassword); } catch (Exception e) { e.printStackTrace(); } }[/CODE] |
|
|
0 / 0 / 0
Регистрация: 12.10.2007
Сообщений: 522
|
||||||
| 21.11.2009, 10:35 | ||||||
|
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">тоже код)</div></div><div class="sp-body"><div class="sp-content">
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
|
| 06.02.2012, 16:12 | |
|
Привет всем еще раз, в общем ситуация следующая:
Я написал класс на JAVA по работе с MySQL, и провел тестирование на платформе windows и linux, результат был следующим: на винде все прошло 100% успешно и проблем ни каких не возникло, а вот на линухе проблема появилась с кодировкой как ее можно решить? вместо русских символов "?" делал вот так, не помогло SET character_set_results = utf8, character_set_client = utf8, character_set_connection = utf8, character_set_database = utf8, character_set_server = utf8
0
|
|
|
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
|
|
| 06.02.2012, 18:51 | |
|
всю схему взаимодействия опишите:
-где стоит мускуль (платформа) -где стоит скрипт выбора из БД -где сам код
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
|||||||||||
| 07.02.2012, 08:47 | |||||||||||
|
Сервера MySQL и Lotus и все скрипты стоят на Linux
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Класс MySQL на JAVA</div></div><div class="sp-body"><div class="sp-content">
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">ExportDep</div></div><div class="sp-body"><div class="sp-content">
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
|
| 21.06.2012, 09:15 | |
|
Ситуация следующая:
Имеется Lotus сервер и MySQL сервер на Linux, Lotus с интервалом 2 часа выполняет выгрузку данных в MySQL выполняет выгрузку 5000+ записей и начинает выбивать в консоль ошибку OutOfMemoryError: <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Текст с консоли</div></div><div class="sp-body"><div class="sp-content"> 06/22/2012 10:32:07 AM Agent Manager: Agent error: JVMDUMP006I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" - please wait. 06/22/2012 10:32:07 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Snap dump using /var/lib/notes/data/Snap.20120622.103207.1909.0001.trc in response to an event 06/22/2012 10:32:07 AM Agent Manager: Agent error: JVMDUMP010I Snap dump written to /var/lib/notes/data/Snap.20120622.103207.1909.0001.trc 06/22/2012 10:32:07 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Snap dump using /var/lib/notes/data/Snap.20120622.103207.1909.0002.trc in response to an event 06/22/2012 10:32:07 AM Agent Manager: Agent error: JVMDUMP010I Snap dump written to /var/lib/notes/data/Snap.20120622.103207.1909.0002.trc 06/22/2012 10:32:07 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Heap dump using /var/lib/notes/data/heapdump.20120622.103207.1909.0003.phd in response to an event 06/22/2012 10:32:09 AM Agent Manager: Agent error: JVMDUMP010I Heap dump written to /var/lib/notes/data/heapdump.20120622.103207.1909.0003.phd 06/22/2012 10:32:09 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Java dump using /var/lib/notes/data/javacore.20120622.103207.1909.0005.txt in response to an event 06/22/2012 10:32:09 AM Agent Manager: Agent error: JVMDUMP010I Java dump written to /var/lib/notes/data/javacore.20120622.103207.1909.0005.txt 06/22/2012 10:32:09 AM Agent Manager: Agent error: JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError". 06/22/2012 10:32:09 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Heap dump using /var/lib/notes/data/heapdump.20120622.103207.1909.0004.phd in response to an event 06/22/2012 10:32:11 AM Agent Manager: Agent error: JVMDUMP010I Heap dump written to /var/lib/notes/data/heapdump.20120622.103207.1909.0004.phd 06/22/2012 10:32:11 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Java dump using /var/lib/notes/data/javacore.20120622.103207.1909.0006.txt in response to an event 06/22/2012 10:32:12 AM Agent Manager: Agent error: JVMDUMP010I Java dump written to /var/lib/notes/data/javacore.20120622.103207.1909.0006.txt 06/22/2012 10:32:12 AM Agent Manager: Agent error: JVMDUMP006I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" - please wait. 06/22/2012 10:32:12 AM Agent Manager: Agent error: JVMDUMP032I JVM requested Snap dump using /var/lib/notes/data/Snap.20120622.103211.1909.0007.trc in response to an event 06/22/2012 10:32:12 AM Agent Manager: Agent error: JVMDUMP010I Snap dump written to /var/lib/notes/data/Snap.20120622.103211.1909.0007.trc
0
|
|
|
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
|
|
| 21.06.2012, 12:20 | |
|
Хм... странновато...
Но по идее не должно быть.... может где-то в коде ошибка? Про такие ошибки ТУТ что-то пишут
0
|
|
|
0 / 0 / 0
Регистрация: 15.03.2009
Сообщений: 615
|
||
| 21.06.2012, 20:08 | ||
Вариантов решения ровно два: увеличить JavaMaxHeapSize в notes.ini, либо исправлять код. P.S. JVM при OutOfMemoryError сбрасывает dump кучи (тот самый .phd из крэш-лога), который можно посмотреть на предмет того, куда девалась память. Для этого есть например Eclipse Memory Analyzer ( aka MAT ) и плагин к нему для работы с дампами ibm.
0
|
||
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
|||
| 30.07.2012, 14:30 | |||
Насчет кода вот он: <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Собственно сам класс по работе с MySQL</div></div><div class="sp-body"><div class="sp-content"> Код (C++): import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; class jMySQL { private String name = "MySQL [JAVA]"; private Statement stmt = null; private ResultSet rs = null; private Connection conn = null; private boolean DriverLoaded = false; private boolean Connected = false; private boolean SQL_EXEC = false; private void Print(String Text){ System.out.println(name + ": " + Text); } public boolean InstallCharSet(String CharSetName) { try { if (!Connected) { Print("[InstallCharSet]: Не выполнено подключение!"); return false; } String SQL_CHAR = "SET character_set_results = "+CharSetName+", character_set_client = "+CharSetName+", character_set_connection = "+CharSetName+", character_set_database = "+CharSetName+", character_set_server = "+CharSetName+""; stmt = conn.createStatement(); stmt.executeUpdate(SQL_CHAR); return false; } catch (Exception e) { Print("[InstallCharSet]: " + e.getMessage()); return false; } } public void GetMySQLInfo() { try { String SQLS = "SHOW VARIABLES"; stmt = conn.createStatement(); stmt.execute(SQLS); rs = stmt.getResultSet(); SQL_EXEC = true; } catch (Exception e) { Print("-[GetMySQLInfo]---------------------------------------------"); e.printStackTrace(); } } public String real_escape_string(String SQLTEXT) { if (SQLTEXT.isEmpty()) { return ""; } if (SQLTEXT.replaceAll("[a-zA-Z0-9_!@#$%^&*()-=+~.;:,\\Q[\\E\\Q]\\E<>{}\\/? ]","").length() < 1) { return SQLTEXT; } String clean_string = SQLTEXT; clean_string = clean_string.replaceAll("\\\\", "\\\\\\\\"); clean_string = clean_string.replaceAll("\\n","\\\\n"); clean_string = clean_string.replaceAll("\\r", "\\\\r"); clean_string = clean_string.replaceAll("\\t", "\\\\t"); clean_string = clean_string.replaceAll("\\00", "\\\\0"); clean_string = clean_string.replaceAll("", "\\\\"); clean_string = clean_string.replaceAll("\\\"", "\\\\\""); return clean_string; } private boolean LoadDriver(){ try { Class.forName("com.mysql.jdbc.Driver").n ewInstance(); DriverLoaded = true; } catch (Exception ex) { DriverLoaded = false; } return DriverLoaded; } public boolean Connect(String Host, String DataBase, String Login, String Password) { if (Host.trim() == "" || DataBase.trim() == "" || Login.trim() == "" || Password.trim() == "") { Print("[Connect] Проверьте все ли параметры указаны!"); return false; } if (DriverLoaded != true){ Print("[Connect] Драйвер не загружен!"); Connected = false; return false; } try { conn = DriverManager.getConnection("jdbc:mysql://"+Host+"/"+DataBase+"?user="+Login+"&password="+P assword); Connected = true; return true; } catch (SQLException ex) { Print("[Connect]: " + ex.getMessage() + " " + ex.getErrorCode()); Connected = false; return false; } } public boolean GetConnection(){ return Connected; } public boolean SQLExec(String Query){ if (!Connected) { Print("[SQLExec]: Не выполнено подключение!"); return false; } SQL_EXEC = false; try { stmt = conn.createStatement(); if (stmt.execute(Query)) { rs = stmt.getResultSet(); SQL_EXEC = true; return true; } else { SQL_EXEC = false; return false; } } catch (Exception ex) { SQL_EXEC = false; Print("[SQLExec]: " + ex.getMessage()); return false; } } public boolean Disconnect(){ try { rs.close(); return true; } catch (Exception ex) { Print("[Disconnect]: " + ex.getMessage()); return false; } } public ResultSet Result() { if (!SQL_EXEC) { return null; } else { return rs; } } public jMySQL() { try { LoadDriver(); } catch (Exception ex) { Print("[jMySQL]: " + ex.getMessage()); } } } <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">И агент</div></div><div class="sp-body"><div class="sp-content"> Код (C++): import lotus.domino.*; import java.util.*; import java.io.PrintWriter; import java.text.*; public class MySQLExport extends AgentBase { jMySQL MySQL = new jMySQL(); String AgentName = "Export2SQL"; String SQL = ""; int NCount = 0; boolean SQLEXECR = false; /* Получить текущую дату */ private String getDateTime(String format) { format = format.isEmpty()?"dd.MM.yyyy hh:mm:ss":format; DateFormat dateFormat = new SimpleDateFormat(format); Date date = new Date(); return dateFormat.format(date); } /* метод для конверации даты в дату в формате UNIX */ private long StrToDateUnix(String datatime, String format) { try { format = format.isEmpty()?"dd.MM.yyyy hh:mm:ss":format; DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss"); Date date2 = formatter.parse(datatime); return (long)date2.getTime() / 1000L; } catch (Exception e) { return -1; } } /* Аналог функции Print в LS */ private void Print(String Text){ System.out.println(AgentName + ": " +Text); } private void ExportNotice(Database db) { Document doc; View view; try { Print("[OK] - Поиск уведомлений в модуле Шлюз...!"); view = db.getView("noticesByUniqueNum"); NCount = view.getEntryCount(); Print("[OK] - Найдено уведомлений: " + NCount); if (NCount == 0) { Print("[W] - Не найдено ни одного докумета, завершение выполнение агента!"); return; } /* Очищаем таблицу от старых записей, для загрузки более актуальной информации */ Print("[OK] - Очистка таблицы уведомлений в MySQL...!"); SQL = "TRUNCATE TABLE `notice`"; SQLEXECR = MySQL.SQLExec(SQL); Print("[OK] - Очистка завершена!"); Print("[OK] - Начинаем выгрузку уведомлений в MySQL..."); /* Перебираем документы и выполняем запрос на добавлении их в MySQL базу */ doc = view.getFirstDocument(); while (doc != null) { /* Получение данных из текущего документа,а так же проверка некоторых обязательных полей */ String fnRegNum = doc.getItemValueString("fnRegNum"); String fnSendet = doc.getItemValueString("fnSendet"); long fnDataTime = StrToDateUnix( doc.getItemValueString("fnDataTime"), ""); String fnDepID = !doc.getItemValueString("fnDepID").isEmp ty()?doc.getItemValueString("fnDepID").t rim():"0"; String fnDepIDTo = !doc.getItemValueString("fnDepIDTo").isE mpty()?doc.getItemValueString("fnDepIDTo ").trim():"0"; String fnOrganization = doc.getItemValueString("fnOrganization") ; String fnAppName = doc.getItemValueString("fnAppName"); String fnAppEmail = doc.getItemValueString("fnAppEmail"); String fnAppMPhone = doc.getItemValueString("fnAppMPhone"); String fnCategory = !doc.getItemValueString("fnCategory").is Empty()?doc.getItemValueString("fnCatego ry").trim():"0"; String fNStatIndex = !doc.getItemValueString("fNStatIndex").i sEmpty()?doc.getItemValueString("fNStatI ndex").trim():"0"; String fNStatText = doc.getItemValueString("fNStatText"); long fNStatExpire = StrToDateUnix( doc.getItemValueString("fNStatExpire") + " 00:00:00", ""); String fnExName = doc.getItemValueString("fnExName"); String fnExPost = doc.getItemValueString("fnExPost"); String fnUniqNum = doc.getItemValueString("fnUniqNum"); long fnCreateTime = StrToDateUnix( doc.getItemValueString("fnCreateTime"), ""); /* Экранизация данных - предотвращает ошибки при отправки SQL запросов */ fnRegNum = MySQL.real_escape_string(fnRegNum); fnOrganization = MySQL.real_escape_string(fnOrganization) ; fnAppName = MySQL.real_escape_string(fnAppName); fnAppEmail = MySQL.real_escape_string(fnAppEmail); fNStatText = MySQL.real_escape_string(fNStatText); fnExPost = MySQL.real_escape_string(fnExPost); fnExName = MySQL.real_escape_string(fnExName); fnUniqNum = MySQL.real_escape_string(fnUniqNum); /* Подготовка SQL Запроса */ SQL = "INSERT INTO `notice` " + "(`fnRegNum`,`fnSendet`,`fnDataTime` ,`" + "fnDepID`,`fnDepIDTo`,`fnOrganization`,` fnAppName`," + "`fnAppEmail`,`fnAppMPhone`,`fnCategory` ,`fNStatIndex`," + "`fNStatText`,`fNStatExpire`,`fnExName`, `fnExPost`,`fnUniqNum`, `fnCreateTime`)"; SQL += "VALUES("; SQL += ""+fnRegNum.trim()+","+fnSendet.trim()+" ,"+fnDataTime+"," + ""+fnDepID.trim()+","+fnDepIDTo.trim()+" ,"+fnOrganization.trim()+","+fnAppName.t rim()+"," + ""+fnAppEmail.trim()+","+fnAppMPhone.tri m()+","+fnCategory.trim()+","+fNStatInde x.trim()+"," + ""+fNStatText.trim()+","+fNStatExpire+", "+fnExName.trim()+","+fnExPost.trim()+", "+fnUniqNum.trim()+", "+fnCreateTime+")"; /* Отправка запроса */ /*Print(SQL); */ SQLEXECR = MySQL.SQLExec(SQL); /* Получаем следующий документ */ doc = view.getNextDocument(doc); } Print("[OK] - Экспорт уведомлений завершен!"); Print("------------------------------------------------------------------"); } catch (Exception e) { Print("[ER] - Текст ошибки: " + e.getMessage() + " Код ошибки: " + e.hashCode()); e.printStackTrace(); } } private void ExportDep(Database db) { Document doc; View view; try { Print("[OK] - Составление списка управлений из модуля Шлюз...!"); view = db.getView("depByName"); Print("[OK] - Найдено документов: " + view.getEntryCount()); if (view.getEntryCount() == 0) { Print("[W] - Не найдено ни одного управления, завершение выполнение агента!"); return; } /* Очищаем таблицу от старых записей, для загрузки более актуальной информации */ Print("[OK] - Очистка таблицы MySQL...!"); SQL = "TRUNCATE TABLE `dep_list`"; SQLEXECR = MySQL.SQLExec(SQL); Print("[OK] - Очистка завершена!"); Print("[OK] - Начинаем выгрузку данных в MySQL..."); /* Перебираем документы и выполняем запрос на добавлении их в MySQL базу */ doc = view.getFirstDocument(); while (doc != null) { /* Получение данных из текущего документа,а так же проверка некоторых обязательных полей */ String dep_id = doc.getItemValueString("fDUnid"); String dep_name = doc.getItemValueString("fDName"); String dep_namekz = doc.getItemValueString("fDNameKZ"); String dep_address = doc.getItemValueString("fDAddress"); String dep_leader = doc.getItemValueString("fDLeader"); String dep_leader_contact = doc.getItemValueString("fDLeader_Contact Info"); String dep_leader_email = doc.getItemValueString("fDLeader_Contact Email"); String dep_citizen = doc.getItemValueString("fDCitizen_FIO"); String dep_citizen_contact = doc.getItemValueString("fDCitizen_Contac tInfo"); int dep_sort_id = (int) doc.getItemValueInteger("fDSortID"); dep_sort_id = dep_sort_id <=0?300:dep_sort_id; /* Экранизация данных - предотвращает ошибки при отправки SQL запросов */ dep_name = MySQL.real_escape_string(dep_name); dep_namekz = MySQL.real_escape_string(dep_namekz); dep_address = MySQL.real_escape_string(dep_address); dep_leader_contact = MySQL.real_escape_string(dep_leader_cont act); dep_leader_email = MySQL.real_escape_string(dep_leader_emai l); dep_citizen_contact = MySQL.real_escape_string(dep_citizen_con tact); /* Подготовка SQL Запроса */ SQL = "INSERT INTO `dep_list` " + "(`dep_id`,`dep_name`,`dep_namekz`,`dep_ address`,`" + "dep_leader`,`dep_leader_contact`,`dep_l eader_email`,`dep_citizen`," + "`dep_citizen_contact`,`dep_sort_id` )"; SQL += "VALUES("; SQL += ""+dep_id+","+dep_name+","+dep_namekz+", "+dep_address+"," + ""+dep_leader+","+dep_leader_contact+"," +dep_leader_email+","+dep_citizen+"," + ""+dep_citizen_contact+", "+dep_sort_id+")"; /* Отправка запроса */ SQLEXECR = MySQL.SQLExec(SQL); /* Получаем следующий документ */ doc = view.getNextDocument(doc); } MySQL.SQLExec(SQL); Print("[OK] - Запись в таблицу обновлений внесена!"); Print("[OK] - Экспорт списка управлений завершен!"); Print("------------------------------------------------------------------"); } catch (Exception e) { Print("[ER] - Текст ошибки: " + e.getMessage() + " Код ошибки: " + e.hashCode()); e.printStackTrace(); } } private void ExportStatus(Database db) { Document doc; View view; try { Print("[OK] - Составление списка статусов из модуля Шлюз...!"); view = db.getView("vInf_Status"); Print("[OK] - Найдено статусов: " + view.getEntryCount()); if (view.getEntryCount() == 0) { Print("[W] - Не найдено ни одного статуса, завершение выполнение агента!"); return; } /* Очищаем таблицу от старых записей, для загрузки более актуальной информации */ Print("[OK] - Очистка таблицы MySQL...!"); SQL = "TRUNCATE TABLE `status_list`"; SQLEXECR = MySQL.SQLExec(SQL); Print("[OK] - Очистка завершена!"); Print("[OK] - Начинаем выгрузку данных в MySQL..."); /* Перебираем документы и выполняем запрос на добавлении их в MySQL базу */ doc = view.getFirstDocument(); while (doc != null) { /* Получение данных из текущего документа,а так же проверка некоторых обязательных полей */ String status_id = doc.getItemValueString("fSUid"); String status_name = doc.getItemValueString("fSNameRU"); String status_namekz = doc.getItemValueString("fSNameKZ"); /* Подготовка SQL Запроса */ SQL = "INSERT INTO `status_list` " + "(`status_id`,`status_name`,`status_name kz`)"; SQL += "VALUES("; SQL += ""+status_id+","+status_name+","+status_ namekz+")"; /* Отправка запроса */ SQLEXECR = MySQL.SQLExec(SQL); /* Получаем следующий документ */ doc = view.getNextDocument(doc); } MySQL.SQLExec(SQL); Print("[OK] - Экспорт статусов завершен!"); Print("------------------------------------------------------------------"); } catch (Exception e) { Print("[ER] - Текст ошибки: " + e.getMessage() + " Код ошибки: " + e.hashCode()); e.printStackTrace(); } } /* Основной инициируемый метод */ public void NotesMain() { PrintWriter PW=getAgentOutput(); /* Фиксируем время начало выполнения агента */ long StartTime = System.currentTimeMillis() / 1000; Session session = getSession(); try { /* Выполнение */ Print("[!] - Инициализция агенте синхронизации с MySQL сервером!" ); Database db = session.getAgentContext().getCurrentData base(); Print("[!] - Получение настроек агента!" ); Document profile = db.getProfileDocument("fProfile", ""); if (profile == null) { Print("[!] - Проверьте настройки в базе!" ); return; } String Run = profile.getItemValueString("fPMysqlEnabl ed"); String Login = profile.getItemValueString("fPMysqlLogin "); String Password = profile.getItemValueString("fPMysqlPassw ord"); String DBName = profile.getItemValueString("fPMysqlDataB aseName"); String Host = profile.getItemValueString("fPMysqlHost" ); if (Run.isEmpty()) { Print("[!] - Агент отключен. Проверьте настройки в базе!" ); return; } boolean cnt = MySQL.Connect(Host, DBName, Login, Password); if (!cnt) { Print("[ER] - Не удалось соедениться с сервером MySQL. Продробности об ошибке смотрете в логах сервера!"); return; } Print("[OK] - Платформа: " + System.getProperty("os.name")); Print("[OK] - Соединение с MySQL сервером прошло успешно!"); /* Экспорт статусов */ ExportStatus(db); /* Экспорт списка управлений */ ExportDep(db); /* Экспорт формы уведомлений */ ExportNotice(db); /* UNIX время завершения выполнения агента */ long EndTime = System.currentTimeMillis() / 1000; long CurrentDate = StrToDateUnix(getDateTime("dd.MM.yyyy") + " 00:00:00", ""); SQL = "INSERT INTO `notice_update` (`date_update`, `last_update`, `start_update`, `recordcount`) VALUES ("+CurrentDate+", "+StartTime+","+EndTime+","+NCount+" )"; MySQL.SQLExec(SQL); SQL = "INSERT INTO notice_logupdate (`day_id`,`start_time`, `end_time`, `recordcount`) VALUES ("+CurrentDate+", "+StartTime+", "+EndTime+", "+NCount+") " + "ON DUPLICATE KEY UPDATE start_time="+StartTime+", end_time="+EndTime+", recordcount="+NCount+""; MySQL.SQLExec(SQL); Print("[OK] - Синхронизация успешно завершена"); PW.println("Content-type: text/plain; charser: utf-8"); PW.println("OK"); } catch (Exception e) { Print("[ER] - Текст ошибки: " + e.getMessage() + " Код ошибки: " + e.hashCode()); e.printStackTrace(); } } } Добавлено:
0
|
|||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
|
| 30.07.2012, 16:05 | |
|
Вроде цикл правильный...
Попробовать бы сделать .. И вообще из 3-х методов Export_ выделил бы общую часть - общий метод, куда и цикл бы вынес. И вконце метода добавил бы <!--shcode--><pre><code class=java>finally { doc.recycle(); view.recycle(); }[/CODE]Если будет падать, то наверное надо с памятью играться. Больше идей у меня нет. Добавлено: И что-то бы придумал, чтобы SQL-запрос автоматом формировался, а не такой ужас... Например готовить HashMap("имя поля в Лотус") = "имя поля в mySql" или 2 Vectorа (векторы из Лотуса легче получить) и вбрасывать в метод. Так понятнее было бы.
0
|
|
|
0 / 0 / 0
Регистрация: 26.06.2006
Сообщений: 143
|
||||
| 31.07.2012, 15:03 | ||||
|
RixPvl,
IBM Heap Analyzer просто меньше по размеру - всего 5 Мб.
JavaMaxHeapSize - максимальный размер памяти, которую может использовать JVM (виртуальная машина Java) задачи Agent Manager, отвечающей в том числе за запуск агентов в контексте клиента (т.е. запускаемые при работе в клиенте или на сервере). HTTPJVMMaxHeapSize - максимальный размер памяти, которую может использовать JVM задачи HTTP, отвечающей в том числе за запуск агентов в контексте веба (т.е. запускаемые при работе в веб)
P.S. По поводу собирания SQL запроса в строку и передачи ее в функцию - лучше используй <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">PreparedStatement</div></div><div class="sp-body"><div class="sp-content">Для начала на русском: http://www.javaportal.ru/java/tutorial/tut...dstatement.html Затем "от создателя": http://docs.oracle.com/javase/tutorial/jdb...s/prepared.html И затем примеры на Java: http://www.roseindia.net/jdbc/... ords.shtml http://www.roseindia.net/jdbc/jdbc-mysql/T...Statement.shtml
0
|
||||
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
|
| 01.08.2012, 10:38 | |
|
Кирилл Шваб, lmike большое Вам спасибо, завтра попробую сделать все что вы написали.
Жаль еще раз нельзя плюсануть)
0
|
|
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
|
| 01.08.2012, 12:17 | |
|
RixPvl
Было бы интересно увидеть, как преобразился код в результате этих проб)
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
||||||
| 01.08.2012, 13:38 | ||||||
|
Как раз сейчас делаю используя новый метод, только вот столкнулся с одним моментом как сделать ее в виде "универсальной" функции что то типа
SQL_EXEC("INSERT INTO table(f1,f2,f3) VALUES(?,?,?)", p1, p2, p3) причем кол-во параметром может быть разным
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
|||||||||||
| 01.08.2012, 13:53 | |||||||||||
|
Есть правда следующая идея написать функции что то типа
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
|
| 01.08.2012, 16:01 | |
|
RixPvl
Я выше что-то такое имел ввиду: <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class=java>/** * @param nd - документ, из которого будут вычисляться значения * @param vctRdbFields - вектор полей реляционной БД, полученный из конфугурационного документа * @param vctLdbFormulas - вектор формул для вычисления значений из документа, передаваемых в соответствующее поле РДБ вектора vctRdbFields, * полученный из конфугурационного документа; чаще всего просто имя itemа * @param vctValueTypes - вектор типов передаваемых значений, полученный из конфугурационного документа * Количество значений в векторах должно быть равным (контролируется в интерфейсе конфигурационного документа и/или методе инициализации векторов). * @return Запрос в виде строки, сгенерированный по переданному документу */ public String generateDocumentRequest(Document nd, Vector vctRdbFields, Vector vctLdbFormulas, Vector vctValueTypes) { String sRequest; for (int i = 0; i < vctRdbFields.size(); i++) { // здесь производим вычисление значений и сборку текста запроса // вполне возможно использовать здесь PreparedStatement, но тогда, наверное, функция будет возвращать уже не String // для того, чтобы использовать vctValueTypes для вызова setXXX, наверное логично заюзать Reflection } return sRequest; }[/CODE]Кстати, вектора можно не передавать параметрами, а сделать их полями класса, т.к. метод будет вызываться в цикле, то меняться будет только сам документ. Добавлено: Про Java Reflection можно почитать здесь, а можно просто проставить switch и не заморачиваться. Но с Reflection красивше
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 69
|
||||||
| 01.08.2012, 16:44 | ||||||
|
Думаю к PreparedStatement я вернусь, смотрю на это все и думаю что надо хорошенько посидеть чтобы понять что к чему, и на сколько это быстрей чем то что я использую?
сейчас я увеличил JavaMaxHeapSize до 256 мб и до скольки можно ее поднять? это зависит от озу? + сделал изменение при переборе клекции по аналогии из хелп лотуса <!--shcode--><pre><code class=java>while (doc != null) { System.out.println ("\t" + doc.getItemValueString("Subject")); tmpdoc = view.getNextDocument(doc); doc.recycle(); doc = tmpdoc; }[/CODE] <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Чуть измененный агент</div></div><div class="sp-body"><div class="sp-content">
сегодня днем проверял состояние памяти на сервере было 50-60% занято, к концу дня занято было 96%, с чем это может быть связано? не нужно ли после выполнения всех агентов выполнять уничтожение всех созданных объектов?
0
|
||||||
|
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
|
||
| 01.08.2012, 17:35 | ||
Добавлено: дискуссия по правильной очистке объектов перенесена в .
0
|
||
| 01.08.2012, 17:35 | |
|
Помогаю со студенческими работами здесь
20
Lotus и MS SQL (jdbc) Lotus и MySQL (LCConnection) Lotus и MySQL (ODBC) Jdbc Access For Ibm Lotus Domino Ошибка при отправке запроса MySQL через JDBC MySQL connector Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|