是这样的··我在自定义了一个类·用于连接和向数据库发送SQL语句··然后在JSP页面里调用它··
在JSP页面里,我使用了PreparedStatement来传递多个要添加的字段·但是报错,·Java类的代码如下··package com.cme.cen;
import java.sql.*;/*
 * 该类用于链接数据库并传入SQL语句
 */
public class SQLServer {
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 将驱动器的包名和类名存储到字符串中
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=StuInfo"; // 将数据库StuInfo的路径存储到字符串中
String userName = "sa"; // 默认用户名
String userPwd = "19881212"; // 安装sql server 2005时的密码
public Connection dbConn = null;// 定义打开了的接口对象
Statement stem = null;// 定义语句对象
PreparedStatement pst=null;
public ResultSet send(String sql) {
ResultSet rs = null;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);// 链接到数据库,内传数据源URL和登录姓名以及密码
stem = dbConn.createStatement();// 获得语句对象,以便一下向数据库发送SQL语句
rs = stem.executeQuery(sql); } catch (Exception exception) {
System.out.println(exception.toString());
}
return rs;
}

public PreparedStatement update(String sql) {
boolean flag=false;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);// 链接到数据库,内传数据源URL和登录姓名以及密码
stem = dbConn.createStatement();// 获得语句对象,以便一下向数据库发送SQL语句
stem.executeUpdate(sql);
pst=dbConn.prepareStatement(sql);
flag=true; } catch (Exception exception) {
System.out.println(exception.toString());
}
return pst;
}

}JSP页面的代码如下··注意·我是由用户输入要添加的内容的···
<%@ page contentType="text/html; charset=utf-8" language="java"
import="java.sql.*" errorPage="" import="com.cme.cen.SQLServer"
%>
<%
String s_number = request.getParameter("S_number"); String s_name =
request.getParameter("S_name"); String sex =
request.getParameter("Sex"); String birthday =
request.getParameter("Birthday"); String nation =
request.getParameter("Nation"); String politics =
request.getParameter("Politics"); String department =
request.getParameter("Department"); String address =
request.getParameter("Address"); String postalCode =
request.getParameter("PostalCode"); String phone =
request.getParameter("Phone"); 
String[] sarray={s_number,s_name,sex,birthday,nation,politics,department,address,postalCode,phone};
for(int i=0;i<sarray.length;i++){
if(sarray[i].equals("")){
sarray[i]=null;
}
}

if (s_name.equals("") || s_number.equals("")) {
%>
<Center>
编号与姓名均不能为空!
<br>
<a href="TianJia.jsp">返回</a>
</Center>
<%
} else {
%><style type="text/css">
<!--
.STYLE1 {
font-size: 36pt;
font-family: "Times New Roman", Times, serif;
color: #FFFF00;
}
-->
</style>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>成功添加</title>
</head><center>
<body>
<table height="129" border="0">
<tr>
<td>
<img src="01.jpg"></img>
</td>
</tr>
</table>
<table border="1" width="900">
<tr>
<td align="center">
学生编号
</td>
<td align="center">
姓名
</td>
<td align="center">
性别
</td>
<td align="center">
出生年月日
</td>
<td align="center">
民族
</td>
<td align="center">
政治面貌
</td>
<td align="center">
系部
</td>
<td align="center">
住址
</td>
<td align="center">
邮编
</td>
<td align="center">
联系方式
</td> </tr>
<%

SQLServer slv = new SQLServer();
String sqlTianJia = "insert into T_Student(S_number,S_name,Sex,Birthday,Nation,Politics,Depsrtment,Address,PostalCode,Phone)values(?,?,?,?,?,?,?,?,?,?)";
PreparedStatement pst=slv.update(sqlTianJia);
pst.setString(1, s_number);
pst.setString(2, s_name);
pst.setString(3, sex);
pst.setString(4, birthday);
pst.setString(5, nation);
pst.setString(6, politics);
pst.setString(7, department);
pst.setString(8, address);
pst.setString(9, postalCode);
pst.setString(10, phone);
pst.executeUpdate();
out.println(sqlTianJia);
String sql = "select * from T_Student";
ResultSet rs = slv.send(sql);
while (rs.next()) {
%>
<tr>
<%
for (int i = 1; i <= 10; i++) {
%>
<td align="center">
<%
out.println(rs.getString(i));
%>
</td>
<%
}
%>
</tr>
<%
}
%> </table>
</body>
</center>
<%
}
%>
报错信息如下··com.microsoft.sqlserver.jdbc.SQLServerException: '?' 附近有语法错误。
2010-11-4 1:10:48 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.QueRenTianJia_jsp._jspService(QueRenTianJia_jsp.java:151)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
我都不了解为什么要报这个错··请高人指点··也请高人看看我的代码·错在哪里··谢谢!!不胜感激!

