不要只讲实现的大概过程步骤。
AJAX向数据库请求数据,对于专门搞web开发的人来讲很容易,但对我实在不易。我第一次做java web方面的东西,网上没有太多相似的例子。很希望大侠们能出手帮忙。

解决方案 »

  1.   

    另外一个,我上面的数据算是JSON格式吗?好像JSON都是类似 [{ , },{ , },{ , }...]
      

  2.   


    这种需求一般是用 ajax 动态请求数据得到,特别是如果图形是动态并且周期性更新的情况
    首先由服务端生成一个 html 页面给浏览器,然后在这个页面里用 ajax 方式向服务端请求数据,被请求的 url 返回  json 格式的字符串,如果用 jquery 的话,所有的应用会非常简单。jsp 里,一般是$.ajax({
    url:"getjson.jsp",
    method: "POST",
    cache: false,
    data: data,
    dataType: "json",
            success: function(msg){
                // msg 将被解析为一个 json 对象
            }, 
            error: function(a, b, c){
            }
    });
    getjson.jsp 的内容:
    {
        "quantity": [
    [1190678400000,66281],
    [1190764800000,44556],
    [1190851200000,32271],
    [1190937600000,39246],
    [1191196800000,129354],
    [1191283200000,53124],
    [1191369600000,37885],
    [1191456000000,83500],
    [1191542400000,91903],
    [1191801600000,105989]
    ], 
            "per": [
    [1190678400000,0.6763],
    [1190764800000,0.6738],
    [1190851200000,0.6753],
    [1190937600000,0.6759],
    [1191196800000,0.674],
    [1191283200000,0.6744],
    [1191369600000,0.687],
    [1191456000000,0.6983],
    [1191542400000,0.696],
    [1191801600000,0.6945]
    ]
    }
      

  3.   

    我就是被怎么生成这种格式的数据困住了。这种格式好像不是标准的JSON格式。
      

  4.   

    很多在线验证 你可以试试验证。
    {
        "quantity": [
            [
                1190678400000,
                66281
            ],
            [
                1190764800000,
                44556
            ],
            [
                1190851200000,
                32271
            ],
            [
                1190937600000,
                39246
            ],
            [
                1191196800000,
                129354
            ],
            [
                1191283200000,
                53124
            ],
            [
                1191369600000,
                37885
            ],
            [
                1191456000000,
                83500
            ],
            [
                1191542400000,
                91903
            ],
            [
                1191801600000,
                105989
            ]
        ],
        "per": [
            [
                1190678400000,
                0.6763
            ],
            [
                1190764800000,
                0.6738
            ],
            [
                1190851200000,
                0.6753
            ],
            [
                1190937600000,
                0.6759
            ],
            [
                1191196800000,
                0.674
            ],
            [
                1191283200000,
                0.6744
            ],
            [
                1191369600000,
                0.687
            ],
            [
                1191456000000,
                0.6983
            ],
            [
                1191542400000,
                0.696
            ],
            [
                1191801600000,
                0.6945
            ]
        ]
    }
      

  5.   

    我就是被怎么生成这种格式的数据困住了。这种格式好像不是标准的JSON格式。
    怎么生成就是你在 jsp 里的事情了,你可以用循环,从数据库中把数据读出来,反正最后出来的要是这个内容
    以上是JSON的格式,但本人没有测试过,可能有点bug,你可以把它存为 data.js,然后在 jquery 的 ajax 请求 url 参数设置为这个 data.js,如果能够被浏览器解析,则是可用的 json 格式
      

  6.   

    js脚本是浏览器的前端的脚本,直接用JS编写SQL语句进行数据库操作,我们通常都不会这么干。一般采用的方法,和楼上的一致 , 就是使用Ajax技术,向服务端请求一个查询的结果,一般结果以JSON串的形式返回到浏览器端,便于JS进行处理。还有,#6楼的写法,将两个对象组合成一个大的Json对象,进行传输也是可行了。另外,楼主的 [
    [1190678400000,0.6763],
    [1190764800000,0.6738],
    [1190851200000,0.6753],
    [1190937600000,0.6759],
    [1191196800000,0.674],
    [1191283200000,0.6744],
    [1191369600000,0.687],
    [1191456000000,0.6983],
    [1191542400000,0.696],
    [1191801600000,0.6945]
             ]这段代码,也是一个正确的JSON串。
    普通JSON串用{}包括起来,但是,数组元素就要用[]包括起来。
    查查JSON语法格式,你就明白了。
      

  7.   

    我已经在getjson.jsp中加工好了json格式,在页面中具体怎么用ajax调用?
    这种需求一般是用 ajax 动态请求数据得到,特别是如果图形是动态并且周期性更新的情况
    首先由服务端生成一个 html 页面给浏览器,然后在这个页面里用 ajax 方式向服务端请求数据,被请求的 url 返回  json 格式的字符串,如果用 jquery 的话,所有的应用会非常简单。jsp 里,一般是$.ajax({
    url:"getjson.jsp",
    method: "POST",
    cache: false,
    data: data,
    dataType: "json",
            success: function(msg){
                // msg 将被解析为一个 json 对象
            }, 
            error: function(a, b, c){
            }
    });
    getjson.jsp 的内容:
    {
        "quantity": [
    [1190678400000,66281],
    [1190764800000,44556],
    [1190851200000,32271],
    [1190937600000,39246],
    [1191196800000,129354],
    [1191283200000,53124],
    [1191369600000,37885],
    [1191456000000,83500],
    [1191542400000,91903],
    [1191801600000,105989]
    ], 
            "per": [
    [1190678400000,0.6763],
    [1190764800000,0.6738],
    [1190851200000,0.6753],
    [1190937600000,0.6759],
    [1191196800000,0.674],
    [1191283200000,0.6744],
    [1191369600000,0.687],
    [1191456000000,0.6983],
    [1191542400000,0.696],
    [1191801600000,0.6945]
    ]
    }
      

  8.   


    这种需求一般是用 ajax 动态请求数据得到,特别是如果图形是动态并且周期性更新的情况
    首先由服务端生成一个 html 页面给浏览器,然后在这个页面里用 ajax 方式向服务端请求数据,被请求的 url 返回  json 格式的字符串,如果用 jquery 的话,所有的应用会非常简单。jsp 里,一般是$.ajax({
    url:"getjson.jsp",
    method: "POST",
    cache: false,
    data: data,
    dataType: "json",
            success: function(msg){
                // msg 将被解析为一个 json 对象
            }, 
            error: function(a, b, c){
            }
    });
    getjson.jsp 的内容:
    {
        "quantity": [
    [1190678400000,66281],
    [1190764800000,44556],
    [1190851200000,32271],
    [1190937600000,39246],
    [1191196800000,129354],
    [1191283200000,53124],
    [1191369600000,37885],
    [1191456000000,83500],
    [1191542400000,91903],
    [1191801600000,105989]
    ], 
            "per": [
    [1190678400000,0.6763],
    [1190764800000,0.6738],
    [1190851200000,0.6753],
    [1190937600000,0.6759],
    [1191196800000,0.674],
    [1191283200000,0.6744],
    [1191369600000,0.687],
    [1191456000000,0.6983],
    [1191542400000,0.696],
    [1191801600000,0.6945]
    ]
    }页面里调用就是这样的啊:
    $.ajax({
    url:"getjson.jsp",
    method: "POST",
    cache: false,
    data: data, // 参数,比如 最大年龄,最小年龄:minAge=10&maxAge=50,这些参数会提交到 getjson.jsp 里,由 request.getParameter("minAge")、request.getParameter("maxAge")得到
    dataType: "json",
            success: function(msg){
                // msg 将被解析为一个 json 对象
            }, 
            error: function(a, b, c){
            }
    });这里用的是 jquery 的 ajax 调用
      

  9.   


    我在getjson.jsp中的数据量不大,差不多30M左右,但记录数有百万条。你对我这样的数据情况有什么建议吗?
    页面图形只是在我需要查看数据才需要刷新。
      

  10.   


    我在getjson.jsp中的数据量不大,差不多30M左右,但记录数有百万条。你对我这样的数据情况有什么建议吗?
    页面图形只是在我需要查看数据才需要刷新。30M、数百万对浏览器来说是相当大了,你必须要有取舍,否则浏览器可能跑死
    看你的代码,应该是显示一个柱状图或者曲线图之类的功能。如果是这个需求的话,你在 getjson.jsp 里应该把数据进行采样,比如 100万条记录,浏览器支持1000条记录,那么你应该每1000条记录中取一条,或者取平均值;如果是时间敏感的数据,则可以按时间范围进行取平均值,比如一天的时间里,有100万条记录,则属于00:00~00:30之间的数据取平均值,00:30~01:00之间的数据取平均值……
      

  11.   

    将数据从数据库中取出并加工成json格式的JSP代码:
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page import="com.microsoft.sqlserver.jdbc.*"%>
    <%@ page import="java.sql.*" %>
    <%@ page import="java.util.List" %> 
    <%@ page import="java.util.ArrayList" %>  
    <%@ page import="java.util.Map" %> 
    <%@ page import="java.util.HashMap" %> 
    <%@ page import="net.sf.json.*" %> 
    <%String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();  
    ResultSet rs=null;  
    String oraUrl="jdbc:sqlserver://localhost:1433;DatabaseName=AA"; // 替换掉读取数据所在的数据库名
    String oraUser="sa";  //用户名
    String oraPWD="******"; //数据库密码  
    try  
    {
        DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());  
    }catch (SQLException e)  
    {
        out.print("数据库连接驱动出错!");  
    }
    try  
    {
        Connection conn=DriverManager.getConnection(oraUrl,oraUser,oraPWD);
        Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        rs=stmt.executeQuery("select DT,quantity,per from T1");
        
        StringBuilder sb=new StringBuilder();
        StringBuilder sb2=new StringBuilder();
        
        sb.append("{"+"\"root\":"+"["+"{"+"\"quantity\""+":"+"[");
        sb2.append("\"per\""+":"+"[");
        
        while(rs.next())
        {
         sb.append("["+rs.getLong("DT")+","+rs.getInt("quantity")+"]"+",");
         sb2.append("["+rs.getLong("DT")+","+rs.getFloat("per")+"]"+",");
        }
        sb.delete(sb.length()-1, sb.length());//去除最后一个逗号
        sb.append("]"+",");
        
        sb2.delete(sb2.length()-1, sb2.length());//去除最后一个逗号
        sb2.append("]}"+"]}"); 
        
        out.print(sb);
        out.print(sb2);     rs.close();  
        stmt.close();  
        conn.close(); } catch (SQLException e)
    {
        e.printStackTrace();
        out.print(e.toString());
    }
    %>
      

  12.   


    1、当进行字符串拼接时,如果元素之间有分隔符,一般用前缀比拼完之后再移除要方便得多,至少不用判断元素数量是否为0:
    StringBuilder sb = new StringBuilder();
    sb.append("{");
    String pre = "";
    while(rs.next()){
      sb.append(pre); 
      sb.append("["+rs.getLong("DT")+","+rs.getInt("quantity")+"]");
      pre = ", ";
    }
    sb.append("}");2、对 statement, resultset, connection 的关闭,最好放到 finally 里,否则当前面的循环出现异常时,关闭语句将不会被执行:
    public static void safeClose(AutoClosable o){
        if(o == null) return;
        try{
            o.close();
        }catch(Throwable e){}
    }
    ......
    Connection conn = null;
    Statement cmd = null;
    ResultSet rs = nul;
    try{
    }catch(Exception ex){
    ......
    }finally{
      safeClose(rs);
      safeClose(cmd);
      safeClose(conn);
    }