为什么不能用datatables来添加在数据库中查到的数据

尝试在数据库中查询数据并在datatables中异步显示时总是报错。有人帮我看下吗,好像是这个json的格式出问题,我看了firebug,应该是servlet返回的json数据格式问题,但因为新手,就是看不出哪里出了问题,有人帮忙看下吗?

先看下这个字符串拼接有问题吗?

 String datastr="{ \"data\":[";
datastr = datastr + "{\"stuNumber\":\""+stuNumber+"\","
                        + "\"stuName\":\""+stuName+"\","
                        + "\"stuNamed\":\""+stuNamed+"\","
                        + "\"stuSex\":\""+stuSex+"\","
                        + "\"stuNation\":\""+stuNation+"\","
                        + "\"stuBirth\":\""+stuBirth+"\","
                        + "\"stuNative\":\""+stuNative+"\","
                        + "\"stuRegious\":\""+stuRegious+"\","
                        + "\"stuPolitical\":\""+stuPolitical+"\","
                        + "\"stuHealth\":\""+stuHealth+"\","
                        + "\"stuSpecial\":\""+stuSpecial+"\","
                        + "\"stuResidence\":\""+stuResidence+"\","
                        + "\"stuSchoolRoll\":\""+stuSchoolRoll+"\","
                        + "\"regiousSeat\":\""+regiousSeat+"\","
                        + "\"stuID\":\""+stuID+"\","
                        + "\"stuAddress\":\""+stuAddress+"\","
                        + "\"stuMobile\":\""+stuMobile+"\","
                        + "\"stuEmail\":\""+stuEmail+"\","
                        + "\"stuEntranceWay\":\""+stuEntranceWay+"\","
                        + "\"stuAlone\":\""+stuAlone+"\","
                        + "\"stuMartyr\":\""+stuMartyr+"\","
                        + "\"stuSingle\":\""+stuSingle+"\","
                        + "\"stuFarmer\":\""+stuFarmer+"\","
                        + "\"stuEnteranceDate\":\""+stuEnteranceDate+"\","
                        + "\"stuClass\":\""+stuClass+"\"},";
                }
                 datastr=datastr.substring(0,datastr.length()-1);
                datastr=datastr+"]}";

下面是完整的代码:

