<small id='8yJ4'></small> <noframes id='zkhRme7'>

  • <tfoot id='7WYkD1gq'></tfoot>

      <legend id='DnlaJci'><style id='wZpnOJHh'><dir id='RDZ3A'><q id='P64ANV'></q></dir></style></legend>
      <i id='pFcvje'><tr id='S2opQ6h'><dt id='sz9M7'><q id='J2FejUKd'><span id='Ex019'><b id='qZAB'><form id='C2nDb7za'><ins id='4gZQ'></ins><ul id='yUkTA82W'></ul><sub id='ydGfOLK4Wl'></sub></form><legend id='zj8kv2'></legend><bdo id='yahTq'><pre id='7Zv24I'><center id='NTIYQ6qg'></center></pre></bdo></b><th id='rPcFxb'></th></span></q></dt></tr></i><div id='sXlBZ5U'><tfoot id='KUoNCAYn'></tfoot><dl id='F0hMi'><fieldset id='Ew2HfilI'></fieldset></dl></div>

          <bdo id='JHdWi'></bdo><ul id='QJKONCnx'></ul>

          1. <li id='pN4vZ3'></li>
            登陆

            章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)

            admin 2020-02-14 303人围观 ,发现0个评论

            JDBC常见面试题

            JDBC操作数据库的进程 ?

            JDBC操作数据库的进程 ?

            1. 注册数据库驱动。
            2. 树立数据库衔接。
            3. 创立一个Statement。
            4. 履行SQL句子。
            5. 处理成果集。
            6. 封闭数据库衔接

            代码如下:


            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
            try {
            /*
            * 加载驱动有两种办法
            *
            * 1:会导致驱动会注册两次,过度依靠于mysql的api,脱离的mysql的开发包,程序则无法编译
            * 2:驱动只会加载一次,不需求依靠详细的驱动,灵敏性高
            *
            * 咱们一般都是运用第二种办法
            * */
            //1.
            //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //2.
            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 {
            stat章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)ement.close();
            } catch (SQLException e) {
            e.printStackTrace();
            }
            }
            if (connection != null) {
            try {
            connection.close();
            } catc章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)h (SQLException e) {
            e.printStackTrace();
            }
            }
            }

            JDBC中的Statement 和PreparedStatement,CallableStatement的差异?

            JDBC中的Statement 和PreparedStatement的差异?

            差异:

            • PreparedStatement是预编译的SQL句子,功率高于Statement。
            • PreparedStatement支撑?操作符,相对于Statement愈加灵敏。
            • PreparedStatement能够防止SQL注入,安全性高于Statement。
            • CallableStatement适用于履行存储进程。

            JDBC中大数据量的分页处理办法?

            JDBC中大数据量的分页处理办法?

            最好的办法是运用sql句子进行分页,这样每次查询出的成果会集就只包括某页的数据内容。

            mysql语法:


            SELECT *
            FROM 表名
            LIMIT [START], length;

            oracle语法:


            SELECT *FROM (
            SELECT 列名,列名,ROWNUM rn
            FROM 表名
            WHERE ROWNUM<=(currentPage*lineSize)) temp
            WHERE temp.rn>(currentPage-1)*lineSize;

            说说数据库衔接池作业原理和完结计划?

            说说数据库衔接池作业原理和完结计划?

            作业原理:

            • JAVA EE服务器发动时会树立必定数量的池衔接,并一向保持不少于此数目的池衔接。客户端程序需求衔接时,池驱动程序会回来一个未运用的池衔接并将其表记为忙。假如当时没有闲暇衔接,池驱动程序就新建必定数量的衔接,新建衔接的数量有装备参数决议。当运用的池衔接调用完结后,池驱动程序将此衔接表记为闲暇,其他调用就能够运用这个衔接。

            完结计划:衔接池运用调集来进行装载,回来的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;
            }

            Java中怎样进行业务的处理?

            Java中怎样进行业务的处理?

            1. 业务是作为单个逻辑作业单元履行的一系列操作
            2. 一个逻辑作业单元必须有四个特点,称为原子性、一致性、阻隔性和持久性 (ACID) 特点,只需这样才干成为一个业务

            Connection类中供给了4个业务处理办法:

            • setAutoCommit(Boolean autoCommit):设置是否主动提交业务,默许为主动提交,即为true,经过设置false制止主动提交业务;
            • commit():提交业务;
            • rollback():回滚业务.
            • savepoint:保存点
            • 留意:savepoint不会完毕当时业务,一般提交和回滚都会完毕当时业务的

            修正JDBC代码质量

            下述程序是一段简略的依据JDBC的数据库拜访代码,完结了以下功用:从数据库中查询product表中的一切记载,然后打印输出到控制台.该代码质量较低,如没有正确处理反常,衔接字符串以”魔数”的方式直接存在于代码中等,请用你的思路从头编写程序,完结相同的功用,进步代码质量.

            本来的代码:


            public void printProducts(){
            Connection c = null;
            Statements s = null;
            ResultSet r = null;
            try{
            c=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:sid","username","password");
            s=c.createStatement();
            r=s.executeQuery("select id, name, price from product");
            System.out.println("Id\tName\tPrice");
            while(r.next()){
            int x = r.getInt("id");
            String y = r.getString("name");
            float z = r.getFloat("price");
            System.out.println(x + "\t" + y + "\t" + z);
            }
            } catch(Exception e){
            }
            }

            修正后的代码:


            class Constant{
            public static final String URL="jdbc:oracle:thin:@127.0.0.1:1521:sid";
            public static final String USERNAME="username";
            public static final String PASSWORD="password";
            }
            class DAOException extends Exception{
            public DAOException(){
            super();
            }
            public DAOException(String msg){
            super(msg);
            }
            }
            public class Test{
            public void printProducts() throws DAOException{
            Connection c = null;
            Statement s = null;
            ResultSet r = null;
            try{
            c = DriverManager.getConnection(Constant.URL,Constant.USERNAME,Constant.PASSWORD);
            s = c.createStatement();
            r = s.executeQuery("select id,name,price from product");
            System.out.println("Id\tName\tPrice");
            while(r.next()){
            int x = r.getInt("id");
            String y = r.getString("name");
            float z = r.getFloat("price");
            System.out.println(x + "\t" + y + "\t" + z);
            }
            } catch (SQLException e){
            thro章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)w new DAOException("数据库反常");
            } finally {
            try{
            r.close();
            s.close();
            c.close();
            } catch (SQLException e) {
            e.printStackTrace();
            }
            }
            }
            }

            修正点:

            • url、password等信息不应该直接运用字符串“写死”,能够运用常量替代
            • catch中应该回滚业务,抛出RuntimeException也是回滚业务的一种办法
            • 封闭资源

            写出一段JDBC衔接本机MySQL数据库的代码

            写出一段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);

            JDBC是怎样完结Java程序和JDBC驱动的松耦合的?

            JDBC是怎样完结Java程序和JDBC驱动的松耦合的?

            经过拟定接口,数据库厂商来完结。咱们只需经过接口调用即可。随意看一个简略的JDBC示例,你会发现一切操作都是经过JDBC接口完结的,而驱动只需在经过Class.forName反射机制来加载的时分才会呈现。

            execute,executeQuery,executeUpdate的差异是什么?

            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办法。

            PreparedStatement的缺陷是什么,怎样处理这个问题?

            PreparedStatement的缺陷是什么,怎样处理这个问题?

            PreparedStatement的一个缺陷是,咱们不能直接用它来履行in条件句子;需求履行IN条件句子的话,下面有一些处理计划:

            • 别离进行单条查询——这样做功用很差,不引荐。
            • 运用存储进程——这取决于数据库的完结,不是一切数据库都支撑。
            • 动态生成PreparedStatement——这是章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)个好办法,可是不能享用PreparedStatement的缓存带来的优点了。
            • 在PreparedStatement查询中运用NULL值——假如你知道输入变量的最大个数的话,这是个不错的办法,扩展一下还能够支撑无限参数。

            JDBC的脏读是什么?哪种数据库阻隔等级能防止脏读?

            JDBC的脏读是什么?哪种数据库阻隔等级能防止脏读?

            脏读:一个业务读取到其他一个业务未提交的数据

            比方:A向B转账,A履行了转账句子,但A还没有提交业务,B读取数据,发现自己账户钱变多了!B跟A说,我现已收到钱了。A回滚业务【rollback】,等B再查看账户的钱时,发现钱并没有多。

            下面的三种个阻隔等级都能够防止:

            • Serializable【TRANSACTION_SERIALIZABLE】
            • Repeatable read【TRANSACTION_REPEATABLE_READ】
            • Read committed【TRANSACTION_READ_COMMITTED】

            什么是幻读,哪种阻隔等级能够防止幻读?

            什么是幻读,哪种阻隔等级能够防止幻读?

            是指在一个业务内读取到了其他业务刺进的数据,导致前后读取不一致。

            只需TRANSACTION_SERIALIZABLE阻隔等级才干防止发作幻读。

            JDBC的DriverManager是用来做什么的?

            JDBC的DriverManager是用来做什么的?

            • JDBC的DriverManager是一个工厂类,咱们经过它来创立数据库衔接。
            • 当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里边
            • 然后咱们会把数据库装备信息传成DriverManager.getConnection()办法,DriverManager会运用注册到它里边的驱动来获取数据库衔接,并回来给调用的程序

            JDBC的ResultSet是什么?

            JDBC的ResultSet是什么?

            • 在查询数据库后会回来一个ResultSet,它就像是查询成果集的一张数据表。
            • ResultSet目标保护了一个游标,指向当时的数据行。开端的时分这个游标指向的是榜首行。假如调用了ResultSet的next()办法游标会下移一行,假如没有更多的数据了,next()办法会回来false。能够在for循环中用它来遍历数据集。
            • 默许的ResultSet是不能更新的,游标也只能往下移。也便是说你只能从榜首行到最后一行遍历一遍。不过也能够创立能够回滚或许可更新的ResultSet
            • 当生成ResultSet的Statement目标要封闭或许从头履行或是获取下一个ResultSet的时分,ResultSet目标也会主动封闭。
            • 能够经过ResultSet的getter办法,传入列名或许从1开端的序号来获取列数据。

            有哪些不同的ResultSet?

            有哪些不同的ResultSet?

            依据创立Statement时输入参数的不同,会对应不同类型的ResultSet。假如你看下Connection的办法,你会发现createStatement和prepareStatement办法重载了,以支撑不同的ResultSet和并发类型。

            一共有三种ResultSet目标。

            • ResultSet.TYPE_FORWARD_ONLY:这是默许的类型,它的游标只能往下移。
            • ResultSet.TYPE_SCROLL_INSENSITIVE:游标能够上下移动,一旦它创立后,数据库里的数据再发作修正,对它来说是通明的。
            • ResultSet.TYPE_SCROLL_SENSITIVE:游标能够上下移动,假如生成后数据库还发作了修正操作,它是能够感知到的。

            ResultSet有两种并发类型。

            • ResultSet.CONCUR_READ_ONLY:ResultSet是只读的,这是默许类型
            • ResultSet.CONCUR_UPDATABLE:咱们能够运用ResultSet的更新办法来更新里边的数据。

            JDBC的DataSource是什么,有什么优点

            JDBC的DataSource是什么,有什么优点

            DataSource即数据源,它是界说在javax.sql中的一个接口,跟DriverManager比较,它的功用要更强壮。咱们能够用它来创立数据库衔接,当然驱动的完结类会实践去完结这个作业。除了能创立衔接外,它还供给了如下的特性:

            • 缓存PreparedStatement以便更快的履行
            • 能够设置衔接超时时刻
            • 供给日志记载的功用
            • ResultSet巨细的最大阈值设置
            • 经过JNDI的支撑,能够为servlet容器供给衔接池的功用

            怎样经过JDBC的DataSource和Apache Tomcat的JNDI来创立衔接池?

            怎样经过JDBC的DataSource和Apache Tomcat的JNDI来创立衔接池?

            Tomcat服务器也给咱们供给了衔接池,内部其实便是DBCP

            进程:

            1. 在META-INF目录下装备context.xml文件【文件内容能够在tomcat默许页面的 JNDI Resources下Configure Tomcat's Resource Factory找到】
            2. 导入Mysql或oracle开发包到tomcat的lib目录下
            3. 初始化JNDI->获取JNDI容器->检索以XXX为姓名在JNDI容器寄存的衔接池

            context.xml文件的装备:




            auth="Container"
            type="javax.sql.DataSource"
            username="root"
            password="root"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/zhongfucheng"
            maxActive="8"
            maxIdle="4"/>

            try {
            //初始化JNDI容器
            Context initCtx = new InitialContext();
            //获取到JNDI容器
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            //扫描以jdbc/EmployeeDB姓名绑定在JNDI容器下的衔接池
            DataSource ds = (DataSource)
            envCtx.lookup("jdbc/EmployeeDB");
            Connection conn = ds.getConnection();
            System.out.println(conn);
            }

            Apache的DBCP是什么?

            Apache的DBCP是什么

            假如用DataSource来获取衔接的话,一般获取衔接的代码和驱动特定的DataSource是紧耦合的。其他,除了挑选DataSource的完结类,剩余的代码根本都是相同的。

            Apache的DBCP便是用来处理这些问题的,它供给的DataSource完结成为了应用程序和不同JDBC驱动间的一个笼统层。Apache的DBCP库依靠commons-pool库,所以要保证它们都在布置途径下。

            运用DBCP数据源的进程:

            1. 导入两个jar包【Commons-dbcp.jar和Commons-pool.jar】
            2. 读取装备文件
            3. 获取BasicDataSourceFactory目标
            4. 创立DataSource目标

            private static DataSource dataSource = null;
            static {
            try {
            //读取装备文件
            InputStream inputStream = Demo3.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
            Properties properties = new Properties();
            properties.load(inputStream);
            //获取工厂目标
            BasicDataSourceFactory basicDataSourceFactory = new BasicDataSourceFactory();
            dataSource = basicDataSourceFactory.createDataSource(properties);
            } catch (IOException e) {
            e.printStackTrace();
            } catch (Exception e) {
            e.printStackTrace();
            }
            }
            public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();
            }
            //这儿开释资源不是把数据库的物理衔接开释了,是把衔接归还给衔接池【衔接池的Connection内部自己做好了】
            public static void release(Connection conn, Statement st, ResultSet rs) {
            if (rs != null) {
            try {
            rs.close();
            } catch (Exception e) {
            e.printStackTrace();
            }
            rs = null;
            }
            if (st != null) {
            try {
            st.close();
            } 章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)catch (Exception e) {
            e.printStackTrace();
            }
            }
            if (conn != null) {
            try {
            conn.close();
            } catch (Exception e) {
            e.printStackTrace();
            }
            }
            }

            常见的JDBC反常有哪些?

            常见的JDBC反常有哪些?

            有以下这些:

            • java.sql.SQLE章鱼彩票官网-Java数据库编程之JDBC常见面试知识点整理总结(保藏)xception——这是JDBC反常的基类。
            • java.sql.BatchUpdateException——当批处理操作履行失利的时分或许会抛出这个反常。这取决于详细的JDBC驱动的完结,它也或许直接抛出基类反常java.sql.SQLException。
            • java.sql.SQLWarning——SQL操作呈现的正告信息。
            • java.sql.DataTruncation——字段值由于某些非正常原因被截断了(不是由于超越对应字段类型的长度约束)。

            JDBC中存在哪些不同类型的锁?

            JDBC中存在哪些不同类型的锁?

            从广义上讲,有两种锁机制来防止多个用户一起操作引起的数据损坏。

            • 达观锁——只需当更新数据的时分才会确定记载
            • 失望锁——从查询到更新和提交整个进程都会对数据记载进行加锁。

            java.util.Date和java.sql.Date有什么差异?

            java.util.Date和java.sql.Date有什么差异?

            java.util.Date包括日期和时刻,而java.sql.Date只包括日期信息,而没有详细的时刻信息。假如你想把时刻信息存储在数据库里,能够考虑运用Timestamp或许DateTime字段

            SQLWarning是什么,在程序中怎样获取SQLWarning?

            SQLWarning是什么,在程序中怎样获取SQLWarning?

            SQLWarning是SQLException的子类,经过Connection, Statement, Result的getWarnings办法都能够获取到它。 SQLWarning不会中止查询句子的履行,仅仅用来提示用户存在相关的正告信息。

            假如java.sql.SQLException: No suitable driver found该怎样办?

            假如java.sql.SQLException: No suitable driver found该怎样办?

            假如你的SQL URL串格局不正确的话,就会抛出这样的反常。不管是运用DriverManager仍是JNDI数据源来创立衔接都有或许抛出这种反常。它的反常栈看起来会像下面这样。


            org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL ''jdbc:mysql://localhost:3306/UserDB'
            at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
            at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
            at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
            java.sql.SQLException: No suitable driver found for 'jdbc:mysql://localhost:3306/UserDB
            at java.sql.DriverManager.getConnection(DriverManager.java:604)
            at java.sql.DriverManager.getConnection(DriverManager.java:221)
            at com.journaldev.jdbc.DBConnection.getConnection(DBConnection.java:24)
            at com.journaldev.jdbc.DBConnectionTest.main(DBConnectionTest.java:15)
            Exception in thread "main" java.lang.NullPointerException
            at com.journaldev.jdbc.DBConnectionTest.main(DBConnectionTest.java:16)

            处理这类问题的办法便是,查看下日志文件,像上面的这个日志中,URL串是'jdbc:mysql://localhost:3306/UserDB,只需把它改成jdbc:mysql://localhost:3306/UserDB就好了。

            JDBC的RowSet是什么,有哪些不同的RowSet?

            JDBC的RowSet是什么,有哪些不同的RowSet?

            RowSet用于存储查询的数据成果,和ResultSet比较,它更具灵敏性。RowSet承继自ResultSet,因而ResultSet精干的,它们也能,而ResultSet做不到的,它们仍是能够。RowSet接口界说在javax.sql包里。

            RowSet供给的额定的特性有:

            • 供给了Java Bean的功用,能够经过settter和getter办法来设置和获取特点。RowSet运用了JavaBean的事情驱动模型,它能够给注册的组件发送事情告诉,比方游标的移动,行的增修正,以及RowSet内容的修正等。
            • RowSet目标默许是可翻滚,可更新的,因而假如数据库系统不支撑ResultSet完结相似的功用,能够运用RowSet来完结

            RowSet分为两大类:

            • A. 衔接型RowSet——这类目标与数据库进行衔接,和ResultSet很相似。JDBC接口只供给了一种衔接型RowSet,javax.sql.rowset.JdbcRowSet,它的规范完结是com.sun.rowset.JdbcRowSetImpl。
            • B. 离线型RowSet——这类目标不需求和数据库进行衔接,因而它们更轻量级,更简单序列化。它们适用于在网络间传递数据
            • 有四种不同的离线型RowSet的完结。
            • CachedRowSet——能够经过他们获取衔接,履行查询并读取ResultSet的数据到RowSet里。咱们能够在离线时对数据进行保护和更新,然后从头衔接到数据库里,并回写改动的数据。
            • WebRowSet承继自CachedRowSet——他能够读写XML文档。
            • JoinRowSet承继自WebRowSet——它不必衔接数据库就能够履行SQL的join操作。
            • FilteredRowSet承继自WebRowSet——咱们能够用它来设置过滤规矩,这样只需选中的数据才可见。

            什么是JDBC的最佳实践?

            什么是JDBC的最佳实践?

            • 数据库资源是十分贵重的,用完了应该赶快封闭它。Connection, Statement, ResultSet等JDBC目标都有close办法,调用它就好了。
            • 养成在代码中显式封闭掉ResultSet,Statement,Connection的习气,假如你用的是衔接池的话,衔接用完后会放回池里,可是没有封闭的ResultSet和Statement就会形成资源泄漏了。
            • 在finally块中封闭资源,保证即使出了反常也能正常封闭。
            • 很多相似的查询应当运用批处理完结
            • 尽量运用PreparedStatement而不是Statement,以防止SQL注入,一起还能经过预编译和缓存机制提高履行的功率。
            • 假如你要将很多数据读入到ResultSet中,应该合理的设置fetchSize以便提高功用
            • 你用的数据库或许没有支撑一切的阻隔等级,用之前先细心承认下。
            • 数据库阻隔等级越高功用越差,保证你的数据库衔接设置的阻隔等级是最优的。
            • 假如在WEB程序中创立数据库衔接,最好经过JNDI运用JDBC的数据源,这样能够对衔接进行重用。
            • 假如你需求长时刻对ResultSet进行操作的打瘦脸针的副作用话,尽量运用离线的RowSet。
            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP