我用java连接数据库,没有抛出任何异常,但是我想返回数据库的内容,但是就是没有相关信息。后来我想测试一下,显示连接成功。也就是Connection con的值不为null。
进一步测试,我把databasename的值改为一个我数据库中没有的数据库,但是显示依然成功,请问这是怎么回事,是驱动还是什么别的原因造成的。
用你的代码运行了一遍 完全没有问题 问题出在
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=books";//books的数据库名
这里
url中1433;后面多出了空格,找不到数据库,当然也找不到表
把你的代码贴出来
[quote]Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
[/quote]
把 .newInstance() 去掉试试
不懂了。。。
1. 试试将[quote]String sql="select * from BOOKS";[/quote]
改为 select LoginNUM from BOOKS
2. [quote]System.out.println(rs.getString("LoginNUM")); [/quote]
不要使用列标志,而是使用index ,如 rs.getString(1),可能只认大写的列名
Connection conn= DriverManager.getConnection(url, "sa","sa"); 加判断看是否链接上数据库
if(null == conn){
System.out.println("error");
}else{
//TODO 执行查询操作
}
这样看看
首先看下你有没导jar包,然后就是各种打印conn,stmt,rs看看他们都是不是为null
while(rs.next()) ?不是hasNext()?
靠,不好意识看错了,忽略我上面的
你数据库jar报引了没,还有就是你表里面有数据没,看看
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnect {
public Connection getConnect(String driver, String url, String user, String pwd) {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public void closeConnect(Connection conn) {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
package util;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlExecutor {
private Connection conn;
private Statement stmt;
private DBConnect db = new DBConnect();
public int[] exeBatch(String driver, String url, String user, String pwd, String[] sqls) {
int[] result = new int[sqls.length];
conn = db.getConnect(driver, url, user, pwd);
try {
stmt = conn.createStatement();
for (int i = 0; i < sqls.length; i++) {
if (sqls[i].endsWith(";"))
stmt.addBatch(sqls[i]);
}
result = stmt.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
} finally {
db.closeConnect(conn);
}
return result;
}
}
LZ看看
[code="java"]import java.sql.*;
public class LuceneDb{
public static void main(String[] args)
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
String url ="jdbc:sqlserver://10.160.8.71:1433;databaseName=joffice";
Connection conn= DriverManager.getConnection(url, "sa","123456");
Statement stmt=conn.createStatement();
String sql="select * from BOOKS";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getString("LoginNUM"));
}
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}[/code]
你的代码是没有问题的,我只是把驱动换了一下,因为你的那个在我这找不到;所以你也试着换一下驱动包试试,我觉得肯定是驱动包的问题。你换个驱动试试吧
[code="java"]
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url ="jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=books";//books的数据库名
Connection conn= DriverManager.getConnection(url, "sa","sa");
System.out.println(conn);
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
[/code]
这样就应可以的,你调试一下看看。
你的数据库名好像没用吧
看错了呵呵
sqlserver的url是这么写的吗?
我没用过
你在主方法里调用的数据库连接是另一个。所以修改这个没用。
建立连接SQL Sever 的[b]数据源了[/b]没?
确定数据库的表里有数据的话,试试把jdbc换jtds试试,百度一下就有连接字符串什么的
好像是这样的
1433端口打开了没?
System.out.println(rs.getString("LoginNUM"));
rs.getString(行,"列")
先别急查数据,先把connection对象打出来,看看是否是null.如果有值,说明连接成功,
打然再断点,
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
注意上面的区别:一个是sql2000 一个是sql2005
com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc:sqlserver://localhost:1433;databaseName=security
我怕虽然没有用过sqlserver连接数据库,但是mysql,DB2,oracle我都用过的,都是这个代码的,你的JAR包,也就是驱动包,对应的版本搞对了没有啊啊?
我就怀疑你的驱动包的版本呢?
我觉得你的代码是没有问题的,。
在一个,看看你的服务是不是开启的?
应该是你数据库的Jar包问题,代码可以运行
1、rs、stmt、conn没有关闭
2、BOOKS表有没有数据? LoginNUM列有没有数据? LoginNUM字段类型是不是varchar
:shock: 8) :P :oops: :roll: :twisted: :( :wink:
看看"LoginNUM”什么类型的,再决定怎样显示结果。