8道经典JDBC面试题 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 8道经典JDBC面试题

8道经典JDBC面试题

更新时间:2021-02-24 17:32:02 来源:极悦 浏览1258次

JDBC提供了诸如查询和更新数据库中数据的方法,本质上是用来规范访问数据库的应用程序接口。总的来说,JDBC在数据库中有着不容忽视的地位,需要我们花费足够的时间去学习,无论是在求职面试还是学习中都需要重视。下面为大家介绍8道经典JDBC面试题

1、JDBC操作数据库的步骤 ?

1)注册数据库驱动。

2)建立数据库连接。

3)创建一个Statement。

4)执行SQL语句。

5)处理结果集。

6)关闭数据库连接

2、JDBC中的Statement 和PreparedStatement,CallableStatement的区别?

区别:

1)PreparedStatement是预编译的SQL语句,效率高于Statement。

2)PreparedStatement支持?操作符,相对于Statement更加灵活。

3)PreparedStatement可以防止SQL注入,安全性高于Statement。

4)CallableStatement适用于执行存储过程。

3、说说数据库连接池工作原理。

JAVA EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

  1. 数据库连接池的实现方案?

连接池使用集合来进行装载,返回的Connection是原始Connection的代理,代理Connection的close方法,当调用close方法时,不是真正关连接,而是把它代理的Connection对象放回到连接池中,等待下一次重复利用。具体代码:

@Override

    public Connection getConnection() throws SQLException {



        if (list.size() > 0) {

            final Connection connection = list.removeFirst();



            //看看池的大小

            System.out.println(list.size());



            //返回一个动态代理对象

            return (Connection) Proxy.newProxyInstance(Demo1.class.getClassLoader(), connection.getClass().getInterfaces(), new InvocationHandler() {



                @Override

                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {



                    //如果不是调用close方法,就按照正常的来调用

                    if (!method.getName().equals("close")) {

                        method.invoke(connection, args);

                    } else {



                        //进到这里来,说明调用的是close方法

                        list.add(connection);



                        //再看看池的大小

                        System.out.println(list.size());



                    }

                    return null;

                }



            });

        }

        return null;

}

5、写出一段JDBC连接本机MySQL数据库的代码。

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost/test";

Stirng user='root';

String password='root';

Connection conn = DriverManager.getConnection(url,user,password);

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

· Statement的execute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。我们可以通过它的getResultSet方法来获取ResultSet,或者通过getUpdateCount()方法来获取更新的记录条数。

· Statement的executeQuery(String query)接口用来执行select查询,并且返回ResultSet。即使查询不到记录返回的ResultSet也不会为null。我们通常使用executeQuery来执行查询语句,这样的话如果传进来的是insert或者update语句的话,它会抛出错误信息为 “executeQuery method can not be used for update”的java.util.SQLException。

· Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句,或者 什么也不返回DDL语句。返回值是int类型,如果是DML语句的话,它就是更新的条数,如果是DDL的话,就返回0。

· 只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。

7、PreparedStatement的缺点是什么,怎么解决这个问题?

PreparedStatement的一个缺点是,我们不能直接用它来执行in条件语句;需要执行IN条件语句的话,下面有一些解决方案:

1)分别进行单条查询——这样做性能很差,不推荐。

2)使用存储过程——这取决于数据库的实现,不是所有数据库都支持。

3)动态生成PreparedStatement——这是个好办法,但是不能享受PreparedStatement的缓存带来的好处了。

4)在PreparedStatement查询中使用NULL值——如果你知道输入变量的最大个数的话,这是个不错的办法,扩展一下还可以支持无限参数。

8、JDBC的ResultSet是什么?

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。

ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。

默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet。

当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。

可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。

以上就是为大家介绍的8道经典JDBC面试题,当然,JDBC的面试题还有很多,不是仅仅靠这8道题就能完全代表的了,在本站的JDBC教程中还有更多的更加全面的JDBC面试题,有需要的小伙伴可以前去学习,为自己未来的求职面试做下铺垫。

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>