[SQL Server]在关键字 'null' 附近有语法错误!?

lyo 2002-12-08 01:33:52
向SQL  Server 中插入数据时:javax.servlet.ServletException: [Microsoft][ODBC SQL Server Driver][SQL Server]在关键字 'null' 附近有语法错误!?
用户确认信息后,点击提交,转入“insert.jsp”,这是出现此错误,数据库用测试了没问题.(sqlserver: create table lyo(name varchar(200),age , sex varchar(200),school varchar(200),work varchar(200)) )
////////////////////////insert.jsp////////////////////////////////////
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<jsp:useBean id="gbookdb" class="gbook.gbookdb" scope="page" />
<html>
<head>
<title>insert.jsp</title>
<meta http-equiv=refresh content="2; url=main.jsp">
</head>

<body background="maps/bg_le_t.gif">
<table width="42%" height="175" border="0" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#00CC66">
<td colspan="3"> </td>
</tr>
<tr>
<td width="12%" bgcolor="#FF9933"> </td>
<td width="75%" rowspan="2" align="center"><font color="#0066CC">谢谢你的注册,5秒钟后会自动返回(如果不愿等待,请点击</font><a href="main.jsp">Back</a>.</td>
<td width="13%" bgcolor="#FF9900"> </td>
</tr>
<tr>
<td bgcolor="#FF9933"> </td>
<td bgcolor="#FF9900"> </td>
</tr>
<tr bgcolor="#00CC66">
<td colspan="3"> </td>
</tr>
</table>
<%
ResultSet rs;
Statement stm;
Connection conn;
String name=request.getParameter("name");
String age=request.getParameter("age");
String sex=request.getParameter("sex");
String school=request.getParameter("school");
String work=request.getParameter("work");

String sql="insert into lyo VALUES('";
sql+=name;
sql+="','";
sql+=age;
sql+="','";
sql+=sex;
sql+="')";
sql+=school;
sql+="','";
sql+=work;
sql+="')";
gbookdb.executeQuery(sql);

%>
</body>
</html>
/////////////////////gbookdb.java///这是我的javabean(可能是他的问题/////////
package gbook;
import java.sql.*;

public class gbookdb{
public ResultSet rs;
public Statement stm;
public Connection conn;
String sql="select * from lyo";
public gbookdb()throws SQLException,Exception{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){

System.out.println(e.getMessage());
}
}
public ResultSet executeQuery(String sql)throws SQLException{
conn=DriverManager.getConnection("jdbc:odbc:gbook");
stm=conn.createStatement();
rs=stm.executeQuery(sql);
return rs;
}
public void executeUpdate()throws SQLException{

}

}
是哪里错了呢?多谢指点!


...全文
1166 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
honda418 2002-12-18
  • 打赏
  • 举报
回复
数据库设置了字段不能为空,但是你又没有插进数据,所以...........
rautinee 2002-12-18
  • 打赏
  • 举报
回复
把程序生成的sql语句方在查询分析器里面看看
deargaogao 2002-12-18
  • 打赏
  • 举报
回复
把语句从页面上打印出来
然后放到SQLPLUS里面单独执行看看有什么错误
zhu_liping 2002-12-18
  • 打赏
  • 举报
回复
仔细检查你的SQL语句呀,
首先看,有没有把空值写入数据库,而你的表对列设置为不为空
其次就是,对于从数据库中取出的空值,是不允许进行操作的,如编码转换等等
kabob 2002-12-18
  • 打赏
  • 举报
回复
使用JDBC-ODBC桥时,我也遇过此类问题
用JDBC for SQL Server驱动就OK
lyo 2002-12-16
  • 打赏
  • 举报
回复
up.
lyo 2002-12-15
  • 打赏
  • 举报
回复
多谢回复! to 心宇:我用的是javabean,ResultSet rs;//
Statement stm;//
Connection conn都可以不要,因为只要注释掉gbookdb.executeUpdate(sql);Jbuilder就说No ResultSet produced.所以我以为是必须在<%%>中写程序,后来我认为没必要,jsp能运行说明他找到了javabean,ResultSet rs;//
Statement stm;//
Connection conn rs.close();忘记删掉了。
<jsp:useBean class="gbook.gbookdb" id=gbookdb scope=page />

to 孟子E章:我在sql server中设置的全可以是null.
lyo 2002-12-15
  • 打赏
  • 举报
回复
是啊,就是单独用tomcat4.01和jbuilder7的结果不一样,现在已jbuilder为标准!如把gbookdb.executeUpdate(sql);注释掉可以运行,但插入数据库中的全是null!? 如果不注释掉,运行出错,说:
javax.servlet.ServletException: No ResultSet was produced
多谢!
////////////////gbookdb.java////////////////////////////
package gbook;
import java.sql.*;

