关于NullPointerException异常问题,还有就是往Mysql数据库插入中文数据有乱码,除了过滤器还有什么方法能解决?谢谢了

时间:2022-04-04 06:35:18
关于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 report

message 

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 29

26:     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

15 个解决方案

#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


你对name进行判断一下啊

#6


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

#7


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);

这是过滤器里的,我是没有产生过乱码!你也试一下......

#8


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

#9


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

#10


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

#11


为什么会出现NullPointerException异常问题

#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=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>

什么情况??

#13


<!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>

好复杂啊。。。。。。。。。。。。。。

#14


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

#15


乱码还是没有解决

#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


你对name进行判断一下啊

#6


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

#7


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);

这是过滤器里的,我是没有产生过乱码!你也试一下......

#8


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

#9


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

#10


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

#11


为什么会出现NullPointerException异常问题

#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=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>

什么情况??

#13


<!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>

好复杂啊。。。。。。。。。。。。。。

#14


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

#15


乱码还是没有解决