異常踩坑合集

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中移除。
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章