当前位置: 代码迷 >> Java Web开发 >> [求助]连接sqlserver就是连不上 高手求教~~
  详细解决方案

[求助]连接sqlserver就是连不上 高手求教~~

热度:163   发布时间:2005-11-19 19:47:00.0
[求助]连接sqlserver就是连不上 高手求教~~

连接sqlserver就是连不上,核对帐号和密码时就是连结不上数据库,这是个更改密码的小程序,怎么回事,大家帮我看看吧 拜托了

<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<html>
<body bgcolor=pink>
<p>修改密码,密码长度不能超过30个字符:
<form action="" method="post">
<br>输入您的帐号:
<br><input type=text name="account">
<br>输入您的密码:
<br><input type=password name="secret">
<br>输入您的新的密码:
<br><input type=text name="newSecret1">
<br>请再输入一次您的密码:
<br><input type=text name="newSecret2">
<br><input type=submit name="g" value="提交">
</form>
<%!
public String getString(String s)
{if(s==null) s="";
try{byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e){}
return s;
}
%>
<%
String account=request.getParameter("account");
account=getString(account);
String secret=request.getParameter("secret");
secret=getString(secret);
String newSecret1=request.getParameter("newSecret1");
newSecret1=getString(newSecret1);
String newSecret2=request.getParameter("newSecret2");
newSecret2=getString(newSecret2);
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){out.print("数据库连接错误");}

Connection con=null;
Statement sql=null;
ResultSet rs=null;
boolean modify=false;
boolean ifEquals=false;
ifEquals=(newSecret1.equals(newSecret2)&&(newSecret1.length()<=30));
if(ifEquals==true){

else{
out.print("你两次输入的密码不一致或长度过大");
}
if(modify==false&&ifEqtry{
con=DriverManager.getConnection("jdbc:odbc:wangzhanrong","sa","");
sql=con.createStatement();
String condition="select * from 成绩录入人员信息表 WHERE 账号="+"'"+account+"'";
rs=sql.executeQuery(condition);
while(rs.next()){
String n=rs.getString("账号");
String s=rs.getString("密码");
if(account.equals(n)&&secret.equals(s)){
modify=true;
out.print("您的密码已经更新");
String c="update 成绩录入人员信息表 set 密码="+"'"+newSecret1+" WHERE 账号="+"'"+account+"'";
rs=sql.executeQuery(c);

}
}
}
catch(SQLException e1){};
}uals==true){
out.print("<br>您没有输入密码帐号或<br>您输入的帐号或密码不正确"+account+":"+secret);
}
%>
</body>
</html>

搜索更多相关主题的帖子: sqlserver  数据库  密码  

----------------解决方案--------------------------------------------------------
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){out.print("数据库连接错误");}

是在这里报错么???

你有jdbc包么.??
加到classpath里了么???
----------------解决方案--------------------------------------------------------

不是在那里报错~~~~~~~~
是红字部分有错误 可是不知道怎么改~~~~~~
怎么改呀~~~~从数据库表里查询就可以




“你有jdbc包么.?? 加到classpath里了么???”
什么意思亚 是说tomcat的环境变量么
设置成这样.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%;
行么
jdbc包是指什么呀~~~~~不懂 再说说~~

[此贴子已经被作者于2005-11-20 13:16:15编辑过]


----------------解决方案--------------------------------------------------------
try
{
con=DriverManager.getConnection("jdbc:odbc:wh","sa","");
sql=con.createStatement();
String condition="SELECT * FORM 成绩录入人员信息表 WHERE 账号="+"'"+account+"' and 密码='"+secret+"'";
rs=sql.executeQuery(condition);
out.print(condition);
if(rs.next())
{
session.setAttribute("account",account);
session.setAttribute("secret",secret);
session.setAttribute("pass","1");

String s1=response.encodeRedirectURL("wangzhanrong_inputMessage.jsp");
String s2=response.encodeRedirectURL("wangzhanrong_inputResult.jsp");
//连接到基本信息输入页面:
response.sendRedirect(s1);

}
else if(account.length()>0)
{
out.print("<BR>您输入的帐号或密码不正确"+account+":"+secret);
}

}
catch(SQLException e1){out.print("数据库查询错误");}
%>

上面的代码,红色的那句运行都输出不了condition
是哪出错了~~~~~连接不上数据源~~~

----------------解决方案--------------------------------------------------------

我做了一下第一个程序,发现好多问题,有几个关键性的错误,像那个<1> String c="update 成绩录入人员信息表 set 密码="+"'"+newSecret1+" WHERE 账号="+"'"+account 这一句,where前少了一个"'"
<2>
rs=sql.executeQuery(c);上面一句是更新,所以不是用sql.executeQuery() 这个方法,而是那个sql.executeUpdate()

<3> 不是while而是if
还有一些不合理的地方



----------------解决方案--------------------------------------------------------

