我正在运行使用MySQL数据库的Tomcat WAR。 应用程序将以外语运行,所以我必须将所有数据库字符参数更改为utf8。将数据库编码更改为导致java.lang.NullPointerException的UTF8
一个应用程序字符串(appPrefix)必须为空(因为WAR部署在根目录中)。这很好,直到我用UTF8创建了一个新的数据库并迁移了所有的表。
现在,我得到一个NullPointerException,因为appPrefix是空的:以上
java.lang.NullPointerException
com.horizon.servlet.PageServlet.doMainPageRequest(PageServlet.java:177)
com.horizon.servlet.PageServlet.doRequest(PageServlet.java:53)
com.horizon.servlet.PageServlet.doGet(PageServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.horizon.filters.P3PFilter.doFilter(P3PFilter.java:19)
是所有引起波澜整个应用程序相同的错误。 这一切都是由appPrefix为空引起的,但它应该..
我应该用另一种方式指定它为空吗?或者我应该尝试对此方法进行硬编码?
编辑: 按在下面的评论请求,这里是PageServlet.java:177
request.setAttribute("appPrefix", appManager.getAppStringById(11).getValue());
此引用AppManager.java:
public static final int APP_STRING_APPLICATION_PREFIX = 11;
这是由
填充public AppString getAppStringById(int id) {
AppString string = (AppString) stringCache.get(id);
if (string == null) {
String query = "SELECT * FROM app_strings WHERE id = ?";
List<Object> params = new LinkedList<Object>();
params.add(id);
string = execQueryLoadSingleRecord(query, params, new LoadAppString());
if (string != null) {
populateCache(stringCache, id, string);
}
}
return string;
}
和其他的'RuntimeException'一样,这只是你自己代码中的一个bug。请显示'com.horizon.servlet.PageServlet.doMainPageRequest(PageServlet.java:177)' – BalusC
背后的代码所以,'appManager.getAppStringById(11)'返回'null'?换句话说,'execQueryLoadSingleRecord()'方法返回'null'?为什么它返回'null'呢? – BalusC
它得到的数据库条目是空的,因为它应该。所以它不应该返回null?这与任何事情有冲突吗?直到我将数据库的编码从默认的latin1瑞典语更改为UTF8时,空白的db字符串才是问题! –