文章目錄
NullPointException空指針異常
- 肯定有一個或多個變量值爲null。
UnsupportedOperationException不支持的操作異常
- 調用Arrays.asList()生產的List的add、remove方法時報異常,這是由Arrays.asList() 返回的是Arrays的內部類ArrayList, 而不是java.util.ArrayList。Arrays的內部類ArrayList和java.util.ArrayList都是繼承AbstractList,remove、add等方法AbstractList中是默認throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重寫了這些方法而Arrays的內部類ArrayList沒有重寫,所以會拋出異常。
//將string數組轉換爲list集合
List<String> list = Arrays.asList(teams);// Exception in thread "main" java.lang.UnsupportedOperationException
List<String> teamlist = new ArrayList<>(list);
java.sql.SQLException: No suitable driver
- 在進行web項目開發時,使用C3P0連接池及DBUtils連接數據庫執行查詢操作,引入的mysql-connector-java-5.1.46
jar包無法解析(java測試時正常),會報java.sql.SQLException: No suitable
driver異常;引入mysql-connector-java-5.1.46-bin.jar包正常運行(文件名多了-bin),具體原因暫時不清楚。
js append方法導致表格樣式丟失
- 回顯數據庫查詢信息至瀏覽器頁面,在ajax回調函數裏使用append方法添加表格信息,表格樣式丟失(bootstrap)。
- 使用$("#tab tr:nth-child(1)").after(html);(表示給tab表格中第一個tr添加)after替代append後解決。
queryrunner查詢問題
需要先強轉爲Long數據類型,直接轉int會報錯。
瀏覽器加載樣式丟失問題
- web項目添加了全局亂碼處理的過濾器,導致頁面顯示樣式丟失。
- 刪掉配置之後,ie瀏覽器顯示正常,谷歌瀏覽器仍舊樣式丟失。
- 因爲chrome會緩存css樣式,按F5刷新是沒用的。得清除緩存才行。更快捷的方式是按Ctrl+F5強制重新加載資源。
數據庫編碼格式問題
- 通過jdbc操作插入及查詢數據庫信息時,中文顯示爲?,是數據庫編碼格式有問題。
- 解決辦法:
servlet與js間json數據傳輸問題
- 有時候在js頁面解析json數據時,會報錯。
- 解決辦法:給數據加上括號。
- 什麼原理不清楚,憑經驗。
數據庫操作事務問題
- 問題描述:註冊頁面需要同時在兩個關聯表格中插入數據時,需引入事務操作。若綁定在ThreadLocal上的Connection對象使用完並進行關閉操作後,同一頁面不刷新再次註冊,會報SQL異常。
- JDBCUtils代碼塊
public class JDBCUtils {
//創建一個連接池,但是這個連接池只需要創建一次即可。 會自動去類路徑下查找c3p0-config.xml文件
private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
//獲取與線程綁定的connection方法,事務管理
public static Connection getConnection() throws SQLException {
Connection con = tl.get();
if(con == null) {
con = dataSource.getConnection();
tl.set(con);
}
return con;
}
//開啓事務
public static void startTransaction() throws SQLException {
Connection con = getConnection();
if(con != null) {
con.setAutoCommit(false); // 設置手動事務
}
}
//事務回滾
public static void rollback() throws SQLException {
Connection con = getConnection();
if(con != null) {
con.rollback();
}
}
//事務提交
public static void commit() throws SQLException {
Connection con = getConnection();
if(con != null) {
con.commit();
}
}
//關閉connection
public static void close() throws SQLException {
Connection con = getConnection();
if(con != null) {
con.close();
tl.remove();
}
}
//獲得連接池
public static DataSource getDataSource() {
return dataSource;
}
}
- 解決辦法:當Connection對象使用完成並關閉後,應該將Connection也從ThreadLocal中移除。