The JQuery-datatables alert errors all time.
this is the servlet:

    package servlet;

    import bean.Student;
    import dao.StudentDAO;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 
     * 
     */
    public class GetStuInfoServlet extends HttpServlet {
        private String stuNumber;
        private String stuName;
        private String stuNamed;
        private String stuSex;
        private String stuNation;
        private String stuBirth;
        private String stuNative;
        private String stuRegious;
        private String stuPolitical;
        private String stuHealth;
        private String stuSpecial;
        private String stuResidence;
        private String stuSchoolRoll;
        private String regiousSeat;
        private String stuID;
        private String stuAddress;
        private String stuMobile;
        private String stuEmail;
        private String stuEntranceWay;
        private String stuAlone;
        private String stuMartyr;
        private String stuSingle;
        private String stuFarmer;
        private String stuEnteranceDate;
        private String stuClass;
    
        String datastr="{ \"data\":[";//ajax  json
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/json; charset=utf-8");
            String classNumbers = null;
            String stuNumbers = null;
            ResultSet resultSet = null;
            classNumbers = request.getParameter("classNumber");

            StudentDAO studentDAO = new StudentDAO();
            Student student = null;
            PrintWriter out = response.getWriter();
            out.flush();
            try {
                resultSet = studentDAO.getStudentByClassNumber(classNumbers);
            } catch (Exception e) {
                e.printStackTrace();
            }
                resultSet = studentDAO.getStudentByStuNumber(stuNumber);
               resultSet = studentDAO.getStudentByClassNumber(classNumbers);
    
            try {
                while (resultSet != null & resultSet.next()){
                    this.stuNumber = resultSet.getString("stu_number");
                    this.stuName = resultSet.getString("stu_name");
                    this.stuNamed = resultSet.getString("stu_named");
                    this.stuSex = resultSet.getString("stu_sex");
                    this.stuNation = resultSet.getString("stu_nation");
                    this.stuBirth = resultSet.getString("stu_birth");
                    this.stuNative = resultSet.getString("stu_native");
                    this.stuRegious = resultSet.getString("stu_religious");
                    this.stuPolitical = resultSet.getString("stu_political");
                    this.stuHealth = resultSet.getString("stu_health");
                    this.stuSpecial = resultSet.getString("stu_special");
                    this.stuResidence = resultSet.getString("stu_residence");
                    this.stuSchoolRoll = resultSet.getString("stu_school_roll");
                    this.regiousSeat = resultSet.getString("regious_seat");
                    this.stuID = resultSet.getString("stu_id");
                    this.stuAddress = resultSet.getString("stu_adress");
                    this.stuMobile = resultSet.getString("stu_mobile");
                    this.stuEmail = resultSet.getString("stu_email");
                    this.stuEntranceWay = resultSet.getString("stu_entrance_way");
                    this.stuAlone = resultSet.getString("stu_alone");
                    this.stuMartyr = resultSet.getString("stu_martyr");
                    this.stuSingle = resultSet.getString("stu_single");
                    this.stuFarmer = resultSet.getString("stu_farmer");
                    this.stuEnteranceDate = resultSet.getString("stu_enterance_date");
                    this.stuClass = resultSet.getString("stu_class");
    
                    if (stuNumber==null){stuNumber="";}
                    if (stuName==null){stuName="";}
                    if (stuNamed==null){stuNamed="";}
                    if (stuSex==null){stuSex="";}
                    if (stuNation==null){stuNation="";}
                    if (stuBirth==null){stuBirth="";}
                    if (stuNative==null){stuNative="";}
                    if (stuRegious==null){stuRegious="";}
                    if (stuPolitical==null){stuPolitical="";}
                    if (stuHealth==null){stuHealth="";}
                    if (stuSpecial==null){stuSpecial="";}
                    if (stuResidence==null){stuResidence="";}
                    if (stuSchoolRoll==null){stuSchoolRoll="";}
                    if (regiousSeat==null){regiousSeat="";}
                    if (stuID ==null){stuID ="";}
                    if (stuAddress==null){stuAddress="";}
                    if (stuMobile==null){stuMobile="";}
                    if (stuEmail==null){stuEmail="";}
                    if (stuEntranceWay==null){stuEntranceWay="";}
                    if (stuAlone==null){stuAlone="";}
                    if (stuMartyr==null){stuMartyr="";}
                    if (stuSingle==null){stuSingle="";}
                    if (stuFarmer==null){stuFarmer="";}
                    if (stuEnteranceDate==null){stuEnteranceDate="";}
                    if (stuClass==null){stuClass="";}
    
    
                    datastr = datastr + "{\"stuNumber\":\""+stuNumber+"\","
                        + "\"stuName\":\""+stuName+"\","
                        + "\"stuNamed\":\""+stuNamed+"\","
                        + "\"stuSex\":\""+stuSex+"\","
                        + "\"stuNation\":\""+stuNation+"\","
                        + "\"stuBirth\":\""+stuBirth+"\","
                        + "\"stuNative\":\""+stuNative+"\","
                        + "\"stuRegious\":\""+stuRegious+"\","
                        + "\"stuPolitical\":\""+stuPolitical+"\","
                        + "\"stuHealth\":\""+stuHealth+"\","
                        + "\"stuSpecial\":\""+stuSpecial+"\","
                        + "\"stuResidence\":\""+stuResidence+"\","
                        + "\"stuSchoolRoll\":\""+stuSchoolRoll+"\","
                        + "\"regiousSeat\":\""+regiousSeat+"\","
                        + "\"stuID\":\""+stuID+"\","
                        + "\"stuAddress\":\""+stuAddress+"\","
                        + "\"stuMobile\":\""+stuMobile+"\","
                        + "\"stuEmail\":\""+stuEmail+"\","
                        + "\"stuEntranceWay\":\""+stuEntranceWay+"\","
                        + "\"stuAlone\":\""+stuAlone+"\","
                        + "\"stuMartyr\":\""+stuMartyr+"\","
                        + "\"stuSingle\":\""+stuSingle+"\","
                        + "\"stuFarmer\":\""+stuFarmer+"\","
                        + "\"stuEnteranceDate\":\""+stuEnteranceDate+"\","
                        + "\"stuClass\":\""+stuClass+"\"},";
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                datastr=datastr.substring(0,datastr.length()-1);
                datastr=datastr+"]}";
            }
            out.flush();
            out.write(datastr);
            out.close();
    
    
   
        }
    
        public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
            this.doPost(request,response);
        }
    }

And the studentDAO:

        package dao;
    import bean.Student;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    /**
     * Created by Emitor on 16-12-7.
     */
    public class StudentDAO {
        private Connection conn ;
        private Student student = null;
    
        public void initConnection() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysystem","yupei","yupei");
        }
        public void closeConnection() throws Exception {
            conn.close();
        }
    
        public ResultSet getStudentByClassNumber(String classNumber)throws Exception{
            initConnection();
            String sql = "SELECT * FROM stu_info WHERE stu_class = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,classNumber);
            ResultSet resultSet = ps.executeQuery();
            ps.close();
            closeConnection();
            return resultSet;
        }
        public ResultSet getStudentByStuNumber(String stuNumber)throws Exception{
            initConnection();
            String sql = "SELECT * FROM stu_info WHERE stu_number = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,stuNumber);
            ResultSet resultSet = ps.executeQuery();
            ps.close();
            closeConnection();
            return resultSet;
        }
    }

