2014-01-16 17 views
0

У меня есть это Java-приложение, в котором я сейчас разрабатываю модуль, который может читать и выполнять SQL-запросы из файла и выводить результаты запросов. Если я запустил модуль по его основному методу, он отлично работает. Я даю путь к файлу настроек подключения DB (с пользователем, pass, port и т. Д.), Путь к файлу, содержащему SQL-запросы и имя выходного файла. Как я уже сказал, он запускается как самостоятельный, он отлично работает, подключается без проблем, выполняет запросы и выводит их результаты. Если я интегрирую его в рабочий процесс приложения, он не может подключиться к базе данных, даже если учетные данные (например, файл настроек подключения к БД) совпадают. Я попытался обернуть его в поток, попытался выполнить поиск, если мне нужно запустить соединение асинхронно, но ничего не помогло. Mysql-connector-java-5.1.28 находится в пути к классам, все выглядит нормально. Я также попытался установить autoReconnect (прокомментированная строка), но он также терпит неудачу. Это код для создания соединения:не удалось подключиться к базе данных MySQL, используя JDBC

String url = "jdbc:mysql://"+server+":3306/?useCursorFetch=true"; 
//String url = "jdbc:mysql://"+server+":3306/?autoReconnect=true"; 

try { 
    return DriverManager.getConnection(url, user, password); 
} catch (SQLException e1) { 
     Logging.outputStackTrace(e1); 
     throw new RuntimeException("Cannot connect to DB server: " + e1.getMessage()); 

с сервером = localhost. Пользователь и пропуск в порядке, извините за повторение в третий раз, соединение будет успешным при запуске через основной метод модуля. Это трассировки стека я получаю во время работы модуля с помощью приложения:

ERROR: An error occurred : Could not create connection to database server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
Check the error log for details 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
java.lang.reflect.Constructor.newInstance(Unknown Source) 
com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
com.mysql.jdbc.Util.getInstance(Util.java:386) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2575) 
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2311) 
com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) 
com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
java.lang.reflect.Constructor.newInstance(Unknown Source) 
com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) 
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:347) 
java.sql.DriverManager.getConnection(Unknown Source) 
java.sql.DriverManager.getConnection(Unknown Source) 
org.application.utilities.DBConnection.connectToMySQL(DBConnection.java:144) 
org.application.utilities.DBConnection.connect(DBConnection.java:107) 
org.application.utilities.RunSQL.run(RunSQL.java:110) 
org.application.workflow.Processing.extractData(Processing.java:201) 
org.application.workflow.Processing.<init>(Processing.java:73) 
org.application.gui.ApiGUI$2.actionPerformed(ApiGUI.java:349) 
javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
java.awt.Component.processMouseEvent(Unknown Source) 
javax.swing.JComponent.processMouseEvent(Unknown Source) 
java.awt.Component.processEvent(Unknown Source) 
java.awt.Container.processEvent(Unknown Source) 
java.awt.Component.dispatchEventImpl(Unknown Source) 
java.awt.Container.dispatchEventImpl(Unknown Source) 
java.awt.Component.dispatchEvent(Unknown Source) 
java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
java.awt.Container.dispatchEventImpl(Unknown Source) 
java.awt.Window.dispatchEventImpl(Unknown Source) 
java.awt.Component.dispatchEvent(Unknown Source) 
java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
java.awt.EventQueue.access$200(Unknown Source) 
java.awt.EventQueue$3.run(Unknown Source) 
java.awt.EventQueue$3.run(Unknown Source) 
java.security.AccessController.doPrivileged(Native Method) 
java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
java.awt.EventQueue$4.run(Unknown Source) 
java.awt.EventQueue$4.run(Unknown Source) 
java.security.AccessController.doPrivileged(Native Method) 
java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
java.awt.EventQueue.dispatchEvent(Unknown Source) 
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
java.awt.EventDispatchThread.run(Unknown Source) 

Любые идеи, почему это происходит? Это проблема, связанная с потоком? Может ли менеджер событий GUI иметь к этому какое-то отношение? Нет нескольких соединений или одновременных подключений к базе данных. Только один раз, и он будет закрыт, когда закончится. Через командную строку MySQL я также получаю доступ к моей базе данных, я убедился, что сервер работает каждый раз и т. Д. Спасибо.

ответ

4

я думаю, что вы забыли упомянуть имя базы данных

String url = "jdbc:mysql://"+server+":3306/?useCursorFetch=true"; 

должен быть

String url = "jdbc:mysql://"+server+":3306/DB_NAME?useCursorFetch=true"; 
+0

Спасибо за быстрый ответ. Имя базы данных не является проблемой. Он не подключается к серверу, это не проблема с поиском схемы или базы данных. Как я уже сказал, как самостоятельный, он отлично работает именно с этим URL-адресом, который я поставил на своем посту. Я добавил имя базы данных, и это все равно такое же поведение. Любые другие идеи? – Marius

+0

другой мудрый его выглядит идеально? Вы получаете информацию о соединении из файла, поэтому, возможно, есть доступное пространство, в котором возникает проблема, поэтому попробуйте проверить соединение, взяв данные из файла по вашему основному методу , потому что я уже сталкиваюсь с этой проблемой с файлом свойств надеюсь, что эта помощь –

+0

I знаете, что вы имеете в виду, имели также те же проблемы со свойствами, но я проверил и дважды проверял пробелы, подрезал каждую запись из файла сведений о соединении, жестко закодировал весь URL-адрес, а также пользователь, прошел и все еще ничего. Теперь я пытаюсь понять, не обходит ли это EDT. До сих пор у меня есть интерфейс поверх API. это похоже на какой-то параллелизм потоков или что-то в этом роде. – Marius

1

OK. Понял. Когда я был запущен модуль SQL с помощью приложения, я устанавливал файл кодировку ANSI через

System.setProperty("file.encoding", "ANSI"); 

, который не был случай во время работы он стоять в одиночку. Очевидно, что DriverManager.getConnection (url, user, pass) не устанавливает набор символов самостоятельно, чтобы убедиться, что он отправляет запросы в совместимой кодировке символов. Возможно, это должно быть исправлено в пакете java.sql.

Смежные вопросы