异常踩坑合集

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中移除。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值