I try to use firebug to find the problem, it seems like not the right Json response. But I am really a new guy in Json. so I feel so confused now. Anyone help me to find the bug, please. Thanks a lot in advance.
This is the jsp:

        <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <!-- test.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="./mysrc/project/reset.css">
        <link rel="stylesheet" type="text/css" href="./mysrc/project/jquery.dataTables.css">
        <title>this is a test</title>
        <script type="text/javascript" src='./mysrc/project/jquery-1.9.1/jquery.js'></script>
        <script type="text/javascript" src="./mysrc/project/jquery.dataTables.js"></script> 
    <div>
        <input id="aButton" type="button" name="button" value="clickToShow" onclick="clickButton()" >
        <table id="myTestTable">
            <caption>this is a test</caption>
            <thead>
            <tr>
                <th>姓名</th>
                <th>户口所在地</th>
                <th>曾用名</th>
                <th>身份证号</th>
                <th>性别</th>
                <th>居住地</th>
                <th>民族</th>
                <th>出生日期</th>
                <th>电话号码</th>
                <th>Email</th>
                <th>籍贯</th>
                <th>入学方式</th>
                <th>宗教信仰</th>
                <th>是否留守儿童</th>
                <th>政治面貌</th>
                <th>是否烈士子女</th>
                <th>是否独生子女</th>
                <th>健康状况</th>
                <th>是否进城务工子女</th>
                <th>特长</th>
                <th>户口性质</th>
                <th>入学年月</th>
                <th>学籍状态</th>
                <th>班级</th>
            </tr>
            </thead>
            <tfoot>
            <tr>
                <th>姓名</th>
                <th>户口所在地</th>
                <th>曾用名</th>
                <th>身份证号</th>
                <th>性别</th>
                <th>居住地</th>
                <th>民族</th>
                <th>出生日期</th>
                <th>电话号码</th>
                <th>Email</th>
                <th>籍贯</th>
                <th>入学方式</th>
                <th>宗教信仰</th>
                <th>是否留守儿童</th>
                <th>政治面貌</th>
                <th>是否烈士子女</th>
                <th>是否独生子女</th>
                <th>健康状况</th>
                <th>是否进城务工子女</th>
                <th>特长</th>
                <th>户口性质</th>
                <th>入学年月</th>
                <th>学籍状态</th>
                <th>班级</th>
            </tr>
            </tfoot>
            <tbody>
    
            </tbody>
    
        </table>
    </div>
    <script type="text/javascript">
        function clickButton(){
            var table=$('#myTestTable').dataTable();
            if(table){
                table.fnDestroy();}
    //        $.fn.dataTable.ext.errMode = 'throw';
           
            $('#myTestTable').dataTable( {
                "processing": true,
                "serverSide": true,
                "bInfo":false,//是否显示是否启用底边信息栏
                "sAjaxSource": "${pageContext.request.contextPath}../src/servlet.GetStuInfoServlet?classNumber=1401",
                'autoWidth': true,
                'pagingType': 'full_numbers',
                "language": {
                    'lengthMenu': '每页显示 _MENU_ 记录',
                    'zeroRecords': '没有数据 - 抱歉',
                    'info': ' 第_PAGE_ 页/共 _PAGES_页',
                    'infoEmpty': '没有符合条件的记录',
                    'search': '查找',
                    'infoFiltered': '(从  _MAX_ 条记录中过滤)',
                    'paginate': { "first":  "首页 ", "last": "末页", "next": "下一页","previous": "上一页"}
    
                },
                "retrieve":true,
                "paging":   true,
                "ordering": true,
                "info":     true,
                "columns": [
                    { "data": "stuNumber" },
                    { "data": "stuName" },
                    { "data": "stuNamed" },
                    { "data": "stuSex" },
                    { "data": "stuNation" },
                    { "data": "stuBirth" },
                    { "data": "stuNative" },
                    { "data": "stuRegious" },
                    { "data": "stuHealth" },
                    { "data": "stuSpecial" },
                    { "data": "stuResidence" },
                    {"data": "stuSchoolRoll"},
                    {"data": "regiousSeat"},
                    {"data": "stuID"},
                    {"data": "stuAddress"},
                    {"data": "stuMobile"},
                    {"data": "stuEmail"},
                    {"data": "stuEntranceWay"},
                    {"data": "stuAlone"},
                    {"data": "stuMartyr"},
                    {"data": "stuSingle"},
                    {"data": "stuFarmer"},
                    {"data": "stuEnteranceDate"},
                    {"data": "stuClass"}
                ]
            } );
        }
    </script>
    </body>
    </html>
阅读 2.9k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进