Java每日5问(第27天)

tomcat 容器是如何创建 servlet 类实例?用到了什么原理?

当容器启动时,会读取在 webapps 目录下所有的 web 应用中的 web.xml 文件,然后对 xml 文件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行加载, 并通过反射的方式实例化。(有时候也是在第一次请求时实例化)
在 servlet 注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

JDBC 访问数据库的基本步骤是什么?

第一步:Class.forName()加载数据库连接驱动;
第二步:DriverManager.getConnection()获取数据连接对象;
第三步:根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、PreparedStatement ;
第四步:执行 SQL,执行 SQL 前如果有参数值就设置参数值 setXXX();
第五步:处理结果集;
第六步:关闭结果集、关闭会话、关闭连接。

为什么要使用 PreparedStatement?

PreparedStatement 接口继承 Statement,PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。
作为 Statement 的子类, PreparedStatement 继承了 Statement 的所有功能。三种方法
execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。在 JDBC 应用中,多数情况下使用 PreparedStatement,原因如下:
代码的可读性和可维护性。Statement 需要不断地拼接,而 PreparedStatement 不会。PreparedStatement 尽最大可能提高性能。DB 有缓存机制,相同的预编译语句再次被调用不会再次需要编译。
最重要的一点是极大地提高了安全性。Statement 容易被 SQL 注入,而 PreparedStatement
传入的内容不会和 sql 语句发生任何匹配关系。

数据库连接池的原理。为什么要使用连接池?

1、数据库连接是一件费时的操作,连接池可以使多个操作共享一个连接。
2、数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放 回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是 我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发,测试及 性能调整提供依据。
3、使用连接池是为了提高对数据库连接资源的管理

execute,executeQuery,executeUpdate 的区别是什么?

1、Statement 的 execute(String query)方法用来执行任意的 SQL 查询,如果查询的结果是一个ResultSet,这个方法就返回 true。如果结果不是 ResultSet,比如 insert 或者 update 查询,它就会返回 false 。 我们可以通过它的 getResultSet 方法来获取 ResultSet , 或者通过getUpdateCount()方法来获取更新的记录条数。
2、Statement 的 executeQuery(String query)接口用来执行 select 查询,并且返回 ResultSet。即使查询不到记录返回的 ResultSet 也不会为 null。我们通常使用 executeQuery 来执行查询语句, 这样的话如果传进来的是 insert 或者 update 语句的话, 它会抛出错误信息为“executeQuery method can not be used for update”的 java.util.SQLException。 ,
3、Statement 的 executeUpdate(String query)方法用来执行 insert 或者 update/delete(DML) 语句,或者 什么也不返回,对于 DDL 语句,返回值是 int 类型,如果是 DML 语句的话,它就是更新的条数,如果是 DDL 的话,就返回 0。
只有当你不确定是什么语句的时候才应该使用 execute() 方法, 否则应该使用
executeQuery 或者 executeUpdate 方法。

猜你喜欢

转载自blog.csdn.net/qq_39899164/article/details/107166901