程序源代码如下:
<%!
String DBDriver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/test?user=root&password=root";
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs =null;
%>
<%
String id = request.getParameter("id") ;
String password = request.getParameter("password") ;
这两个参数的值已经从前一页面传递过来。测试已通过
%>
<%
String sql = "SELECT name FROM person WHERE id=? and password=?" ;
try
{
Class.forName(DBDriver);
conn=DriverManager.getConnection(url);
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,id) ;
pstmt.setString(2,password) ;
rs = pstmt.executeQuery() ;
System.out.println(rs.getString(1)); //(1)该处不知为什么取不出值,注意该处的值是数据库中确实存在的,可是控制台却什么也不显示,好像是空
%>
(1)处若换为System.out.println(rs.getString(“test”));能够输出值:test
(1) 处若换为System.out.println(rs.next());能够输出:false
<%!
String DBDriver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/test?user=root&password=root";
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs =null;
%>
<%
String id = request.getParameter("id") ;
String password = request.getParameter("password") ;
这两个参数的值已经从前一页面传递过来。测试已通过
%>
<%
String sql = "SELECT name FROM person WHERE id=? and password=?" ;
try
{
Class.forName(DBDriver);
conn=DriverManager.getConnection(url);
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,id) ;
pstmt.setString(2,password) ;
rs = pstmt.executeQuery() ;
System.out.println(rs.getString(1)); //(1)该处不知为什么取不出值,注意该处的值是数据库中确实存在的,可是控制台却什么也不显示,好像是空
%>
(1)处若换为System.out.println(rs.getString(“test”));能够输出值:test
(1) 处若换为System.out.println(rs.next());能够输出:false
System.out.println(rs.getString(1));
}试试,但是你下面说的打印rs.next()是false,是不是就没值啊
数据库中确实的值为:admin 123
可就是取不出来很是想不通
String sql = "SELECT name FROM person WHERE id=? and password=?" ;
你执行这条sql语句,获取的ResultSet只有一列建议使用列名来获取数据
这个肯定行的,如果下一个没有值的话就输出空的,循环和行一下也行...
| 游标的位置开始是指向A前面的,等你next()后游标才移动到A的下面,这样才有值。
......
rs = pstmt.executeQuery() ;
System.out.println(rs.next());(1)
if(rs.next()){
System.out.println(rs.getString(1));}
程序输出结果如下:
admin
123
false
按大家所说,假如不rs.next(),是取不到值的,既然(1)处为false了,怎么还能进入if,进入if后怎么会输出两个字段的值,最后还输出了false.希望哪个高手给讲讲。
我所理解的程序输出结果应该是:
false
admin
不知道哪个地方理解的不对
System.out.println(rs.next());(1)
if(rs.next()){
System.out.println(rs.getString(1));
System.out.println(“test”);
}
我输出的结果仍然是:
admin
123
false
test 也没输出,我重启Tomcat,重新登录界面,还是这个问题,从来没遇到过。我想还是程序的思路不对吧,还是rs.next()有问题
String DBDriver="org.git.mm.mysql.Driver";
String url="jdbc:mysql://localhost:3306/test?user=root&password=root";
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs =null;
%>
<% // 接收参数
String id = request.getParameter("id") ;
String password = request.getParameter("password") ;
%>
<%
String sql = "SELECT * FROM person WHERE id=? and password=?" ;
try
{
Class.forName(DBDriver).newInstance();
conn=DriverManager.getConnection(url);
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,id) ;
pstmt.setString(2,password) ;
rs = pstmt.executeQuery() ;
if(rs.next())
{
System.out.println(rs.getString(1));
session.setAttribute("uname",rs.getString(1)) ;
}
else
{
// 保存错误信息
request.setAttribute("err","错误的用户名及密码!!!") ;
}
rs.close() ;
pstmt.close() ;
conn.close() ;
}
catch(Exception e)
{}
%>
刚刚重新调整了程序,发现错误的根本原因还是rs.next()一直为false,程序更本没有运行到if里,看来还是数据库连接中出了错。可就是不知到错在哪
1.我的程序一直就没执行到if(){}里面至于为什么会输出:admin 123 是因为我在做测试时曾用 system.out.println(name); system.out.println(password);测试,所以控制台输出的是从前一页面接收到的值,而不是数据库中的值,所以在输出数据后仍然会打印false
2.最主要的错误还是这里:
String DBDriver="com.mysql.jdbc.Driver";
String DBDriver="org.git.mm.mysql.Driver";
这是在做最后检查时,怀疑出的问题,果然是这里,我不知道这两个驱动到底有什么区别,总之String DBDriver="org.git.mm.mysql.Driver";就不能进行连接数据库,希望哪位朋友知道两个的区别和使用条件,请继续跟贴,详细说说!