JS如何从数据库中请求数据? 不要只讲实现的大概过程步骤。AJAX向数据库请求数据,对于专门搞web开发的人来讲很容易,但对我实在不易。我第一次做java web方面的东西,网上没有太多相似的例子。很希望大侠们能出手帮忙。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 另外一个,我上面的数据算是JSON格式吗?好像JSON都是类似 [{ , },{ , },{ , }...] 这种需求一般是用 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] ]} 我就是被怎么生成这种格式的数据困住了。这种格式好像不是标准的JSON格式。 很多在线验证 你可以试试验证。{ "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 ] ]} 我就是被怎么生成这种格式的数据困住了。这种格式好像不是标准的JSON格式。怎么生成就是你在 jsp 里的事情了,你可以用循环,从数据库中把数据读出来,反正最后出来的要是这个内容以上是JSON的格式,但本人没有测试过,可能有点bug,你可以把它存为 data.js,然后在 jquery 的 ajax 请求 url 参数设置为这个 data.js,如果能够被浏览器解析,则是可用的 json 格式 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语法格式,你就明白了。 我已经在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] ]} 这种需求一般是用 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 调用 我在getjson.jsp中的数据量不大,差不多30M左右,但记录数有百万条。你对我这样的数据情况有什么建议吗?页面图形只是在我需要查看数据才需要刷新。 我在getjson.jsp中的数据量不大,差不多30M左右,但记录数有百万条。你对我这样的数据情况有什么建议吗?页面图形只是在我需要查看数据才需要刷新。30M、数百万对浏览器来说是相当大了,你必须要有取舍,否则浏览器可能跑死看你的代码,应该是显示一个柱状图或者曲线图之类的功能。如果是这个需求的话,你在 getjson.jsp 里应该把数据进行采样,比如 100万条记录,浏览器支持1000条记录,那么你应该每1000条记录中取一条,或者取平均值;如果是时间敏感的数据,则可以按时间范围进行取平均值,比如一天的时间里,有100万条记录,则属于00:00~00:30之间的数据取平均值,00:30~01:00之间的数据取平均值…… 将数据从数据库中取出并加工成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());}%> 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);} 一个练习java程序能编译但是运行出错 spring 注入式开发的一些问题 大家好,请教一个程序调试的问题,十分感谢(程序,错误提示如下) 遇到一个很怪的问题!!! JMF的控件如何进行美化? 转发自另一位仁兄的java人民币转大写 怎么把一个文件转换成byte〔〕型 哪种编程模式好? 如何在LINUX下设置类路径?请大家帮忙 怎么down j2sdk1.3的文档,只是可以看,但我不知如何down下来,谢谢!!! 关于Observable的问题,有谁遇到过? switch的用法
这种需求一般是用 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]
]
}
{
"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
]
]
}
怎么生成就是你在 jsp 里的事情了,你可以用循环,从数据库中把数据读出来,反正最后出来的要是这个内容
以上是JSON的格式,但本人没有测试过,可能有点bug,你可以把它存为 data.js,然后在 jquery 的 ajax 请求 url 参数设置为这个 data.js,如果能够被浏览器解析,则是可用的 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语法格式,你就明白了。
这种需求一般是用 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 动态请求数据得到,特别是如果图形是动态并且周期性更新的情况
首先由服务端生成一个 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 调用
我在getjson.jsp中的数据量不大,差不多30M左右,但记录数有百万条。你对我这样的数据情况有什么建议吗?
页面图形只是在我需要查看数据才需要刷新。
我在getjson.jsp中的数据量不大,差不多30M左右,但记录数有百万条。你对我这样的数据情况有什么建议吗?
页面图形只是在我需要查看数据才需要刷新。30M、数百万对浏览器来说是相当大了,你必须要有取舍,否则浏览器可能跑死
看你的代码,应该是显示一个柱状图或者曲线图之类的功能。如果是这个需求的话,你在 getjson.jsp 里应该把数据进行采样,比如 100万条记录,浏览器支持1000条记录,那么你应该每1000条记录中取一条,或者取平均值;如果是时间敏感的数据,则可以按时间范围进行取平均值,比如一天的时间里,有100万条记录,则属于00:00~00:30之间的数据取平均值,00:30~01:00之间的数据取平均值……
<%@ 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());
}
%>
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);
}