Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在getTables()方法中,在何处指定数据库名称。_Java_Sql Server_Jdbc_Mssql Jdbc - Fatal编程技术网

Java 在getTables()方法中,在何处指定数据库名称。

Java 在getTables()方法中,在何处指定数据库名称。,java,sql-server,jdbc,mssql-jdbc,Java,Sql Server,Jdbc,Mssql Jdbc,getTables()方法不会返回数据库中存在的表的任何结果。我认为问题在于,它不知道在ip上查看哪个数据库。当我有多个具有相同表的数据库时,如何指定getTables()方法应该查看哪个数据库 //concatinating strings for IP to hit String ArchiveDB_URL = "jdbc:sqlserver://" + getArchiveIPaddress(); // Database creden

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++;
               }
           }

尝试在ArchiveDB_URL中添加数据库名称


尝试在ArchiveDB_URL中添加数据库名称


的前两个参数是
catalog
schemaPattern
。“Catalog”是“Database”的另一个名称,因此只需提供数据库名称作为第一个参数:

ResultSet rsTBmd=dbm.getTables(“myDatabase”、“dbo”、“myTable”、新字符串[]{“TABLE”});

请注意,在这种情况下,即使名称包含空格或“有趣的字符”,也不要将名称括在方括号中。

的前两个参数是
catalog
schemaPattern
。“Catalog”是“Database”的另一个名称,因此只需提供数据库名称作为第一个参数:

ResultSet rsTBmd=dbm.getTables(“myDatabase”、“dbo”、“myTable”、新字符串[]{“TABLE”});
请注意,在这种情况下,您不会将名称括在方括号中,即使它们包含空格或“有趣的字符”。

根据,您的JDBC URL看起来像
“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++;
           }
       }
我真的希望这有帮助…

根据,您的JDBC URL看起来像“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++;
           }
       }

我真的希望这有帮助…

您可以尝试使用
archiveConn.setCatalog(“myDatabase”)
设置当前数据库。您能更清楚地了解问题吗?它是从该数据库返回所有表,但缺少一个表,还是根本不返回表,还是完全返回了错误的表?每一个都可能意味着不同的问题(错误的服务器、缺乏权限、默认数据库)上面的“DatabaseMetaData dbm=archiveConn.getMetaData();”它现在显示以下异常“数据库“[myDatabase]”不存在。请确保输入的名称正确。“我知道它存在,我可以看到正在复制的其他表。收件人:Aaron Bertrand这应该是我在将该表复制到其他IP之前检查该表是否存在的尝试。”。当表存在时,我可以很好地复制它,但由于某些原因,我似乎无法使“if(rsTBmd.next())”返回true。当我在'getTables()'的第三个参数中输入'null'时,while循环会输出以下内容。master dbo spt_fallback_usg TABLE nullTip:在回复注释时,使用@GordThompson,而不是“to:…”。您可以尝试使用
archiveConn.setCatalog(“myDatabase”)
设置当前数据库。您能更清楚地了解问题吗?它是从该数据库返回所有表,但缺少一个表,还是根本不返回表,还是完全返回了错误的表?每一个都可能意味着不同的问题(错误的服务器、缺乏权限、默认数据库)上面的“DatabaseMetaData dbm=archiveConn.getMetaData();”它现在显示以下异常“数据库“[myDatabase]”不存在。请确保输入的名称正确。“我知道它存在,我可以看到正在复制的其他表。收件人:Aaron Bertrand这应该是我在将该表复制到其他IP之前检查该表是否存在的尝试。”。当表存在时,我可以很好地复制它,但由于某些原因,我似乎无法使“if(rsTBmd.next())”返回true。当我在'getTables()'的第三个参数中输入'null'时,while循环会输出以下内容。master dbo spt_fallback_usg TABLE nullTip:在回复注释时,请使用@GordThompson,而不是“to:…”。在删除数据库名称周围的附加括号后,此方法有效。我之所以添加它们,是因为大多数名称中都有下划线和连字符。显然,这种方法不喜欢括号。从
[my_Database-v1]
my_Database-v1
@NullPointerProliferator JDBC API指定您应该指定对象名称,因为它存储在目标数据库的元数据表中。SQL Server在其元数据表中不包含括号。@Mark Rottervell我必须放括号,这样insert、select和delete语句才能处理数据库名称中的下划线和连字符。我在我的StringBuilder变量中使用了这么多,我忘了它们在那里了。在我删除了数据库名称周围的附加括号后,这个方法起作用了。我之所以添加它们,是因为大多数名称中都有下划线和连字符。显然,这种方法不喜欢括号。从
[my_Database-v1]
my_Database-v1
@NullPointerProliferator JDBC API指定您应该指定对象名称,因为它存储在目标数据库的元数据表中。SQL Server在其元数据表中不包含括号。@Mark Rottervell我必须放括号,这样insert、select和delete语句才能处理数据库名称中的下划线和连字符。我在我的StringBuilder变量中使用了这么多,我忘记了它们在那里。