1.抽象类为什么不能创建对象
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
因为抽象类中含有很多没有实现的方法
创建对象去调用方法是指做明确的事情,而这个抽象方法并不明确,所以只有继承抽象类去实现抽象方法才可以。
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。
抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)
允许(但不要求)抽象类包含抽象成员。
2.Statement和PreparedStatement的区别
- PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
- 使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
- statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理
- 使用 PreparedStatement 最重要的一点好处是它拥有更佳的性能优势,SQL语句会预编译在数据库系统中。执行计划同样会被缓存起来,它允许数据库做参数化查询。
- PreparedStatement可以防止SQL注入式攻击。在使用参数化查询的情况下,数据库系统(eg:MySQL)不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行
3.SQL查询语句关键字的执行顺序
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
FROM:从指定的数据表中检索记录
WHERE:根据指定的条件过滤检索出的记录
GROUP BY:对上面过滤后的记录按指定条件分组
HAVING:对所有分组根据指定条件进行过滤
SELECT:从上一步过滤后的各个分组记录中提取指定查询的字段列表(包括聚合字段、计算字段、表达式字段等)
ORDER BY:对上一步查询得到的结果集按照排序字段列表进行排序,并输出排序结果
6、GROUP BY 字段1,字段2——先对所有记录按照字段1进行分组,然后对分组后的结果再在没组内按照字段2分组。
7、ORDER BY 字段1,字段2——先按照字段1进行排序,再按照字段2进行排序。
8、排序规则关键字:ASC(升序,默认)、DESC(降序)。
9、COUNT关键字,作计数使用。COUNT(*)是做候选数据集的整体计数,COUNT(字段)是对某字段进行计数。如果牟烈出现NULL值时,COUNT(*)会算入该列,COUNT(字段)则不会算入该列。