本帖最后由 drmarius 于 2014-09-03 15:57:26 编辑

解决方案 »

  1.   

    不会输出  System.out.println("链接数据库失败!"); 吗?
    System.out.println("链接数据库成功!"); 之前打印下conn的值,看是否有值
    System.out.println(conn.toString());
      

  2.   


    按你说的方法执行了一下,结果如下:
    “ConnectionID:1 ClientConnectionId: aa0f46a8-1359-4923-9493-09d69a3afaa4
    链接数据库成功!”
    可以肯定的是conn有值了,但是如何确实它连接的是哪个数据库是个问题。
      

  3.   

    你敢输jdbc:sqlserver://localhost:8888试下么?
      

  4.   

    当然连接成功,只不过,不知道具体连的那个库而已,你试下下面这个,我的mysql中没有叫a的数据库就会报错。private static final String sql = "jdbc:mysql://localhost:3306/a";
    private static final String sql = "jdbc:sqlserver://localhost:143";
      

  5.   


    我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?
      

  6.   


    我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?有什么实际意义吗
      

  7.   

     URL 通常是你的数据源名字或数据库系统,最后一部分提供了定位数据库的信息,所以你可以不写数据库也会链接成功。
      

  8.   

    JDBC跟使用的数据库有关系,你想不输入数据库名提示错误的话,估计要自己根据数据库提供的JDBC URL规范解析一下JDBC URL了
      

  9.   

    oracle数据库连接时,数据库实例名为空或不存在时,数据库时连不上的,直接报错的
    可以使用数据库的数据库元数据类,来获取连接的
    Connection conn = DriverManager.getConnection(url, username, password);
    DatabaseMetaData   md = conn.getMetaData();
    获取数据库元数据后,可是使用
    String getURL()  throws SQLException 获取此 DBMS 的 URL。 
    来查看连接到了哪个实例名,实例名其实就是连接数据库的url地址
      

  10.   


    我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?
    检查下连接字符串有没有制定数据库?
      

  11.   


    我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?有什么实际意义吗因为这个情况的存在产生了一个错误,我查错用了一天的时间才找到发生错误的地方,所以想避免再次出现这种情况。
      

  12.   


    我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?你可以加过判断呀,你可以用getDatabaseProductName()获取数据库名来判断是否是 master,如果是的话就输出报错信息。
      

  13.   

    这是一个常识问题,就是这么配置的。如果非要实现判断,那你自己在后面加判断条件。楼上提供了一种方法,你也可以截取连接串里面的database名字判断。
      

  14.   


    我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?你可以加过判断呀,你可以用getDatabaseProductName()获取数据库名来判断是否是 master,如果是的话就输出报错信息。
    getDatabaseProductName()方法获取的是数据库产品的名称,我测试输出的结果是Microsoft SQL Server。得不到数据库名
      

  15.   

    问题已经解决,根据magi1201大神提供的思路,找到了解决的办法,可能麻烦一些,不过确实解决了面临的问题。更新后的代码如下,希望给有同样困扰的人有所帮助。
    /**
     * 创建数据库链接
     * 
     * @return
     */
    public Connection getConnection() {
    Connection conn = null;
    try {
    conn = DriverManager.getConnection(sql, name, pwd);
    /**
     * 判断是否连接到正确的数据库
     */
    DatabaseMetaData dm = conn.getMetaData();//使用DatabaseMetaData类
    String url = dm.getURL();//获得链接属性的字符串

    //将链接属性的字符串通过拆分存放在一个Map里,
    Map<String,String> map = new HashMap<String,String>();
    String[] temp = url.split(";");
    for (int i = 0; i < temp.length; i++) {
    String str = temp[i];
    String[] arr=str.split("=");
    if(i==0){
    map.put("jdbc", arr[0]);//存放的内容是“jdbc:sqlserver://localhost:1433;”,其实就是最基本的连接串,但是没有"="号匹配,所以单独处理
    }else{
    map.put(arr[0], arr[1]);

    }

    }
    //判断Map里是否有需要连接的数据库名
    if(map.containsValue("EPETSHOP")){
    System.out.println("链接数据库成功!");
    }else{
    System.out.println("链接数据库失败!");
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return conn;
    }