解决方案 »

  1.   

    看你的代码很眼熟。是不是SQL语句构建的时候出错了?建议先把sql的内容显示出来。
      

  2.   

    com.microsoft.sqlserver.jdbc.SQLServerException: '?' 附近有语法错误。
    2010-11-4 1:10:48 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet jsp threw exception
    编译都没通过,看是不是多打了字符
      

  3.   

    java.lang.NullPointerException
        at org.apache.jsp.QueRenTianJia_jsp._jspService(QueRenTianJia_jsp.java:151)
     你把这个传递过去
     PreparedStatement pst=slv.update(sqlTianJia);那下面这个怎么执行
    stem = dbConn.createStatement();// 获得语句对象,以便一下向数据库发送SQL语句
                stem.executeUpdate(sql);
      

  4.   

        public PreparedStatement update(String sql) {
            boolean flag=false;
            try {
                Class.forName(driverName);
                dbConn = DriverManager.getConnection(dbURL, userName, userPwd);// 链接到数据库,内传数据源URL和登录姓名以及密码
                stem = dbConn.createStatement();// 获得语句对象,以便一下向数据库发送SQL语句
                stem.executeUpdate(sql);
                pst=dbConn.prepareStatement(sql);
                flag=true;        } catch (Exception exception) {
                System.out.println(exception.toString());
            }
            return pst;
        }上面代码stem = dbConn.createStatement();和stem.executeUpdate(sql);删除掉,你jsp代码里有
    用到update方法的返回对象PrepareStament.executeUpdate(sql);
      

  5.   

    String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 这里错了
    应该是String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";你写反了
      

  6.   


    String sqlTianJia = "insert into T_Student(S_number,S_name,Sex,Birthday,Nation,Politics,Depsrtment,Address,PostalCode,Phone)values(?,?,?,?,?,?,?,?,?,?)";
    PreparedStatement pst=slv.update(sqlTianJia);   public PreparedStatement update(String sql) {
            boolean flag=false;
            try {
                Class.forName(driverName);
                dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
                stem = dbConn.createStatement();//
                stem.executeUpdate(sql);  //估计是这句出错,stem是Statement 不能执行你的预编译sql语句,所以报了 '?' 附近有语法错误。
                pst=dbConn.prepareStatement(sql);
                flag=true;        } catch (Exception exception) {
                System.out.println(exception.toString());
            }
            return pst;
        }
      

  7.   

    你还没有复制 就进行了 stem.executeUpdate(sql);
    肯定是出错的 你的sql还都是 一堆?
    你怎么就executeUpdate了
      

  8.   

    比如 现在你传进去的是
     insert into xxx value(?,?,?)
    这个语句你执行stem.executeUpdate(sql) 肯定就报错了
      

  9.   

    com.microsoft.sqlserver.jdbc.SQLServerException: '?' 附近有语法错误。应该是sql语句的问题呀
      

  10.   

    建议你把SQL语句打出来看看 或者单步调试一下 
      

  11.   

    java.lang.NullPointerException空指针异常dug调试