java开发岗高频面试题全解析,java基础高级面试题
如何解决写爬虫IP受阻的问题?立即使用。
1.JDBC访问数据库的基本步骤是什么?
(更多面试问题推荐:java面试问答)
装载驱动
通过DriverManager对象获取Connection对象连接。
通过连接对象获取会话。
通过会话,可以添加、删除和检查数据,并且可以封装对象。
关闭资源
2.谈谈preparedStatement和Statement的区别。
效率:与普通的session对象相比,数据库系统不会重新编译同一个sql语句。
安全性:可以有效避免sql注入攻击!Sql注入攻击是从客户端输入一些非法的特殊字符,使服务器仍然可以正确构造sql语句,从而收集程序和服务器的信息和数据。
例如:
如果用户名和密码输入为“1”或“1”=“1”,则select * from t _ user where username=“username”和password=“password”;产生的sql语句是:
" Select * from t _ user where username= 1 或 1= 1 ,password= 1 或 1= 1 "。此语句的where部分在筛选数据时不起作用。
3.谈谈事务的概念以及在JDBC编程中处理事务的步骤。
事务是作为单个逻辑工作单元执行的一系列操作。
一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性(ACID)属性。只有这样才能成为交易。
交易步骤:
conn . set auto commit(false);将提交方式设置为手动提交。
Conn.commit()提交事务。
异常,回滚conn . roll back();
4.数据库连接池的原理。为什么使用连接池。
数据库连接是一个耗时的操作,连接池可以让多个操作共享一个连接。
数据库连接池的基本思想是为数据库连接建立一个“缓冲池”。提前在缓冲池中放置一定数量的连接。当需要建立数据库连接时,只需从“缓冲池”中取出一个,并在使用后放回原处。我们可以通过设置连接池中的最大连接数来防止系统无休止地连接到数据库。更重要的是,我们可以通过连接池的管理机制来监控数据库连接的数量和使用情况,为系统开发、测试和性能调整提供依据。
连接池用于改进数据库连接资源的管理。
(相关推荐:java入门)
5.JDBC的黄色读物是什么?哪个数据库隔离级别可以防止脏读?
当我们使用事务时,可能会发生这样的情况:一行数据刚刚被更新,同时另一个查询读取新更新的值。这就导致了脏读,因为更新的数据还没有持久化,更新这一行数据的业务可能会回滚,这样这个数据就无效了。数据库的TRANSACTIONREADCOMMITTED、TRANSACTIONREPEATABLEREAD和TRANSACTION_SERIALIZABLE的隔离级别可以防止脏读。
6.什么是幻象读取,哪个隔离级别可以防止幻象读取?
幻读是指一个事务多次执行一个查询,但返回不同的值。假设一个事务正在按照一定的条件查询数据,然后另一个事务插入了一行符合查询条件的数据。然后这个事务再次执行这个查询,返回的结果集将包含刚刚插入的新数据。这条新的数据线叫做魔线,这种现象叫做魔读。
只有TRANSACTION_SERIALIZABLE隔离级别可以防止幻读。
7.JDBC的驱动程序管理器是用来做什么的?
JDBC的DriverManager是一个工厂类,通过它我们创建数据库连接。当加载JDBC的驱动程序类时,它会将自己注册到DriverManager类中。
然后我们会将数据库配置信息传递给DriverManager.getConnection()方法,DriverManager会使用注册在其中的驱动程序来获取数据库连接并返回给调用程序。
8.execute、executeQuery和executeUpdate有什么区别?
语句的execute(字符串查询)方法用于执行任何SQL查询。如果查询结果是ResultSet,该方法将返回true。如果结果不是ResultSet,如insert或update查询,将返回false。我们可以通过它的getResultSet方法获取结果集,或者通过getUpdateCount()方法获取更新记录的数量。
语句的executeQuery(字符串查询)接口用于执行选择查询并返回结果集。查询记录返回的结果集不会为null。我们通常使用executeQuery来执行查询语句,这样如果传入一个insert或update语句,就会抛出java.util.SQLException,并给出错误信息“execute query method不能用于update”。
语句的executeUpdate(字符串查询)方法用于执行insert或update/delete(DML)语句,或者不返回任何内容。对于DDL语句,返回值的类型为int,如果是DML语句,则为更新的项数,如果是DDL语句,则为0。
只有在不确定是什么语句时,才应该使用execute()方法,否则应该使用executeQuery或executeUpdate方法。
9.按页面显示SQL查询结果一般怎么做?
甲骨文:
select * from
(select *,rownum作为学生的tempid
其中t.tempid介于“页面大小*(页面编号-1)”和“页面大小*页面编号MySQL:
select * from学生限制" pageSize*(pageNumber-1)"," pageSize;sql server:
从我不在的学生中选择top " pageSize " *
(从按id排序的学生中选择top " pageSize * (pageNumber-1) id)
“按id排序;(视频教程推荐:java课程)
10.JDBC的结果集是什么?
查询数据库后会返回一个ResultSet,就像查询结果集的数据表。
ResultSet对象维护一个指向当前数据行的游标。开始时,光标指向第一行。如果调用ResultSet的next()方法,光标将向下移动一行。如果没有更多的数据,next()方法将返回false。您可以在for循环中使用它来遍历数据集。
默认结果集无法更新,光标只能下移。也就是说,你只能从第一行遍历到最后一行。但是,您也可以创建一个可以回滚或更新的结果集。
当生成ResultSet的语句对象被关闭或重新执行或获得下一个ResultSet时,ResultSet对象将自动关闭。
您可以通过ResultSet的getter方法传入列名或从1开始的序列号来获取列数据。以上是java高频基础面试题—— (5)的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。