• JDBC面试题


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

    (1). 注册数据库驱动;

    (2). 建立数据库连接;

    (3). 创建一个statement语句;

    (4). 执行sql语句;

    (5). 处理结果集;

    (6). 关闭数据库连接;

    Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
    
            try {
                // 加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 获取与数据库连接的对象-Connetcion
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");
                // 获取执行sql语句的statement对象
                statement = connection.createStatement();
                // 执行sql语句,拿到结果集
                resultSet = statement.executeQuery("SELECT * FROM users");
                //遍历结果集,得到数据
                while (resultSet.next()) {
                    System.out.println(resultSet.getString(1));
                    System.out.println(resultSet.getString(2));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                /*
                 * 关闭资源,后调用的先关闭
                 *
                 * 关闭之前,要判断对象是否存在
                 * */
                if (resultSet != null) {
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (statement != null) {
                    try {
                        statement.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

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

    PreparedStatement支持sq的预编译,比Statement效率更高,而且能防止sql注入,另外PreparedStatement支持?操作符,更灵活。CallableStatement主要用于存储过程。

    3. 说说数据库连接池的基本原理?

    JAVA 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
    实现方案:连接池使用集合来进行装载,返回的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;
        }
  • 相关阅读:
    若依(基于SpringBoot的权限管理系统)的快速搭建
    Android中怎样在项目中引入别的项目中正使用的library
    AndroidStudio中提示:uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in libr
    AndroidStudio中提示:Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:
    mysql与mongoDB常用命令
    github、gitlab等常用api接口
    常用编译网址
    vue/react: 父组件中请求数据好?还是子组件中请求数据好?
    进阶《Python高性能编程》中文PDF+英文PDF+源代码
    【2021-03-19】人生十三信条
  • 原文地址:https://www.cnblogs.com/iamswf/p/15415678.html
Copyright © 2020-2023  润新知