服务器 频道

JSP访问(读写)Mysql数据库及乱码处理

  【IT168 服务器学院】在阅读本文前请先正确设置JSP、Tomcat、Mysql数据库及JDBC驱动,如有疑问请阅读相关资料。

  乱码的处理

  第一种方法:

  修改String u ="jdbc:mysql://localhost/numb1?user=root&password="为:String u ="jdbc:mysql://localhost/numb1?user=root&password=&useUnicode=true&characterEncoding=gb2312";
  如果MySQL版本是4.1以上的话,“useUnicode=true&characterEncoding=gb2312”加不加都可以,如果不能解决问题的话我们就采用第二中方法。

  第二种方法:

  先定义一函数
  
  <%!
  public String getStr(String s){
  String str=s;
  try{
  byte b[]=str.getBytes("ISO-8859-1");
  str=new String(b);
  return str;
  }
  catch(Exception e){return null;}
  }
  %>

  1. 数据库的建立

  下一步就是建立数据库,首先从CMD(即DOS)进入mysql,新建一数据库,
  命令如下:
  mysql> create database numb1;
  
  进入新建的数据库:
  mysql> use numb1
  
  新建一表格:
  mysql> CREATE TABLE `lyb` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(20) default NULL,
  `mail` varchar(30) default NULL,
  `qq` varchar(15) default NULL,
  `txt` text,
  PRIMARY KEY (`id`)
  );
  
  然后
  mysql> exit
  C:\> exit
  就OK了

  2. 向数据库写信息

  我们可以做个留言板的结构,下面是填写留言内容页面index.html代码:
  
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <title>我要留言</title>
  </head>

  <body>
  <form name="form1" method="post" action="act.jsp">
  <table width="450" border="0" align="center" bgcolor="#e8e8e8">
  <tr bgcolor="#f8f8f8">
  <th colspan="2">我 要 留 言</th>
  </tr>
  <tr bgcolor="#f8f8f8">
  <td><div align="right">姓名:</div></td>
  <td><input name="name" type="text" id="name" size="20"></td>
  </tr>
  <tr bgcolor="#f8f8f8">
  <td><div align="right">E-mail:</div></td>
  <td><input name="mail" type="text" id="mail" size="20"></td>
  </tr>
  <tr bgcolor="#f8f8f8">
  <td><div align="right">Q Q:</div></td>
  <td><input name="qq" type="text" id="qq" size="20"></td>
  </tr>
  <tr bgcolor="#f8f8f8">
  <td><div align="right">留言内容</div></td>
  <td><textarea name="txt" cols="36" rows="5" id="txt"></textarea></td>
  </tr>
  <tr bgcolor="#f8f8f8">
  <th colspan="2"><input type="submit" name="Submit" value="提交">
  &nbsp;
  <input type="reset" name="Submit" value="重置"></th>
  </tr>
  </table>
  </form>
  </body>
  </html>

  

  上面是静态页面,这里就没有什么看不动的了,呵呵,如果您不想动手就自己做就直接复制代码吧!

  下面是处理留言页面act.jsp的代码:
  
  <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
  <%!
  public String gb2iso(String qs){
  try{
  if (qs == null) return "NULL";
  else return new String(qs.getBytes("gb2312"),"iso-8859-1");
  }
  catch(Exception e){
  log("gb2iso error:"+e.getMessage());
  }
  return "NULL";
  }
  %>
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <title>无标题文档</title>
  </head>

  <body>
  <%
  Class.forName("com.mysql.jdbc.Driver").newInstance(); //org.gjt.mm.mysql.Driver
  String u ="jdbc:mysql://localhost/numb1?user=root&password=";
  java.sql.Connection con = java.sql.DriverManager.getConnection(u);
  java.sql.Statement statement =con.createStatement();
  request.setCharacterEncoding("gb2312");
  String name=request.getParameter("name");
  String mail=request.getParameter("mail");
  String qq=request.getParameter("qq");
  String web=request.getParameter("web");
  String txt=request.getParameter("txt");
  String sql="insert into lyb values(0,''"+gb2iso(name)+"'',''"+gb2iso(mail)+"'',''"+gb2iso(qq)+"'',''"+gb2iso(txt)+"'')";//gb2iso()函数是往数据库添加信息避免乱码出现
  statement.executeUpdate(sql);
  statement.close();
  con.close();
  out.print("您输入的数据已经成功写入数据库!");
  response.sendRedirect("show.jsp");//response内建对象跳转到show.jsp页面
  %>
  </body>
  </html>

  

  好了,简单说明一下:

  public String gb2iso(String qs)是声明一函数,用来处理乱码所带来的一系列问题。由于JAVA与Mysql编码略有不同,两者在相互传递的时候都要出现乱码,我们可以通过此函数来转化一下。下面连接数据库部分可以参看JSP连接Mysql数据库详解及乱码处理一文。也面之间中文传递也会出现乱码,request.setCharacterEncoding("gb2312")此语句是用来使中文信息正常显示的。

  3. 从数据库中读去信息显示留言内容页面show.jsp代码
  
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*" errorPage=""%>
  <%!
  public String getStr(String s){
  String str=s;
  try{
  byte b[]=str.getBytes("ISO-8859-1");
  str=new String(b);
  return str;
  }
  catch(Exception e){return null;}
  }
  %><center><b>下面是留言内容</b></center><br>
  <table width="720" border="1" align="center" cellspacing="0">
  <tr>
  <th width="89">ID</th>
  <th width="111">昵称</th>
  <th width="187">E-mail</th>
  <th width="100">QQ</th>
  <th width="211">留言内容</th>
  </tr>
  <%
  Class.forName("com.mysql.jdbc.Driver").newInstance(); //org.gjt.mm.mysql.Driver
  String u ="jdbc:mysql://localhost/numb1?user=root&password=";//useUnicode=true&characterEncoding=gb2312";
  java.sql.Connection con = java.sql.DriverManager.getConnection(u);
  java.sql.Statement statement =con.createStatement();
  String sql="select * from lyb";
  java.sql.ResultSet rs = statement.executeQuery(sql);

  while(rs.next()) {%>
  <tr>
  <td><div align="center"><%=getStr(rs.getString(1))%> </div></td>
  <td><div align="center"><%=getStr(rs.getString(2))%> </div></td>
  <td><div align="center"><%=getStr(rs.getString(3))%> </div></td>
  <td><div align="center"><%=getStr(rs.getString(4))%> </div></td>
  <td><div align="center"><%=getStr(rs.getString(5))%> </div></td>
  </tr>
  <%}%> </table>
  <%
  rs.close();
  statement.close();
  con.close();
  %>

  到这里就结束了,上面程序是留言板的主体程序,如果想制作留言板的话,剩下的工作就是美化一下了,我们在这里就不再多说了,希望您看了后能有所收获。

0
相关文章