欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常日常踩坑

程序员文章站 2022-07-14 15:18:59
...

NullPointException空指针异常

  • 肯定有一个或多个变量值为null。
  • 通过JDBC插入数据时:
    异常日常踩坑

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中移除。
    异常日常踩坑