我怀疑tomcat在处理数据库操作方面有个很大的bug.
在javabean中,对数据库的操作一般做成四种形式:1,选取查询 2,更改 3,删除 4,添加
写程序的过程中出现个意外的情况:我对数据库中一表中某一字段进行选取查询操作之后(并没有对
该字段做什么限制),后面的添加插入数据库的操作就出现问题了。很奇怪的是,它只是禁止String
类型的插入数据库,对于数字类型的就和原来一样。在没有这一操作前,是可以对数据库进行String插入操作的,删掉选取查询操作后一切又都正常。这两个操作之间没有任何影响的地方,语法没有任何毛病.
选取操作用import导入后,用原来javabean中的class名建立了一个新的class,并用它进行选取操作。插入操作用调用javabean,用usebean后,用bean的名称调用,此过程是没有问题的。之所以这样,是怕它们之间有影响。(以上过程都没有问题的,但是相互存在就产生问题)
具体代码如下:
调用的javabean中使用的方法,没有写全,但大家都看得懂,这个是没有问题的.
public void executeUpdate(String sql) {
try {
conn = DriverManager.getConnection(url, userName, userPasswd);
stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
} catch (SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
}
jsp页面中的代码中核心部分:
String tableName="equipment";
//***********
//当以前的表中有相同的equid时,不执行插入操作,转到报错页面
String sqlcontroll="SELECT * FROM "+tableName+" where "+equid1+" in (select equid from "+tableName+")";
ResultSet rs = sqlbean.executeQuery(sqlcontroll);
while(rs.next())
{
response.sendRedirect("ins_equ_ipf.jsp");
}
rs.close();
sqlbean.closeStmt();
sqlbean.closeConn();
//****************
String sql="INSERT INTO "+tableName+" (equid,equtype,equman,atype,equip,portamo,accounts,epassword) values ('"+equid1+"','"+equtype1+"','"+equman1+"','"+atype1+"',"+equip2+","+portamo2+",'"+accounts1+"','"+epassword1+"')";
sqlbean.executeInsert(sql);
response.sendRedirect("ins_equ_suc.jsp");
//获得数据结果集合
//获得数据结果集合
}
两个//**************中间的代码对下面的代码有很大的影响,限制了equid不能用string类型.但理论上两者根本
没有那样的关系的.
具体代码:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="god.IP"%>
<%@ page import="java.sql.*" %>
<%@ page session="true" %>
<%@ page import="god.Sql_data"%>
<jsp:useBean id="sqlbean" scope="page" class="god.Sql_data"/>
<jsp:useBean id="ipint" scope="page" class="god.IP"/>
<%
String accounts=(String)session.getAttribute("username");
if(accounts==null||accounts.equals(""))
{
out.print("您还没登陆,请先登陆!");
}
%>
<%
String accounts1=(String)session.getAttribute("username");
if(request.getParameter("equid")!=null&&!request.getParameter("equid").equals("")){
//驱动程序名
String equid1=request.getParameter("equid");
String equtype1=request.getParameter("equtype");
String equman1=request.getParameter("equman");
String atype1=request.getParameter("atype");
String equip1=request.getParameter("equip");
String portamo1=request.getParameter("portamo");
String epassword1=request.getParameter("epassword");
session.setAttribute("equid",equid1);
session.setAttribute("equtype",equtype1);
session.setAttribute("equman",equman1);
session.setAttribute("atype",atype1);
session.setAttribute("equip",equip1);
session.setAttribute("portamo",portamo1);
session.setAttribute("accounts",accounts1);
session.setAttribute("epassword",epassword1);
long equip2;
int portamo2;
if(equip1!=null&&!equip1.equals("")){
equip2=ipint.ipToLong(equip1);
}else{
equip2=0;
}
if(portamo1!=null&&!portamo1.equals("")){
portamo2=Integer.parseInt(portamo1);
}else{
portamo2=0;
}
//表名
String tableName="equipment";
//当以前的表中有相同的equid时,不执行插入操作,转到报错页面
String sqlcontroll="SELECT * FROM "+tableName+" where "+equid1+" in (select equid from "+tableName+")";
ResultSet rs = sqlbean.executeQuery(sqlcontroll);
while(rs.next())
{
response.sendRedirect("ins_equ_ipf.jsp");
}
rs.close();
sqlbean.closeStmt();
sqlbean.closeConn();
String sql="INSERT INTO "+tableName+" (equid,equtype,equman,atype,equip,portamo,accounts,epassword) values ('"+equid1+"','"+equtype1+"','"+equman1+"','"+atype1+"',"+equip2+","+portamo2+",'"+accounts1+"','"+epassword1+"')";
sqlbean.executeInsert(sql);
response.sendRedirect("ins_equ_suc.jsp");
//获得数据结果集合
//获得数据结果集合
}
%>
<html>
<head>
<title>欢迎进入scams认证计费系统</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_callJS(jsStr) { //v2.0
return eval(jsStr)
}
//-->
</script>
</head>
<body>
<div align="center"><font size="+1" color=#2b43a7>欢迎进入scams认证计费系统,请填写您要插入的信息</font><br>
</div>
<hr width="100%" noshade="true">
<script language="javascript">
<!--
function DoHide()
{
if(document.form1.atype.value==1)
{
document.getElementById("shebei").style.display='block';
document.getElementById("mima").style.display='none';
}
else
{
if(document.form1.atype.value==2)
{
document.getElementById("mima").style.display='block';
document.getElementById("shebei").style.display='none';
}
else{
if(document.form1.atype.value==0)
{
document.getElementById("shebei").style.display='none';
document.getElementById("mima").style.display='none';
}
}
}
}
-->
</script>
<script language="javascript">
<!--
function check_ip(ipaddress) {
if ((ipaddress == "")
|| (address.indexOf ('.') == -1))
{return false;}
return true;
}
function check_empty(text) {
return (text.length > 0);
}
function checkform(){
if(document.form1.portamo.value==""){
alert("端口数为空!");
return false;
}
if(document.form1.equid.value==""){
alert("设备ID为空!");
return false;
}
if (document.form1.atype.value==1)
{
if (!check_ip(document.form1.equip.value))
{
alert("ip地址需要认证,请输入正确格式");
return false;
}
}
else if (document.form1.atype.value==2){
if (!check_empty(document.form1.epassword.value))
{ alert("密码需要认证,请输入");
return false;
}
}
}
-->
</script>
<form name="form1" method="post" action="ins_equ.jsp">
<table width="65%" border="0" cellspacing="1" align="center">
<TR bgColor="#c9d4ea">
<TD align=middle colSpan=2 height=18><div align="center"><font color="#2b43a7">添加设备</font></div></TD>
</TR>
<tr >
<td width="147" align="right"><div align="left"><FONT color=#2b43a7>设备ID:</font><br>
</div></td>
<td width="346" valign="top"> <input name="equid" type="text" size="32" maxlength="64">
</td>
</tr>
<tr >
<td width="147" align="right"><div align="left"><FONT color=#2b43a7>端口数:</font><br>
</div></td>
<td width="346" valign="top"> <input type="text" name="portamo" size="32" maxlength="64">
</td>
</tr>
<tr>
<td width="147" align="right"><div align="left"><FONT color=#2b43a7>设备类型</font>:<br>
</div></td>
<td width="346" valign="top"> <select name="equtype">
<option value="0" selected>--GW--</option>
<option value="1">--terminal--</option>
<option value="2">--MCU--</option>
</select> </td>
</tr>
<tr>
<td width="147" align="right"><div align="left"><FONT color=#2b43a7>设备厂商</font>:<br>
</div></td>
<td width="346" valign="top"> <select name="equman">
<option value="0" selected>--先创数字--</option>
<option value="1">--其他--</option>
</select> </td>
</tr>
<tr id="renzheng">
<td width="147" align="right"><div align="left"><FONT color=#2b43a7>认证方式:</font><br>
</div></td>
<td width="346" valign="top"> <select name="atype" οnchange="javascript:DoHide();">
<option value="0" selected>--不认证--</option>
<option value="1">--IP地址认证--</option>
<option value="2">--密码认证--</option>
</select> </td>
</tr>
<tr style="display:none" id="mima">
<td width="147" align="right" ><div align="left"><FONT color=#2b43a7>密码:</font><br>
</div></td>
<td width="346" valign="top"><input class=2
onKeyDown=onevent() style="IME-MODE: disabled"
type=password size="32" maxlength="64" name=epassword></td>
</tr>
<tr style="display:none" id="shebei">
<td width="147" align="right"><div align="left"><FONT color=#2b43a7>设备IP:</font><br>
</div></td>
<td width="346" valign="top"> <input type="text" name="equip" size="32" maxlength="64">
</td>
</tr>
<tr bgColor="#c9d4ea">
<td width="147" align="right"> </td>
<td width="246" valign="top"> <input type="submit" name="Submint" value="提交" οnclick="javascript:return(checkform());">
<input type="reset" name="Submit2" value="重写"> </tr>
</table>
</form>
</body>
</html>
大家有兴趣研究下,如果是我的错误请发邮件:ohrabbit@126.com