关于NullPointerException异常问题,好像不愿编码问题(getBytes("iso-8859-1"),但提示有错误,希望高手指点一下
<%@ page language="java" import="java.util.*,java.sql.*,java.io.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    
    <title>My JSP 'InsertMysql1.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
   <%
   //request.setCharacterEncoding("gb2312");
    Class.forName("com.mysql.jdbc.Driver");
    String url="jdbc:mysql://localhost/book";
    Connection conn=DriverManager.getConnection(url,"root","admin");
    Statement stmt=conn.createStatement();
    //stmt.executeUpdate("insert into bookInfo values ('数据库','大象出版社',20)");
    String name=request.getParameter("name");
    name=new String(name.getBytes("iso-8859-1"));
    String publisher=request.getParameter("publisher");
    publisher=new String(publisher.getBytes("iso-8859-1"));
    String price=request.getParameter("price");
    price=new String (price.getBytes("iso-8859-1"));
    if (name.equals("")|publisher.equals("")|price.equals(""))
    {response.sendRedirect("MySQLInsert.jsp");}
    else
    {
     String sql="insert into bookInfo  values ('"+name+"','"+publisher+"','"+price+"')";
     stmt.executeUpdate(sql);
    }
    out.println("数据连接成功");
    stmt.close();
    conn.close();
    %>
  </body>
</html>

运行结果HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: An exception occurred processing JSP page /InsertMysql1.jsp at line 2926:     Statement stmt=conn.createStatement();
27:     //stmt.executeUpdate("insert into bookInfo values ('数据库','大象出版社',20)");
28:     String name=request.getParameter("name");
29:     name=new String(name.getBytes("iso-8859-1"));
30:     String publisher=request.getParameter("publisher");
31:     publisher=new String(publisher.getBytes("iso-8859-1"));
32:     String price=request.getParameter("price");
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:551)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause java.lang.NullPointerException
org.apache.jsp.InsertMysql1_jsp._jspService(InsertMysql1_jsp.java:86)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.8 logs.
--------------------------------------------------------------------------------Apache Tomcat/7.0.8

