目录
3.Statement和PreparedStatement的区别
1.抽象类为什么不能创建对象
- 抽象类不能表示一个具体的类,为了集合一些具有相同行为或属性的类创建的类
- 抽象类中含有抽象方法,这些方法就等着被继承,被子类重写,不同的子类方法的功能具体实现是不同的
- 如果抽象类能创建对象,该对象调用其抽象方法就没有意义
2.SQL查询语句关键字的执行顺序
优先级 | 关键字 | 关键字作用 | |
1 | FROM | 定义查询结果的来源 | |
2 | ON | 设置多表连接的条件 | |
3 | INNER JOIN | 多表连接 | |
4 | WHERE | 筛选条件 | |
5 | GROUP BY | 分组 | |
6 | HAVING | 分组条件筛选 | |
7 | DISTINCT | 去重复 | |
8 | ORDER BY | 排序 | |
9 | LIMIT | 限制返回的记录数 |
3.Statement和PreparedStatement的区别
- PreparedStatement继承自Statement,PreparedStatement的实例包含已编译的SQL的语句
- PreparedStatement继承了Statement的所有功能,重写了Statement中的execute方法,可以不用参数
- Statement对SQL语句是由字符串的形式拼接而成的,PreparedStatement提高了安全性,对SQL语句进行了封装,对于未知的SQL中的字段,可以用占位符代替,可以防止恶意拼接SQL语句
- PreparedStatement 支持批处理,其批处理执行效率与快于Statement的多次处理,内存占用也小于Statement,但是由于进行了预编译,对于某些业务只需执行单条sql语句的来说,Statement 快于PreParedStatement
4.悲观锁,乐观锁,表级锁,行级锁
- 悲观锁(加的是表级锁)一方:查询语句加 for update;另一方:查询语句加 for update;当进行更新语句的时候,另一方不能进行更新操作
- 乐观锁,更新语句设置版本号,在指定版本中更新数据,一方:update account set money=money-200,version=version+1 where id=1 and version=0;另一方操作同一个版本号,则不能更新数据如果更新多,查询少,用悲观锁;反之,乐观锁
- 表级锁,where用的是非主键
- 行级锁,where用主键一般是id,如果用表级锁,其他客户将不能进行查询操作,因此开发中记得用行级锁
5.jsp九大内置对象和其中的四大域对象
九大内置对象、四个域对象 | 所属类 | 名称 | 生命周期 |
---|---|---|---|
request | HttpServletRequest | 请求对象 | 一次请求创建,响应后销毁 |
respond | 响应对象 | ||
pageContext | PageContextImpl | jsp的上下文对象 | 在当前jsp页面有效 |
session | HttpSession | 会话对象 | 一次会话创建(打开浏览器时创建),会话结束销毁(关闭浏览器),当前会话有效 |
application | ServletContext | ServletContext对象 | web工程启动时创建,关闭时销毁,整个web工程有效 |
config | ServletConfig对象 | ||
out | jsp输出流对象 | ||
page | 指向当前jsp的对象 | ||
exception | 异常对象 |
域对象是可以像Map一样存取数据的对象。四个域对象功能一样,只是作用范围不一样(其实是为了优化内存)。