JDBC中URL的问题,请教高手给详细说明一下 本帖最后由 drmarius 于 2014-09-03 15:57:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不会输出 System.out.println("链接数据库失败!"); 吗?System.out.println("链接数据库成功!"); 之前打印下conn的值,看是否有值System.out.println(conn.toString()); 按你说的方法执行了一下,结果如下:“ConnectionID:1 ClientConnectionId: aa0f46a8-1359-4923-9493-09d69a3afaa4链接数据库成功!”可以肯定的是conn有值了,但是如何确实它连接的是哪个数据库是个问题。 你敢输jdbc:sqlserver://localhost:8888试下么? 当然连接成功,只不过,不知道具体连的那个库而已,你试下下面这个,我的mysql中没有叫a的数据库就会报错。private static final String sql = "jdbc:mysql://localhost:3306/a";private static final String sql = "jdbc:sqlserver://localhost:143"; 我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢? 我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?有什么实际意义吗 URL 通常是你的数据源名字或数据库系统,最后一部分提供了定位数据库的信息,所以你可以不写数据库也会链接成功。 JDBC跟使用的数据库有关系,你想不输入数据库名提示错误的话,估计要自己根据数据库提供的JDBC URL规范解析一下JDBC URL了 oracle数据库连接时,数据库实例名为空或不存在时,数据库时连不上的,直接报错的可以使用数据库的数据库元数据类,来获取连接的Connection conn = DriverManager.getConnection(url, username, password);DatabaseMetaData md = conn.getMetaData();获取数据库元数据后,可是使用String getURL() throws SQLException 获取此 DBMS 的 URL。 来查看连接到了哪个实例名,实例名其实就是连接数据库的url地址 我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?检查下连接字符串有没有制定数据库? 我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?有什么实际意义吗因为这个情况的存在产生了一个错误,我查错用了一天的时间才找到发生错误的地方,所以想避免再次出现这种情况。 我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?你可以加过判断呀,你可以用getDatabaseProductName()获取数据库名来判断是否是 master,如果是的话就输出报错信息。 这是一个常识问题,就是这么配置的。如果非要实现判断,那你自己在后面加判断条件。楼上提供了一种方法,你也可以截取连接串里面的database名字判断。 我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?你可以加过判断呀,你可以用getDatabaseProductName()获取数据库名来判断是否是 master,如果是的话就输出报错信息。getDatabaseProductName()方法获取的是数据库产品的名称,我测试输出的结果是Microsoft SQL Server。得不到数据库名 问题已经解决,根据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; } 参数索引和文件异常的问题 简单的一小段代码,有看不懂的地方,求讲解 jtable里如何设置某列的类型为Boolean,Integer等? GUI的问题 ActiveX问题。 跪求!!!一个servlet实现文件上传的例子 请帮忙 请问怎么做日志 当鼠标进去容器后,怎么可以把箭头变成(一只手) 用jcreator的朋友请进 java新手 接口 类的封装 请教各位大神,出现了FileNotFoundException,系统找不到指定的文件的错误
System.out.println("链接数据库成功!"); 之前打印下conn的值,看是否有值
System.out.println(conn.toString());
按你说的方法执行了一下,结果如下:
“ConnectionID:1 ClientConnectionId: aa0f46a8-1359-4923-9493-09d69a3afaa4
链接数据库成功!”
可以肯定的是conn有值了,但是如何确实它连接的是哪个数据库是个问题。
private static final String sql = "jdbc:sqlserver://localhost:143";
我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?
我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?有什么实际意义吗
可以使用数据库的数据库元数据类,来获取连接的
Connection conn = DriverManager.getConnection(url, username, password);
DatabaseMetaData md = conn.getMetaData();
获取数据库元数据后,可是使用
String getURL() throws SQLException 获取此 DBMS 的 URL。
来查看连接到了哪个实例名,实例名其实就是连接数据库的url地址
我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?
检查下连接字符串有没有制定数据库?
我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?有什么实际意义吗因为这个情况的存在产生了一个错误,我查错用了一天的时间才找到发生错误的地方,所以想避免再次出现这种情况。
我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?你可以加过判断呀,你可以用getDatabaseProductName()获取数据库名来判断是否是 master,如果是的话就输出报错信息。
我后面测试过,发现不写数据库名默认连接的是master这个数据库。有没有一个方法可以实现:我不指定数据库的时候报错呢?你可以加过判断呀,你可以用getDatabaseProductName()获取数据库名来判断是否是 master,如果是的话就输出报错信息。
getDatabaseProductName()方法获取的是数据库产品的名称,我测试输出的结果是Microsoft SQL Server。得不到数据库名
/**
* 创建数据库链接
*
* @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;
}