Где указать имя базы данных в методе getTables (). - PullRequest
0 голосов
/ 30 апреля 2018

Метод getTables () не возвращает никаких результатов для таблицы, которая существует в базе данных. Я думаю, проблема в том, что он не знает, какую базу данных посмотреть на ip. Как указать, в какую базу данных должен обращаться метод getTables (), поскольку у меня несколько баз данных с одинаковыми таблицами?

         //concatinating strings for IP to hit
        String ArchiveDB_URL = "jdbc:sqlserver://" + getArchiveIPaddress();


        //  Database credentials
        String USER = "Removed";
        String PASS = "Removed";

        Connection archiveConn = null;
        Statement archiveStmt = null;

        try {

            // Register JDBC driver
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            // Open a connection   

            archiveConn = DriverManager.getConnection(ArchiveDB_URL, USER, PASS);

            DatabaseMetaData dbm = archiveConn.getMetaData();
            ResultSet rsTBmd = dbm.getTables(null,null, "[myDatabase].[dbo].[myTable]", new String[] {"TABLE"});

            System.out.println(rsTBmd.getString("TABLE_NAME"));

             if (rsTBmd.next()){
               //result sets start at 1 not 0
               int rsTBmdi = 1;  
               while(rsTBmd.next()){
                   System.out.println(rsTBmd.getString(rsTBmdi));
                   rsTBmdi++;
               }
           }

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Первые два аргумента getTables : catalog и schemaPattern. «Каталог» - это другое имя для «Базы данных», поэтому просто укажите имя базы данных в качестве первого аргумента:

ResultSet rsTBmd = dbm.getTables("myDatabase", "dbo", "myTable", new String[] {"TABLE"});

Обратите внимание, что в этом случае вы не заключаете имена в квадратные скобки, даже если они содержат пробелы или «забавные символы».

0 голосов
/ 30 апреля 2018

Согласно Microsoft , ваш URL JDBC выглядит как "jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;user=UserName;password=*****";, что делает ваш код:

    //  Database credentials
    String USER = "Removed";
    String PASS = "Removed";

    Connection archiveConn = null;
    Statement archiveStmt = null;

    try {

        // Register JDBC driver
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        // Open a connection   
     //concatinating strings for IP to hit
    String ArchiveDB_URL = "jdbc:sqlserver://" + getArchiveIPaddress() + ";database=myDatabase;username="+USER+";password="+PASS;

        archiveConn = DriverManager.getConnection(ArchiveDB_URL);

        DatabaseMetaData dbm = archiveConn.getMetaData();
        ResultSet rsTBmd = dbm.getTables(null,null, "[myDatabase].[dbo].[myTable]", new String[] {"TABLE"});

        System.out.println(rsTBmd.getString("TABLE_NAME"));

         if (rsTBmd.next()){
           //result sets start at 1 not 0
           int rsTBmdi = 1;  
           while(rsTBmd.next()){
               System.out.println(rsTBmd.getString(rsTBmdi));
               rsTBmdi++;
           }
       }

Надеюсь, это поможет ...

0 голосов
/ 30 апреля 2018

Попробуйте добавить имя базы данных в ArchiveDB_URL

String ArchiveDB_URL = "jdbc:sqlserver://" + getArchiveIPaddress() + "/yourDatabaseNameHere";
...