日期:2014-05-20  浏览次数:20692 次

JDBC 的问题????????
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.sql.*" %>

<%!
String DBDRIVE ="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String DBURL ="jdbc:microsoft:sqlserver://migo:1400;DataBase=usermessage";
String PASSWORD ="sa";
String USERNAME ="sa";
Connection con =null;
PreparedStatement ps =null;
ResultSet rs =null;
%>
<%--接受参数--%>
<%
String name=request.getParameter("uname");
String password=request.getParameter("password");
boolean flag=false;
%>
<%--验证用户--%>
<%
String sql="select userid from userinfo where username=? and userpassword=?";
try
{
Class.forName(DBDRIVE);
//out.print("驱动已加载");
con=DriverManager.getConnection(DBURL,USERNAME,PASSWORD);
//out.print("数据库已连接");
ps=con.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,password);
rs=ps.executeQuery();
out.print("SQL已执行");
out.print(rs.getRow());
if(rs.next())
{
//将用户名保存在session中
out.print("用户合法");
flag=true;
//session.setAttribute("name",rs.getString(1));
}
else
{
//用户不合法,保存错误信息
out.print("用户不合法");
request.setAttribute("err","错误的用户名或密码");
}
rs.close();
ps.close();
con.close();
}
catch(Exception e){
}
%>

-----------------------------------------------------
以上是我用JDBC连接sqlserver 2000的代码,请问一下各位,为什么我的rs.next()返回的总是0???
ps:我的userinfo表中已存在一条记录,以上代码输出结果总是:
0 用户不合法

------解决方案--------------------
最简单的办法是打印出sql,看看到底执行的是什么?有没有被执行?
或者打开sqlserver 2000 的“事件探查器”,看看提交的select到底是什么?
------解决方案--------------------
out.print(rs.getRow()); 这句话输出的几??
然后你确定没有出异常吗?我感觉可能没查到记录。。
------解决方案--------------------
请问下如何打印SQL语句??? 
-----------------------

System.out.pringln(sql);
------解决方案--------------------
差不出来啊?
sql写错了吧。

想验证也简单,别整悬的,写个sql在数据库客户端一跑,看看有记录没,有了的话,再直接写进jsp里,看看效果,最后再去自己拼,

呼呼。
------解决方案--------------------
检查一下
String name=request.getParameter("uname"); 
String password=request.getParameter("password");
这两个有没有值。
------解决方案--------------------
楼上的可能性最高

Java code
// 你打印出来看看吧!
// 如果有,对照数据库看一下是否完全相同
System.out.println("username="+name);
System.out.println("password="+password);
ps.setString(1,name); 
ps.setString(2,password);

------解决方案--------------------
,为什么我写成DataBase依然可以连上数据库??
因为 系统把 DataBase 认为是一个其它的自定义参数处理了

这个连接会使用该用户的默认数据库