我正在運行使用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字符串纔是問題! –