Подключение к Sql Server Local Db через Jtds - PullRequest
0 голосов
/ 31 августа 2018

Alrighty,

Я пытаюсь подключиться к нескольким различным базам данных, используя пул подключений Apache, но у меня возникают проблемы с LocalDb через Jtds. Я получаю следующее сообщение об ошибке:

Aug 31, 2018 8:49:24 PM Model.DataAccessLayer.Database.ConnectionPool_LocalDb main
SEVERE: null
java.sql.SQLException: Network error IOException: \\.\pipe\MSSQL$LOCALDB#F1954C00\sql\query (The system cannot find the file specified)
    at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:436)
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at org.apache.commons.dbcp2.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:85)
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:260)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:433)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:362)
    at org.apache.commons.dbcp2.PoolingDriver.connect(PoolingDriver.java:128)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at Model.DataAccessLayer.Database.ConnectionPool_LocalDb.getConnection(ConnectionPool_LocalDb.java:175)
    at Model.DataAccessLayer.Database.ConnectionPool_LocalDb.main(ConnectionPool_LocalDb.java:100)
Caused by: java.io.FileNotFoundException: \\.\pipe\MSSQL$LOCALDB#F1954C00\sql\query (The system cannot find the file specified)
    at java.io.RandomAccessFile.open0(Native Method)
    at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:124)
    at net.sourceforge.jtds.jdbc.SharedLocalNamedPipe.<init>(SharedLocalNamedPipe.java:64)
    at net.sourceforge.jtds.jdbc.JtdsConnection.createNamedPipe(JtdsConnection.java:518)
    at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:328)

Код, с которым я играю, выглядит следующим образом. Как вы можете видеть, я пробовал несколько разных строк подключения, так как мое внутреннее чувство заключается именно в этом. Я:

    public static void main(String[] args) {

    //Connection Pool
    ConnectionPool_LocalDb pool = null;
    String driverPoolName = "docs";

    try {
        //Initialise H2 Connection
        String dbConnStrH2 = "jdbc:h2:~/test";
        String sqlH2 = "SELECT * FROM TEST2;";
        //Initialise Connection Pool
        pool = new ConnectionPool_LocalDb("jdbc:apache:commons:dbcp:", "org.apache.commons.dbcp2.PoolingDriver");
        //H2 Database
        pool.setupDriver(dbConnStrH2, driverPoolName);
        Connection h2Connection = pool.getConnection(driverPoolName);
        ResultSet h2ResultSet = pool.getResultSet(h2Connection, sqlH2);
        System.out.println("h2ResultSet = " + pool.getResultSetAsString(h2ResultSet));
        System.out.println("poolStats = " + pool.getPrintPoolStats(driverPoolName));

        //Initialise LocalDb Connection
        String driverPoolNameLocalDb = "localDb";
//        String dbConnStrLocalDb = "jdbc:jtds:sqlserver://./instance=LOCALDB#F1954C00;namedPipe=true";
//        String dbConnStrLocalDb = "jdbc:jtds:sqlserver://./instance=LOCALDB#F1954C00;namedPipe=true";
//        String dbConnStrLocalDb = "jdbc:jtds:sqlserver://./;instance=LOCALDB#F1954C00;namedPipe=true";
//        String dbConnStrLocalDb = "jdbc:jtds:sqlserver://./docs;instance=LOCALDB#F1954C00;namedPipe=true;domain=WORKGROUP";
          String dbConnStrLocalDb = "jdbc:jtds:sqlserver://./;instance=LOCALDB#F1954C00;namedPipe=true;domain=WORKGROUP";

        String sqlLocalDb = "SELECT * FROM [docs].[dbo].[documents]";
        //Sql Server LocalDb
        pool.setupDriver(dbConnStrLocalDb, driverPoolName);
        Connection LocalDbConnection = pool.getConnection(driverPoolName);
        ResultSet LocalDbResultSet = pool.getResultSet(LocalDbConnection, sqlLocalDb);
        System.out.println("LocalDbResultSet = " + pool.getResultSetAsString(LocalDbResultSet));
        System.out.println("poolStats = " + pool.getPrintPoolStats(driverPoolNameLocalDb));

        //Shutting down connections
        h2Connection.close();
        LocalDbConnection.close();
        pool.shutdownDriver(driverPoolName);

    } catch (Exception ex) {
        Logger.getLogger(ConnectionPool_LocalDb.class.getName()).log(Level.SEVERE, null, ex);
    }
    //Shut down driver pools
    try {
        pool.shutdownDriver(driverPoolName);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

Возможно, я страдаю от той же проблемы, что и Аджа: Подключение к SQL Server LocalDB с использованием JDBC

Ошибка происходит на линии Connection LocalDbConnection = pool.getConnection(driverPoolName);

К сожалению, его действительно легко подключить к производственному серверу SQL через jtds, но, к сожалению, я не могу сделать это на этапе разработки.

Мне удалось подключиться к LocalDb через Sql Server Management Studio.

Любая помощь будет принята с благодарностью.

...