[英]How fix the maven error: java.lang.NullPointerException: charsetName whean
[英]an error:NullPointerException for java project, how to fix it?
當我為查詢用戶和密碼運行一個簡單的java項目時,我得到這個錯誤消息:
type Exception report
message: java.lang.NullPointerException
description The server encountered an internal error that prevented it from fulfilling this request.
java.lang.NullPointerException
DB.DataBaseConnection.close(DataBaseConnection.java:34)
DB.UserDAOImpl.queryAll(UserDAOImpl.java:84)
org.apache.jsp.QueryAll_jsp._jspService(QueryAll_jsp.java:100)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
這是QueryAll.jsp
:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="DB.*" %>
<%@ page import="java.util.*" %>
<title>QueryAll</title>
<% request.setCharacterEncoding("utf-8"); %>
<body>
<%
UserDAO userDAo=DAOFcatory.getUserDAOInstance();
//set new user
List<User> all=userDAo.queryAll();
Iterator<User> iter=all.iterator();
%>
<table border="1" bgcolor="#c0c0c0" align="center">
<tr>
<td>Id</td>
<td>Username</td>
<td>Password</td>
</tr>
<%
while(iter.hasNext()){
User user1=iter.next();
%>
<tr>
<td><%=user1.getUserid() %></td>
<td><%=user1.getUsername()%></td>
<td><%=user1.getPassword() %></td>
</tr>
<%
}
%>
</table>
這是DataBaseConnection.java
:
package DB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DataBaseConnection {
private final String driver = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql:localhost:3306/javaweb";
private final String user = "root";
private final String pwd = "root";
private Connection conn;
public DataBaseConnection() {
try {
Class.forName(driver);
this.conn = DriverManager.getConnection(url,user,pwd);
}
catch (ClassNotFoundException e){
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return this.conn;
}
public void close(){
try {
this.conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
User.java
:
package DB;
public class User {
private int userid;
private String username;
private String password;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
這是UserDAO.java
:
package DB;
import java.util.*;
public interface UserDAO {
//query by all
public List<User> queryAll() throws Exception;
這是UserDAOImpl.java
:
package DB;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import DB.User;
import DB.DataBaseConnection;
public class UserDAOImpl implements UserDAO{
public List<User> queryAll() throws Exception {
List<User> all = new ArrayList<User>();
String sql = "select * from user";
PreparedStatement pstmt = null;
DataBaseConnection dbc = null;
try {
dbc = new DataBaseConnection();
pstmt = dbc.getConnection().prepareStatement(sql);
//query database
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
User user = new User();
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
//add data to List
all.add(user);
}
rs.close();
pstmt.close();
}
catch(Exception e) {
e.printStackTrace();
throw new Exception("Erro:operation abnormal");
}
finally {
dbc.close();
}
return all;
}
這是DAOFactory.java
:
package DB;
import DB.*;
public class DAOFcatory {
public static UserDAO getUserDAOInstance() {
return new UserDAOImpl();
}
}
但是,當我評論UserDAOImpl.java
的代碼時:
throw new Exception("Erro:operation abnormal");
和dbc.close();
我得到了頂部導航欄,但沒有信息。它太奇怪了。我猜它不是連接數據庫,也許當我嘗試使用指向內存中沒有位置的引用時出現(null),好像它引用了一個賓語。 但我找不到null。 Userid是不確定的,也許這是一個線索。
我相信您的連接存在問題。
public DataBaseConnection() {
try {
Class.forName(driver);
this.conn = DriverManager.getConnection(url,user,pwd);
}
catch (ClassNotFoundException e){
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
}
如果getConnection
拋出一個SQLException
- 它可能正在做 - 當你捕獲它時你會離開private Connection conn;
未初始化。 當你在this.conn.close();
關閉它this.conn.close();
你在空引用上調用.close()
。
如果您能夠在此階段查看正在打印的堆棧跟蹤(在錯誤日志等中),您應該看到連接失敗的原因。
以下示例演示了相同的行為:
public class Blah
{
public String hello;
public Blah()
{
try
{
fail();
hello = "hi";
}
catch (IOException e)
{
System.err.println("Exception caught!");
}
}
private void fail() throws IOException
{
throw new IOException();
}
public static void main(String[] args)
{
Blah blah = new Blah();
System.out.println(blah.hello);
}
}
因為在此之前則拋出異常hello
被初始化( hello = "hi";
在端部的代碼打印“NULL”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.