Ошибка при попытке подключения

classic Classic list List threaded Threaded
5 messages Options
Svetlana Svetlana
Reply | Threaded
Open this post in threaded view
|

Ошибка при попытке подключения

package Sale.com;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;


public class Connect {
       
        static Properties conProperties = new Properties();
        static Connection con = null;
       
        public static void Create(String ip, String hostuser, String hostpas, String dbpath, String cuser, String cpas)
        {
                conProperties.put("oce.host", ip);
                conProperties.put("oce.driver", "V82Driver");
                conProperties.put("oce.host.user", hostuser);
                conProperties.put("oce.host.password", hostpas);
                conProperties.put("oce.1c.dbpath", dbpath);
                conProperties.put("oce.1c.user", cuser);
                conProperties.put("oce.1c.passwors", cpas);
                conProperties.put("autoRegistration", true);
               
                try{
                        Class.forName("com.ipc.oce.jdbc.OCEDriver");
                        con = DriverManager.getConnection("jdbc:oce:dcom", conProperties);
                        assertNotNull(con);
                        assertFalse(con.isClosed());
                }
                catch(SQLException e){
                        e.printStackTrace();
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                finally{
                       
                }
        }

}

Сама ошибка:
java.sql.SQLException: Connection failed. Parameters {oce.1c.user=ххх, oce.host=192.168.1.100, oce.1c.dbpath=F:\\1C\\InfoBase, oce.host.user=HUser, oce.driver=V82Driver, oce.host.password=HPas, autoRegistration=true, oce.1c.passwors=xxx}. java.io.FileNotFoundException: /sdcard/j-Interop0.log.lck: open failed: EACCES (Permission denied)
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при попытке подключения

Это ошибка от логгера j-interop.
По умолчанию j-interop пишет весьма объемные логи о работе DCOM. Сваливает он это в системную папке temp. Для java это "java.io.tmpdir".
Собственно тут и тут кое-что об этом есть.
Можно и так:
try {
            JISystem.setInBuiltLogHandler(false);
            JISystem.getLogger().setLevel(Level.OFF);
        } catch (Exception e) {
            //System.out.println(e.getMessage());
        }
Но так файлы логов создаваться все равно будут, просто будут пустыми.
Что касается "Permission denied", то файл пытается записаться в указанную папку, но у пользователя из-под которого запускается приложение нет к нему прав доступа. Нужно: перенастроить логгер или открыть права на запись этому пользователю в эту папку.
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при попытке подключения

In reply to this post by Svetlana
Люди говорят, что нужно добавить манифест и разрешения
http://developer.android.com/guide/topics/security/security.html
http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE

обратите внимание на WRITE_EXTERNAL_STORAGE
OCTitbit developer.
Svetlana Svetlana
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при попытке подключения

Спасибо, Игорь. Ошибку из-за логгера исправила. Но в строке подключения:
con = DriverManager.getConnection("jdbc:oce:dcom", conProperties);
появилась ошибка java.lang.IllegalStateException: Cp850.
Как я понимаю, это ошибка кодировки? но все параметры подключения заданы англ. буквами. Подскажите, пожалуйста, в чем я ошибаюсь.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при попытке подключения

Cp850 это кодировка по умолчанию для jcifs (субкомпонент jinterop).
Не все jvm под linux имеют поддержку этой кодировки. jcifs вообще имеет много настроек связанных с кодировкой, так что выкрутиться можно  
1) Просмотр настроек jcifs. Можно просто сдампить и посмотреть
jcifs.Config.list(System.out)
2) Установка параметра jcifs.encoding. Например в utf-8. Делается это или программно через системные проперти java, или через -Djcifs.encoding, или прямо в
jcifs.Config.setProperty("jcifs.encoding", <YOUR_ENC>)
OCTitbit developer.