<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<html>
<body bgcolor=pink>
<p>修改密码,密码长度不能超过30个字符:
<form action="" method="post">
<br>输入您的帐号:
<br><input type=text name="account">
<br>输入您的密码:
<br><input type=password name="secret">
<br>输入您的新的密码:
<br><input type=text name="newSecret1">
<br>请再输入一次您的密码:
<br><input type=text name="newSecret2">
<br><input type=submit name="g" value="提交">
</form>
<%!
public String getString(String s)
{if(s==null) s="";
try{byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e){}
return s;
}
%>
<%
String account=request.getParameter("account");
account=getString(account);
String secret=request.getParameter("secret");
secret=getString(secret);
String newSecret1=request.getParameter("newSecret1");
newSecret1=getString(newSecret1);
String newSecret2=request.getParameter("newSecret2");
newSecret2=getString(newSecret2);
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){out.print("数据库连接错误");}

Connection con=null;
Statement sql=null;
ResultSet rs=null;
boolean modify=false;
boolean ifEquals=false;
ifEquals=(newSecret1.equals(newSecret2)&&(newSecret1.length()<=30));
if(ifEquals==true){

try{
con=DriverManager.getConnection("jdbc:odbc:wh","sa","");
sql=con.createStatement();
String condition="select * from 成绩录入人员信息表 WHERE 账号="+"'"+account+"'";
rs=sql.executeQuery(condition);
if(rs.next()){
String n=rs.getString("账号");
String s=rs.getString("密码");
if(account.equals(n)&&secret.equals(s)){
modify=true;
out.print("您的密码已经更新");
String c="update 成绩录入人员信息表 set 密码="+"'"+newSecret1+"'"+" WHERE 账号="+"'"+account+"'";
sql.executeUpdate(c);
}
}
}
catch(SQLException e1){};
}
else{out.print("你两次输入的密码不一致或长度过大");}
if(modify==false&&ifEquals==true){
out.print("<br>您没有输入密码帐号或<br>您输入的帐号或密码不正确"+account+":"+secret);
}
%>
</body>
</html>

这是我修改后的 运行应该没问题了 可是还是老问题就是输入正确的sqlserver数据库表里有的帐号和密码,却提示:您没有输入密码帐号或
您输入的帐号或密码不正确。提交后转不到指定的网页~~~~~~~~~~~

感谢fenfei帮我查错~~~~~~~多谢拉~~~~~~~~~


----------------解决方案--------------------------------------------------------

我运行了你的程序,改了一下你的程序,我是用mysql连接的,可以出来结果,可能没你的好就是,我总觉得你的程序有好多问题??可能是我还不知道你的意思吧.再提几处吧,呵呵......
<1><br>输入您的新的密码:
<br><input type=text name="newSecret1">
<br>请再输入一次您的密码:
<br><input type=text name="newSecret2">
应该是password型最好打一下""
还有一句out.print("<br>您没有输入密码帐号或<br>您输入的帐号或密码不正确"+account+":"+secret);
用来调试程序还好,若不是,哪不就可以看到密码了???


----------------解决方案--------------------------------------------------------
我想说两句,你的程序没有使用框架而直接使用JSP ,用JDBC做连接,程序看似没有问题,但其实在真正项目,你的这种方法并不实用,可以说根本就没法用。。。。可能说的有点直了!!!

例如这段:con=DriverManager.getConnection("jdbc:odbc:wh","sa","");
sql=con.createStatement();
String condition="select * from 成绩录入人员信息表 WHERE 账号="+"'"+account+"'";
rs=sql.executeQuery(condition);
if(rs.next()){
String n=rs.getString("账号");
String s=rs.getString("密码");
if(account.equals(n)&&secret.equals(s)){
modify=true;
out.print("您的密码已经更新");
String c="update 成绩录入人员信息表 set 密码="+"'"+newSecret1+"'"+" WHERE 账号="+"'"+account+"'";
sql.executeUpdate(c);
}

在真正的项目中,你这样写是绝对不行的,因为在我们进行Insert操作时,大部分(项目中)密码都是进行加密的。。。也就是说

PreparedStatement sql= con.prepareStatement(Insert into aa(userID,password) values(?,?)

sql.setString(1,username);

sql.setString(2,PASSWORD(password));

sql.execute();

这是用JDBC插入一条用户信息(在大多数项目中经常用到的)
而你上面的代码如果使用rs=sql.executeQuery(condition);

然后 rs.next()

rs.String s=rs.getString("password");

是根本取不到密码的!!

所以建议你把 验证和修改分开写,先验证,然后再修改,不要嵌套在 rs.next()

里面。 还有在做数据库连接时,con=DriverManager.getConnection("jdbc:odbc:wh","sa","");
sql=con.createStatement();

前面应该加上一句 if (con=null)

意思是说,在没有连接的情况下才进行创建。。。这只是个我的一个建议,因为如果数据流量很大的话,估计连续的创建,你的内存会不够的

。。。。
----------------解决方案--------------------------------------------------------
感谢wyq03的指正

我是jsp初学着,if (con=null)
着中方法在我学的书里是不是就是同步连接呀

我着就是是吧

[此贴子已经被作者于2005-11-20 16:59:49编辑过]


----------------解决方案--------------------------------------------------------
不是的!!!

这是为了预防读数据库时,重复创建而占用内存!!

比方说,你去读数据库时,因为连接的就是一个数据库,你需要重复去读取数据。这样你每读取一次就创建了一个con 再读取又创建了一个。。。。。这样是很占内存的!!!
----------------解决方案--------------------------------------------------------
  相关解决方案