遇到过这样的问题吗?50分求救,

时间:2021-03-29 21:22:05
用户登陆,我用sql server2000做数据库源,(名称为:denglu)
放在datasource/表,表名为:user,表中字段为:name password upnum
有关的代码为:
denglu.jsp

int n;
String temp1=new String();
String temp2=new String();
temp1=request.getParameter("txtname");
temp2=request.getParameter("txtpassword");
n=temp1.length()*temp2.length();
if (n==0){
%>
<p>您的输入有误,请重新输入!</p>
<p><a href="login.jsp">返回</a></p>
<%
}
else {
String tempuser=new String();
String tempid=new String();
int tempupnum;
String url=new String();
url="jdbc:odbc:denglu";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM user WHERE name='"+temp1+"'and password='"+temp2+"'");
if (rs.next()){
tempuser=rs.getString("name");
tempid=rs.getString("password");
tempupnum=rs.getInt("upnum")+1;
rs.close();
%>
<%
int i=stmt.executeUpdate("UPDATE user SET upnum="+ Integer.toString(tempupnum)+"WHERE name='"+temp1+"'");
    session.putValue("name",tempuser);
%>
<p><b>用户<%=tempuser%>(<%=tempid%>),您好!</b></p>
<p><b>您上站已经<%=tempupnum%>次。</b></p>
<p><b>本窗口提供客户交易分析服务</b></p>
<p><a href="index1.jsp">查询明细</a></p>
<p><a href="index2.jsp">分析交易</a></p>
<%
}
else{
%>
<p>这个用户不存在,请重新登陆。</p>
<p><a href="login.jsp">返回</a></p>
<%
}
stmt.close();
con.close();


当不输入时,显示是正确的,但输入后,出现如下错误信息:
org.apache.jasper.JasperException: [Microsoft][ODBC SQL Server Driver][SQL Server]在关键字 'user' 附近有语法错误。

7 个解决方案

#1


("SELECT * FROM user WHERE name='"+temp1+"'and password='"+temp2+"'");
把这个SQL语句打出来,看看在SQL2000里能执行吗?
就知道那错了,
应该是语法错误

#2


ResultSet rs=stmt.executeQuery("SELECT * FROM user WHERE name='"+temp1+"' and password='"+temp2+"'");
注意and前面有个空格
你自己可以把sql语句打印出来看看

#3


除了上述原因以外,因为你用的是JDBC_ODBC连接方式,所以要设定ODBC数据源,更要注意的是在数据源中指定默认的数据库(!!!)。
在实际开发中最好采用直连的方式
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; 
下载SQLServer直连的驱动程序。

#4


to :QJava(仅次于郎) 
请问能说具体点吗?

#5


to :windyloft(侠客行)
在SQL SERVER中进行语法检查时出现:
[Microsoft][ODBC SQL Server Driver][SQL Server]不能比较成排序text ntext 和image数据类型,除非使用IS NULL或LIKE运算符。

#6


to ;windyloft:

请问怎么回事情,代码如下:
SELECT * FROM [user] WHERE name='xxx' and password='xxx'
我的password的输入框是密码形式,但在数据库中是“text”形式,有没有问题?

#7


建立系统数据源拷贝串

#1


("SELECT * FROM user WHERE name='"+temp1+"'and password='"+temp2+"'");
把这个SQL语句打出来,看看在SQL2000里能执行吗?
就知道那错了,
应该是语法错误

#2


ResultSet rs=stmt.executeQuery("SELECT * FROM user WHERE name='"+temp1+"' and password='"+temp2+"'");
注意and前面有个空格
你自己可以把sql语句打印出来看看

#3


除了上述原因以外,因为你用的是JDBC_ODBC连接方式,所以要设定ODBC数据源,更要注意的是在数据源中指定默认的数据库(!!!)。
在实际开发中最好采用直连的方式
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; 
下载SQLServer直连的驱动程序。

#4


to :QJava(仅次于郎) 
请问能说具体点吗?

#5


to :windyloft(侠客行)
在SQL SERVER中进行语法检查时出现:
[Microsoft][ODBC SQL Server Driver][SQL Server]不能比较成排序text ntext 和image数据类型,除非使用IS NULL或LIKE运算符。

#6


to ;windyloft:

请问怎么回事情,代码如下:
SELECT * FROM [user] WHERE name='xxx' and password='xxx'
我的password的输入框是密码形式,但在数据库中是“text”形式,有没有问题?

#7


建立系统数据源拷贝串