标题:[求助]连接sqlserver就是连不上 高手求教~~
只看楼主
dolphin1984
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-11-19
 问题点数:0 回复次数:12 
[求助]连接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 数据库 密码 
2005-11-19 19:47
jeremydomett
Rank: 2
等 级:新手上路
威 望:3
帖 子:312
专家分:0
注 册:2004-6-10
得分:0 
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){out.print("数据库连接错误");}

是在这里报错么???

你有jdbc包么.??
加到classpath里了么???

热爱编程........永不放弃.........
2005-11-20 09:06
dolphin1984
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-11-19
得分:0 

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




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

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


2005-11-20 12:42
dolphin1984
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-11-19
得分:0 
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
是哪出错了~~~~~连接不上数据源~~~

2005-11-20 13:27
fenfei
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2005-11-18
得分:0 

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

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



2005-11-20 15:21
dolphin1984
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-11-19
得分:0 

<%@ 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帮我查错~~~~~~~多谢拉~~~~~~~~~


2005-11-20 15:39
fenfei
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2005-11-18
得分:0 

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


2005-11-20 16:06
wyq03
Rank: 1
等 级:新手上路
威 望:2
帖 子:63
专家分:0
注 册:2005-9-14
得分:0 
我想说两句,你的程序没有使用框架而直接使用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)

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

。。。。

别拿无知当个性!
2005-11-20 16:32
dolphin1984
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2005-11-19
得分:0 
感谢wyq03的指正

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

我着就是是吧

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


2005-11-20 16:56
wyq03
Rank: 1
等 级:新手上路
威 望:2
帖 子:63
专家分:0
注 册:2005-9-14
得分:0 
不是的!!!

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

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

别拿无知当个性!
2005-11-20 17:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-34236-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.818676 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved