通过数据库名称即测试Sid是否有效

时间:2018-08-06 08:12:57

标签: java rest oracle11g spring-jdbc spring-rest

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    public class Main {

      public static void main(String[] args) throws Exception {
        Connection conn = getOracleConnection();
        Statement stmt = null;
        ResultSet rs = null;
        stmt = conn.createStatement();
        //only for Oracle
        rs = stmt.executeQuery("select object_name from user_objects where object_type = 'TABLE'");

        while (rs.next()) {
          String tableName = rs.getString(1);
          System.out.println("tableName=" + tableName);
        }

        stmt.close();
        conn.close();
      }

      /*private static Connection getHSQLConnection() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver");
        System.out.println("Driver Loaded.");
        String url = "jdbc:hsqldb:data/tutorial";
        return DriverManager.getConnection(url, "sa", "");
      }*/

     /* public static Connection getMySqlConnection() throws Exception {
        String driver = "org.gjt.mm.mysql.Driver";
        String url = "jdbc:mysql://localhost/demo2s";
        String username = "oost";
        String password = "oost";
    */
       /* Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }
    */
      public static Connection getOracleConnection() throws Exception {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:Test";
        String username = "system";
        String password = "root12345";

        Class.forName(driver); // load Oracle driver
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }

    }

我将从Test数据库中获取表的列表,但出现错误,例如侦听器拒绝连接,侦听器拒绝连接,并显示以下错误:

  

ORA-12505,TNS:侦听器当前不知道连接描述符中给出的SID

但是当我将Test更改为Orcl时,它可以正常工作,但是我想从特定的数据库中选择表。

我哪里出错了?

1 个答案:

答案 0 :(得分:0)

解决问题的最佳方法是先阅读错误或异常 SID 在此错误中,test意味着总之您数据库的唯一名称。

更改DB url时,仅表示当前SID(DB)上不可用 或SID不存在,则需要使用相同的名称创建新的

或者如果URL可用,请检查SID中的select * from global_name;

编辑1: 要查找SID,您可以使用test.world 它会给您一个价值,按原样使用它。 我认为您需要使用String url = "jdbc:oracle:thin:@localhost:1521/Test";

对此网址进行更改

String url = "jdbc:oracle:thin:@localhost:1521/Test.world";

{{1}}