解决方案 »

  1.   

    把数据库连接方式改为UTF-8编码或者GBK编码
    如:jdbc:mysql://localhost/DBVF?autoReconnect=true&UseUnicode=true&characterEncoding=GBK (或者UTF-8)
    请你根据你的情况参照下面三点完成。四、数据库连接方式很使用UTF-8编码       JSP中要把网页输入的中文存入数据库,通畅有一个提交的过程,是用str=request.getParameter(“username”),然后执行update或者insert语句来存入数据库。如何赋值给str很重要,而且这里中文输入与网页使用的字体编码有关。1、                         网页使用UTF-8,使用str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”)或者str=new String(request.getParameter(“username”).getBytes(),”UTF-8”),都可以是的存到数据库中的数据是UTF08编码。2、                         Ww网页使用GBK,使用str=new String(request.getParameter(“username”).getBytes(),”GBK”),那么存入数据库的是UTF-8编码。3、                         值得注意的是使用UTF-8的数据库连接方式不能存的GBK。
     
    五、数据库连接方式使用GBK编码       1、如数使用GBK网页,存到数据库里的是GBK的方法:str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”GBK”),或者str=new String(request.getParameter(“username”).getBytes(),”GBK”)。       2、网页使用GBK,想存入UTF-8到数据库里,要分2步:先str=new String(request.getParameter(“username”).getBytes(),”GBK”),再str=new String(str.getBytes(“UTF-8”,”GBK”)即可。       3、网页使用UTF-8,而且使用str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”GBK”)或者str=new String(request.getParameter(“username”).getBytes(),”UTF-8”),那么存入到数据库里的数据是UTF-8编码。       4、网页使用UTF-8,而且使用str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”) ,那么存入数据库的数据是GBK编码。
     
    六、数据库连接方式使用缺省,即不使用参数useUnicode和characterEncoding       1、网页使用GBK,如果使用str=request.getParameter(“username”)或者str=new String(request.getParameter(“username”).getBytes()),那么在数据库里的数据是GBK编码。网页使用UTF-8和使用str=request.getParameter(“username”),则存入数据库是UTF-8编码。       2、如果使用str=new String(request.getParameter(“username”).getBytes(“ISO-8850-1”)),那么根据网页提供的字体编码而存到数据库,比如是UTF-8的网页,那么存到数据库中的就是UTF-8编码,如果使用GBK网页,那么存到数据库里的字就是GBK编码。       3、如果使用str=new String(request.getParameter(“username”).getBytes(“UTF-8”),“UTF-8”)这一种组合能存到正确的数据外,其他存在数据库里的数据则都是乱码或者错误马。在这个UTF-8组合的特例中,网页使用的是GBK,则存入数据库里就是GBK,网页使用UTF-8,那么存到数据库的就是UTF-8编码。       4、网页是GBK的要存得UTF-8,一定需要2步:company=new String(request.getParameter(“company”).getBytes(),”GBK”)和company= new String(company.getBytes(“UTF-8”))。       5、网页是UTF-8得,不能存的GBK在数据库里,一句话,改变数据库连接方式不能存得GBK码。参考:http://wudale.bokee.com/3594651.html
      

  2.   

     name=new String(name.getBytes("iso-8859-1"));
     检查下name变量是不是null的。。
      可以设置mysql的默认编码 直接用到mysql安装目录下 找到my.ini 文件,修改
     在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
     启动MySQL服务 
      

  3.   

    name=new String(name.getBytes("iso-8859-1"));
    这个后面是不是应该再加一个GB2312你解码之后貌似没有重新编码
      

  4.   

    编码问题解决了,可是主要问题是出现的指针异常啊
    name 为空的话直接跳转到"MySQLInsert.jsp了
      

  5.   

    if (name.equals("")|publisher.equals("")|price.equals(""))
      {response.sendRedirect("MySQLInsert.jsp");}
    这不是已经对name进行判断了吗
      

  6.   

    null是个很最简单的问题!
    乱码:数据库中表、字段各是什么编码?如果是utf-8
    那么在连接字符串后面加上characterEncoding=utf-8
    比如:jdbc:mysql://localhost:3306/aeroflex?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    总之,所有地方的编码要一样!过滤器是要用的!
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8"); chain.doFilter(request, response);
    这是过滤器里的,我是没有产生过乱码!你也试一下......
      

  7.   

    恩,谢谢,主要是java.lang.NullPointerException这个问题怎么解决啊
      

  8.   

    比如使用变量userName前,先判断userName是否为空,if(userName!=null && !userName.equals(""))再执行
      

  9.   

    if (name.equals("")|publisher.equals("")|price.equals(""))
      {response.sendRedirect("MySQLInsert.jsp");}
    这句话不是已经判断了了吗
      

  10.   

    为什么会出现NullPointerException异常问题
      

  11.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        
      <title>My JSP 'InsertMysql1.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
      </head>
       
      <body>
      <%
      //request.setCharacterEncoding("gb2312");
      Class.forName("com.mysql.jdbc.Driver");
      String url="jdbc:mysql://localhost/book";
      Connection conn=www.cctv40.comDriverManager.getConnection(url,"root","admin");
      Statement stmt=conn.createStatement();
      //stmt.executeUpdate("insert into bookInfo values ('数据库','大象出版社',20)");
      String name=request.getParameter("name");
      name=new String(name.getBytes("iso-8859-1"));
      String publisher=request.getParameter("publisher");
      publisher=new String(publisher.getBytes("iso-8859-1"));
      String price=request.getParameter("price");
      price=new String (price.getBytes("iso-8859-1"));
      if (name.equals("")|publisher.equals("")|price.equals(""))
      {response.sendRedirect("MySQLInsert.jsp");}
      else
      {
      String sql="insert into bookInfo values ('"+name+"','"+publisher+"','"+price+"')";
      stmt.executeUpdate(sql);
      }
      out.println("数据连接成功");
      stmt.close();
      conn.close();
      %>
      </body>
    </html>什么情况??
      

  12.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        
      <title>My JSP 'InsertMysql1.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
      </head>
       
      <body>
      <%
      //request.setCharacterEncoding("gb2312");
      Class.forName("com.mysql.jdbc.Driver");
      String url="jdbc:mysql://localhost/book";
      Connection conn=DriverManager.getConnection(url,"root","admin");
      Statement stmt=conn.createStatement();
      //stmt.www.cctv40.cnexecuteUpdate("insert into bookInfo values ('数据库','大象出版社',20)");
      String name=request.getParameter("name");
      name=new String(name.getBytes("iso-8859-1"));
      String publisher=request.getParameter("publisher");
      publisher=new String(publisher.getBytes("iso-8859-1"));
      String price=request.getParameter("price");
      price=new String (price.getBytes("iso-8859-1"));
      if (name.equals("")|publisher.equals("")|price.equals(""))
      {response.sendRedirect("MySQLInsert.jsp");}
      else
      {
      String sql="insert into bookInfo values ('"+name+"','"+publisher+"','"+price+"')";
      stmt.executeUpdate(sql);
      }
      out.println("数据连接成功");
      stmt.close();
      conn.close();
      %>
      </body>
    </html>好复杂啊。。
      

  13.   

    就是往数据库插入东西会出现NullPointerException异常问题