对最近遇到的一些BT问题总结
来源:互联网 发布:中国历年gdp数据excel 编辑:程序博客网 时间:2024/05/21 22:55
首先要讲到的是一个非常bt的问题,如下 rs=stmt.executeQuery(sql); 和 stmt.execute(sql); 这两个,一般没有遇到的人都会将,这有什么区别啊,不就是等同的吗?但事实上,却并非如此,比如说,你在以段代码中要执行两次查询,第一次查询是获得记录的总数,好赋值,第二次查询是查询出整个数据库的记录,将其放到一个list中,问题来了,如果你全部用第一种方式,那我告诉你,你也许会很郁闷的说,第二次怎么得不到数据了,原因是ResultSet这玩意有个游标,那东西一个劲的往下走,而且貌似,不是我们想想中的那种覆盖的(我说的是想普通变量那种赋值方式覆盖如, rs=stmt.executeQuery(sql1); rs=stmt.executeQuery(sql2); )事实上,这样,最后的rs不会是你期望的,那么,解决的办法是第二个地方用第二种方法,也就是 stmt.execute(sql); 这样就覆盖了,我查过文档,说stmt.getResultSet();这种方法会把先前的那个rs释放掉,重新给一个新的你,问题就是这么解决的,当然,调试的过程中用到了很多的print语句,最后追踪到了是rs 的问题。 下面将说一说多googlemap的多marker多infowindow的问题这个是我遇到的一个比较陌生的问题,因为前期对javascript接触的比较少,所以以开始遇到了什么全局变量和一些局部变量的误用情况,以及对匿名函数不是很理解而导致的。我最开始的设计思路是这样的,首先建立一个markers数组,一个infowindows数组,和一组contentStrings数组,分别用来保存在map上的哪些marker,infowindow,对象和contentString字符串,初始化函数初始化map后,将用一个循环语句将marker都填充到map上,同理,一个循环来初始化多个infowindow对象,没添加一个就给地图添加一个事件google.maps.event.addListener(marker, 'click', function() { 然后在使用一个函数来不断的更新contentString,然后给infowindow来设置新的congtent,想法很清晰,而且符合面向对想思路,但是运行不出希望看到的结果,终于在一篇文章中发现了,然后,一个map上只能有一个infowindow对象,至于为什么,到底是不是他说的只能有一个对象,我自己也不能理解,但是按照管方提供的那种方式,可以为每个marker设置一个秘密信息,当点击marker的时候会谈出来,确实是的,这个例子大家可以去看看http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/examples/event-closure.html, 你可以发现,在函数里面,他都是使用了局部变量,这里为什么使用局部变量就可以,而我的全局对象按照道理来说,绝对是一个infowindow对象,按照道理也应该是可以的,那么就可以调用其open方法,但是却并非如此,在javascript调试器里面看到的情况提示说调用了没有定义的open方法,那也就是说,你那个全局的infowindow对象系统并不知道是什么,用一个alter语句打印一下,发现确系是undefined,非常的糊涂了,我命名定义的是一个全局数组,而且,在用open方法的代码前已经对infowindows数组中的对象进行了初始化,如下 contentStrings[i]=" "; infowindows[i] = new google.maps.InfoWindow({ content: contentStrings[i] }); 这段代码是是在全局范围内的,绝对是已经定义过了的。结果在调用infowindow。opem之前使用alert()函数打印时,居然也是输出undefined,这他不能让人相信了吧。我就定义了这么一个全局变量,而且,没有局部变量和其同名,居然给我打印undefined。在google上一顿狂搜,结果还是在官方文档上给出了解决办法, attachSecretMessage(marker, i); 可以看出,infowindow是局部对象,这里,你有几个marker,就可以生成一个marker就对应一个infowindow对象,但是问题紧接着就出现了,那怎么去更新那个infowindow对象里面的content呢?现在那个对象都是局部对象,很显然,等函数以运行玩,它就没了,那你还到哪里去找那个对象啊?办法还是给我想出来了,不说太多了,直接贴出我的整个代码,其中,设计到变量的定义的部分在init.js中,我就不给出了 <%@ page language="java" import="java.util.*"%> //alert(infowindows[i]);infowindows[i]对象是定义了的 } 最后,遇到的问题也比较棘手,不过提示,当出现你获取的字符串和你预计的不同时,比如少了一点类容,考虑里面是否有" ,"这样的字符存在,最好用一对 ' ' 将你的字符串引起来。
rs=stmt.getResultSet();
rs=stmt.getResultSet();
infowindow.open(map,marker);
});
}
}
// The five markers show a secret message when clicked
// but that message is not within the marker's instance data
function attachSecretMessage(marker, number){
var message =["This","is","the","secret","message"];
var infowindow =new google.maps.InfoWindow(
{ content: message[number],
size:new google.maps.Size(50,50)
});
google.maps.event.addListener(marker,'click',function(){
infowindow.open(map,marker);
});
}
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps JavaScript API v3 Example: Map Language</title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="</script'>http://maps.google.com/maps/api/js?sensor=false&language=zh"></script>
<script type="text/javascript" src="js/GetText.js"></script>
<script type="text/javascript" src="js/ini.js"></script>
<script type="text/javascript">
function initialize() {
go2();
var myLatlng = new google.maps.LatLng(30.538829653161645,114.35734391212463);
var myOptions = {
zoom: 16,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
for(var i=0;i<markers.length;i++){
markers[i].setMap(map);
//alert(infowindows[i]+"全局的");不用在这里初试话都可以访问到
var infowindow=infowindows[i];
var marker=markers[i];
//alert(infowindow+"全局赋值的");//确实是按照说项输出的全局赋值的
//alert(contentStrings[i]);
attachSecretMessage(markers[i],i);
}
//setTimeout("addinfo()",2000);
function attachSecretMessage(marker, number) {
var message = contentStrings;
var infowindow = new google.maps.InfoWindow(
{ content: message[number]
//size: new google.maps.Size(50,50)
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
addinfo(infowindow,number);
});
}
function addinfo(infowindow,m){
// for(var m=0;m<contentStrings.length;m++){
//alert(temperatures[m]);//输出的是temperatures0,符合所想
contentStrings[m] = "<table width='200' border='1'>"+
"<tr>"+
"<td width='52'><img src='img/temperature.gif'></td>"+
"<td width='132'>"+document.getElementById(temperatures[m]).value+"</td>"+
"</tr>"+
"<tr>"+
"<td><img src='img/illumination.gif'></td>" +
"<td>"+document.getElementById(illuminations[m]).value+"</td>" +
"</tr>"+
"<tr>"+
"<td><img src='img/moisture.gif'></td>"+
"<td>"+document.getElementById(moistures[m]).value+"</td>" +
"</tr>"+
"<tr>"+
"<td><img src='img/time.gif'></td>"+
"<td>"+document.getElementById(times[m]).value+"</td>"+
"</tr>"+
"</table>";
infowindow.setContent(contentStrings[m]);
//}
//判断传感器是否着火的代码
//首先设置一隐藏文本框old狂来保存以前的数据
var newtemper =document.getElementById(temperatures[m]).value;
var oldtemper=document.getElementById(temperolds[m]).value;
if(oldtemper!=""){
if((newtemper-oldtemper)>2){//如果说温度变化每两秒超过了2度,那报警,很可能着火了
//for(var s=1;s<4;s++){
//alert("zhixingle");
setTimeout(function(){markers[m].setIcon(imagewrong);},100);//0.4秒图像变化下
setTimeout(function(){markers[m].setIcon(image);},200);
//markers[m].setIcon(image);
//alert("执行了");
//}
document.getElementById(temperolds[m]).value=newtemper;//提示后赋值为新的值
//markers[m].setIcon(image);//提示后要设置为正常图片
}
else{
document.getElementById(temperolds[m]).value=newtemper;//没问出现问题直接赋值
}
}
else{
//alert("zhixingle赋值");
document.getElementById(temperolds[m]).value=newtemper;
}
setTimeout(function(){addinfo(infowindow,m);},2000);
}
function initemperold(){
var o = document.getElementById("temperold");
for(var n=0;n<markers.length;n++){
var input = document.createElement("input");
input.id=temperolds[n];
input.type="hidden";
input.value="";
o.appendChild(input);
}
}
</script>
<style type="text/css">
<!--
#map_canvas {
height: 500px;
width: 800px;
float:right;
}
#txtHint{
float:right;
}
#shidu{
float:right;
}
-->
</style>
</head>
<body onload="go2(), initialize()">
<div id="map_canvas"></div>
<div id="txtHint" ><b>information will be show here.</b></div>
<div id="temperold"></div>
<script language="javascript"> initemperold();</script>
<div id="shidu">
<input type="button" value="显示湿度" onclick="alert(document.getElementById('temperature0').value)">
</div>
</body>
</html>
没错,就是紧接着,趁那个对象还在,使用一个函数来不停的更新信息
- 对最近遇到的一些BT问题总结
- 最近遇到的一些小问题总结
- 最近遇到的一些问题总结
- 最近遇到的一些问题
- 最近遇到的一些问题
- 总结一下最近面试遇到的一些问题吧
- 最近做项目遇到的一些问题总结
- 总结最近遇到的一些异常处理
- 最近遇到的一些mysql的问题
- 最近遇到的一些问题及发现
- 最近遇到的一些小问题汇总
- 最近跑hadoop遇到的一些问题
- ios中最近遇到的一些问题
- 最近遇到的一些问题以及解决方案
- 25 最近遇到的一些问题汇总
- 最近遇到的一些问题总结(UIScroll和Tips穿透问题)
- 【Java面试最近遇到的问题总结】
- 最近遇到的安卓问题总结
- 每天只问小孩四句话
- LinkedHashSet
- 如何获得他人的信任
- 做web开发的算不算是真正意义上的程序员?
- SQL语句大全
- 对最近遇到的一些BT问题总结
- 业务实现数据导出为TXT文件
- Android Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据
- 在Windows系统上安装与使用Android NDK r5
- Oracle PL/SQL之VARCHAR2 QUALIFIER
- Linux下统计文本代码行数的方法
- 关于Flying
- ubuntu11.04 64位下编译uboot时,使用32位gcc问题修复
- Android Audio System 之二:AudioFlinger