public class gbookdb{
public ResultSet rs;
public Statement stm;
public Connection conn;
String sql="select * from lyo";
public gbookdb()throws SQLException,Exception{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){

System.out.println(e.getMessage());
}
}
public ResultSet executeQuery(String sql)throws SQLException{
conn=DriverManager.getConnection("jdbc:odbc:gbook");
stm=conn.createStatement();
rs=stm.executeQuery(sql);
return rs;
}
public void executeUpdate()throws SQLException{

}

}
freefalcon 2002-12-15
  • 打赏
  • 举报
回复
我都被弄糊涂了
你前面说:
//如把gbookdb.executeUpdate(sql);注释掉可以运行,但插入数据库中的全是null!? 如果不注释掉,运行出错,说:
javax.servlet.ServletException: No ResultSet was produced
现在又是
//因为只要注释掉gbookdb.executeUpdate(sql);Jbuilder就说No ResultSet produced

对数据库执行update是不需要ResultSet的呀
最好贴出完整代码,包括gbookdb.java
freefalcon 2002-12-14
  • 打赏
  • 举报
回复
怎么rs.getInt("name")和rs.getString("age"),类型写反了吧
eBeerlu 2002-12-14
  • 打赏
  • 举报
回复
同意楼上的
孟子E章 2002-12-14
  • 打赏
  • 举报
回复
应该是有些字段设置为必须不为null,而你sql了没有进行赋值
freefalcon 2002-12-14
  • 打赏
  • 举报
回复
<%
ResultSet rs;//
Statement stm;//
Connection conn;//这三个变量下面有使用吗?
String name=request.getParameter("name");
String title=request.getParameter("title");
String comment=request.getParameter("comment");

String sql="insert into comment VALUES('";
sql+=name;
sql+="',";
sql+=title;
sql+=",'";
sql+=comment;
sql+="')";
gbookdb.executeUpdate(sql);//gbookdb在哪儿定义的

rs.close();//这句话有何用?
%>
lyo 2002-12-14
  • 打赏
  • 举报
回复

无法向数据库中插入数据,
//////////////////insertcomment.jsp///////////////////////
<%
ResultSet rs;
Statement stm;
Connection conn;
String name=request.getParameter("name");
String title=request.getParameter("title");
String comment=request.getParameter("comment");

String sql="insert into comment VALUES('";
sql+=name;
sql+="',";
sql+=title;
sql+=",'";
sql+=comment;
sql+="')";
gbookdb.executeUpdate(sql);

rs.close();
%>
如把gbookdb.executeUpdate(sql);注释掉可以运行,但插入数据库中的全是null!? 如果不注释掉,运行出错,说:
javax.servlet.ServletException: No ResultSet was produced
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:463)
.............
..........
...........


lyo 2002-12-14
  • 打赏
  • 举报
回复
多谢上面几位指点。 to 心宇:我把gbookdb.executeQuery(sql);注释掉后能通过insert.jsp了,但返回main.jsp(察看所有留言)时,出现如下错误:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6031)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6188)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3171)
................
...........
...................
数据库中没有插入数据,我想可能是main.jsp(显示所有留言)也有问题!
////////////////////main.jsp/////////////////////////////////
<%
String sql="select * from lyo";
ResultSet rs;
rs=gbookdb.executeQuery(sql);
while(rs.next()){
out.print("<tr><td width=500 bgcolor=#eeeeee><a href=view.jsp?id=");
out.print("target=bottom>");
out.print(rs.getInt("name"));
out.print("</a></td><td width=130 bgcolor=#eeeeee><div align=center>");
out.print(rs.getString("age"));
out.print("</a></td><td width=130 bgcolor=#eeeeee><div align=center>");
out.print(rs.getString("sex"));
out.print("</div></td><td width=130 bgcolor=#eeeeee><div align=center>");
out.print(rs.getString("school"));
out.print("</div></td><td width=130 bgcolor=#eeeeee><div align=center>");
out.print(rs.getString("work"));
out.print("</div></td><td width=130 bgcolor=#eeeeee><div align=center>");
out.print("</div></td></tr>");

}
rs.close();
%>
多谢!
www203 2002-12-08
  • 打赏
  • 举报
回复
是否是你哪个字段在数据库里面设置非空

但是你在sql语句里面得到的是null
结果………………
freefalcon 2002-12-08
  • 打赏
  • 举报
回复
age应该是数值型吧,插入时不要加单引号
String sql="insert into lyo VALUES('";
sql+=name;
sql+="',";
sql+=age;
sql+=",'";
sql+=sex;
sql+="')";
sql+=school;
sql+="','";
sql+=work;
sql+="')";
另外,先把这句gbookdb.executeQuery(sql);注释掉,看有没有错误,这样就知道错误到底发生在哪里了
调试是一门很重要的技术
孟子E章 2002-12-08
  • 打赏
  • 举报
回复
看变量有没有有值,看sql语句是否对
println(sql)
lyo 2002-12-08
  • 打赏
  • 举报
回复
up.

81,120

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