07-08
14
今天碰到的两个细节问题解决方法
作者:Java伴侣 日期:2007-08-14
两个小问题,具体如下
一,关于插入单引号'到数据库出错问题<<数据表test,字段有title(varchar),content(text)>>
在上一个问题test1.jsp中有一个form指向test2.jsp,在test2.jsp中插入得到的数据,test2.jsp的部分代码如下:
String title=new String(request.getParameter("title").getBytes("iso-8859-1"),"gb2312");
String content=new String(request.getParameter("content").getBytes("iso-8859-1"),"gb2312");
String sql="insert into test(title,content) values('"+title+"','"+content+"')";
stmt.executeUpdate(sql);
当test1.jsp输入的数据有单引号'时,就出现错误,错误肯定出在sql语句上,不知道怎么处理?
二,关于从数据库中提取"<%%>"标签对,数据库结构同上
代码如下:
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
out.print(rs.getString("title")+":"+rs.getString("content")+"<br/>");
}
如果表test中存在的数据包含"<%%>"标签对,提取后这对标签对中的数据就显示为空,估计要作特殊处理,但不知道怎么办?
解决方法:
到http://jakarta.apache.org/site/downloads/downloads_commons-lang.cgi下载commons-lang-2.2.zip,解压之后得到的jar放到你的lib目录,并需要在test2.jsp文件头上导入org.apache.commons.lang.*;
一.
<%
String sql="insert into test(title,content) values('"+StringEscapeUtils.escapeSql(title)+"','"+ StringEscapeUtils.escapeSql(content)+"')";
stmt.executeUpdate(sql);
%>
二.
<%
out.print(StringEscapeUtils.escapeHtml(rs.getString("title"))+":"+StringEscapeUtils.escapeHtml(rs.getString("content"))+"<br/>");
%>
附:第一个问题也可以用以下方式解决(尚为测试):
<%
String sql = "insert into test(title,content) values(?,?)";
PreparedStatement pStmt = null;
pStmt=conn.prepareStatement(sql);
pStmt.setString(1,title);
pStmt.setString(2,content);
pStmt.executeUpdate();
%>
一,关于插入单引号'到数据库出错问题<<数据表test,字段有title(varchar),content(text)>>
在上一个问题test1.jsp中有一个form指向test2.jsp,在test2.jsp中插入得到的数据,test2.jsp的部分代码如下:
String title=new String(request.getParameter("title").getBytes("iso-8859-1"),"gb2312");
String content=new String(request.getParameter("content").getBytes("iso-8859-1"),"gb2312");
String sql="insert into test(title,content) values('"+title+"','"+content+"')";
stmt.executeUpdate(sql);
当test1.jsp输入的数据有单引号'时,就出现错误,错误肯定出在sql语句上,不知道怎么处理?
二,关于从数据库中提取"<%%>"标签对,数据库结构同上
代码如下:
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
out.print(rs.getString("title")+":"+rs.getString("content")+"<br/>");
}
如果表test中存在的数据包含"<%%>"标签对,提取后这对标签对中的数据就显示为空,估计要作特殊处理,但不知道怎么办?
解决方法:
到http://jakarta.apache.org/site/downloads/downloads_commons-lang.cgi下载commons-lang-2.2.zip,解压之后得到的jar放到你的lib目录,并需要在test2.jsp文件头上导入org.apache.commons.lang.*;
一.
<%
String sql="insert into test(title,content) values('"+StringEscapeUtils.escapeSql(title)+"','"+ StringEscapeUtils.escapeSql(content)+"')";
stmt.executeUpdate(sql);
%>
二.
<%
out.print(StringEscapeUtils.escapeHtml(rs.getString("title"))+":"+StringEscapeUtils.escapeHtml(rs.getString("content"))+"<br/>");
%>
附:第一个问题也可以用以下方式解决(尚为测试):
<%
String sql = "insert into test(title,content) values(?,?)";
PreparedStatement pStmt = null;
pStmt=conn.prepareStatement(sql);
pStmt.setString(1,title);
pStmt.setString(2,content);
pStmt.executeUpdate();
%>
评论: 0 | 引用: 0 | 查看次数: 971
发表评论