class ConnSQL2K{
private Connection conn; public ConnSQL2K(String ipAddr,String dbName,String user,String pwd){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("数据库驱动加载成功!");
}
catch(ClassNotFoundException e){
e.printStackTrace();
} String url = "jdbc:microsoft:sqlserver://" + ipAddr +":1433; DatabaseName=" + dbName ;
try{
conn = DriverManager.getConnection(url,user,pwd);
System.out.println("数据库连接成功!");
}
catch(SQLException e){
e.printStackTrace();
}
} public Connection getConn(){
return conn;
}
}
如上代码,为什么我用sa用户连接时,不管指定那个数据库,它都连到master库?
只能连接到用户的默认数据库吗?
难道要为每个数据库分别指定不同的登录名???
是不是程序代码修改了没有保存呢,如果是eclipse右击--运行看看。
一般来讲,登录用户要授权.比如你指定的数据库
如果打开sql2000企业管理器把sa的默认数据库改为pubs,才能查询pubs库
LZ再仔细检查一下是不是你的dbname user 还有pwd传过去的有问题
可以在他们之前System.out.println();一下
// 好象这里给的数据库名无效,总是到master库查找
// ConnSQL2K conn2K = new ConnSQL2K("localhost","pubs","sa","");
Connection conn = conn2K.getConn(); String strSQL;
strSQL = "select * from authors";
try {
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
System.out.println(strSQL);
ResultSet rs = stmt.executeQuery(strSQL);
rs.beforeFirst();
while(rs.next()) {
System.out.println(rs.getLong("au_id"));
System.out.println(rs.getString("au_lname"));
}
}
catch(Exception e) {
e.printStackTrace();
} }
//mydb为数据库
"jdbc:sqlserver://localhost:1433;DatabaseName=model"
连接这个数据库model
我用sa登录,我指定数据库为master时,能查询数据
指定到其他数据库时,连接成功,查表时出错,提示说,找不到表或字段,
当把我要查的表复制到master库时,不出错,或者打开sql企业管理器,更换sa的默认数据库也会消除错误
这是什么原因?
我用java连接过sql2000,并没有这种情况出现
刚才才发现是数据库连接字符串中多了个空格,也就是DatabaseName前多了个空格
String url = "jdbc:microsoft:sqlserver://" + ipAddr +":1433; DatabaseName=" + dbName ;
把空格去掉后就可以连接上自己的数据库了!
楼主也是同样的错误!同为天涯沦落人啊!