<rt id="hkid1"></rt>
    <s id="hkid1"><meter id="hkid1"></meter></s>
  1. <rp id="hkid1"><meter id="hkid1"></meter></rp>
    <source id="hkid1"></source>
  2. <ruby id="hkid1"><optgroup id="hkid1"></optgroup></ruby>

    經典筆試題-JDBC及Hibernate篇

    小編:管理員 697閱讀 2022.10.22

    五、JDBC 及Hibernate:(共12 題:基礎10 道,中等難度2 道)

    110、數據庫,比如100 用戶同時來訪,要采取什么技術解決?【基礎】 答:可采用連接池。

    111、什么是ORM?【基礎】 答:對象關系映射(Object—Relational Mapping,簡稱ORM)是一種為了解決面向對象與面向關系數據庫存在的互不匹配的現象的技術;簡單的說,ORM 是通過使用描述對象和數據庫之間映射的元數據,將java 程序中的對象自動持久化到關系數據庫中;本質上就是將數據從一種形式轉換到另外一種形式。

    112、Hibernate 有哪5 個核心接口?【基礎】 答:Configuration 接口:配置Hibernate,根據其啟動hibernate,創建SessionFactory 對象;SessionFactory 接口:初始化Hibernate,充當數據存儲源的代理,創建session 對象,sessionFactory 是線程安全的,意味著它的同一個實例可以被應用的多個線程共享,是重量級、二級緩存;Session 接口:負責保存、更新、刪除、加載和查詢對象,是線程不安全的,避免多個線程共享同一個session,是輕量級、一級緩存;Transaction 接口:管理事務;Query 和Criteria 接口:執行數據庫的查詢。

    113、關于hibernate: 【基礎】 在hibernate 中,在配置文件呈標題一對多,多對多的標簽是什么;2)Hibernate 的二級緩存是什么;3)Hibernate 是如何處理事務的; 答:

    1. 一對多的標簽為 ;多對多的標簽為;
    2. sessionFactory 的緩存為hibernate 的二級緩存;
    3. Hibernate 的事務實際上是底層的JDBC Transaction 的封裝或者是JTA Transaction 的封裝;默認情況下使用JDBCTransaction。 State No State Name GD 廣東 LN 遼寧 SD 山東 NMG 內蒙古

    114、Hibernate 的應用(Hibernate 的結構)?【基礎】 答://首先獲得SessionFactory 的對象

    SessionFactory sessionFactory = new Configuration().configure().
    buildSessionFactory();
    //然后獲得session 的對象
    Session session = sessionFactory.openSession();
    //其次獲得Transaction 的對象
    Transaction tx = session.beginTransaction();
    //執行相關的數據庫操作:增,刪,改,查
    session.save(user); //增加, user 是User 類的對象
    session.delete(user); //刪除
    session.update(user); //更新
    Query query = session.createQuery(“from User”); //查詢
    List list = query.list();
    //提交事務
    tx.commit();
    //如果有異常,我們還要作事務的回滾,恢復到操作之前
    tx.rollback();
    //最后還要關閉session,釋放資源
    session.close();
    復制

    115、什么是重量級?什么是輕量級?【基礎】 答:輕量級是指它的創建和銷毀不需要消耗太多的資源,意味著可以在程序中經常創建和銷毀session 的對象;重量級意味不能隨意的創建和銷毀它的實例,會占用很多的資源。

    116、數據庫的連接字符串?【基礎】 答:MS SQL Server

    //第二種連接方式
    Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).
    newInstance();
    conn = DriverManager.getConnection(“jdbc:Microsoft:sqlserver
    ://localhost:1433;DatabaseName=pubs”,”sa”,””);
    //Oracle
    Class.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();
    conn = DriverManager.getConnection(“jdbc:oracle:thin:
    @localhost:1521:sid”, uid, pwd);
    //Mysql
    Class.forName(“org.git.mm.mysql.Driver”).newInstance();
    conn = DriverManager.getConnection(“jdbc:mysql
    ://localhost:3306/pubs”,”root”,””);
    處理中文的問題:
    jdbc:mysql://localhost:3306/pubs?useUnicode=true
    &characterEncoding=GB2312
    復制

    117、事務處理?【基礎】 答:Connection 類中提供了3 個事務處理方法:setAutoCommit(Boolean autoCommit):設置是否自動提交事務,默認為自動提交事務,即為true,通過設置false 禁止自動提交事務;commit():提交事務;rollback():回滾事務。

    public void testJdbc(){
            Connection con = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try{
                //step1:注冊驅動;
                Class.forName("oracle.jdbc.driver.OracleDriver");
                //step 2:獲取數據庫連接;
                con= DriverManager.getConnection(
                        "jdbc:oracle:thin:@192.168.0.39:1521:TARENADB",
                        "sd0605","sd0605");
            /************************查詢************************/
                //step 3:創建Statement;
                String sql = "SELECT id, fname, lname, age, FROM
                Person_Tbl";
                ps = con.prepareStatement(sql);
                //step 4 :執行查詢語句,獲取結果集;
                rs = ps.executeQuery();
                //step 5:處理結果集—輸出結果集中保存的查詢結果;
                while (rs.next()){
                    System.out.print("id = " + rs.getLong("id"));
                    System.out.print(" , fname = " +
                                    第35 頁共59 頁
                            rs.getString("fname"));
                    System.out.print(" , lname = " +
                            rs.getString("lname"));
                    System.out.print(" , age = " + rs.getInt("age"));
                }
                /************************JDBC 修改*********************/
                sql = "UPDATE Person_Tbl SET age=23 WHERE id = ?";
                ps = con.prepareStatement(sql);
                ps.setLong(1, 88);
                int rows = ps.executeUpdate();
                System.out.println(rows + " rows affected.");
            } catch (Exception e){
                e.printStackTrace();
            } finally{
                try{
                    con.close(); //關閉數據庫連接,以釋放資源。
                } catch (Exception e1) {
                }
            }
        }
    復制

    118、Java 中訪問數據庫的步驟?Statement 和PreparedStatement 之間的區別?【基礎】 答:Java 中訪問數據庫的步驟如下: 1)注冊驅動; 2)建立連接; 3)創建Statement; 4)執行sql 語句; 5)處理結果集(若sql 語句為查詢語句); 6)關閉連接。 PreparedStatement 被創建時即指定了SQL 語句,通常用于執行多次結構相同的SQL 語句。

    119、用你熟悉的語言寫一個連接ORACLE 數據庫的程序,能夠完成修改和查詢工作!净A】 答:JDBC 示例程序如下:

    120、JDBC,Hibernate 分頁怎樣實現?【中等難度】 答:方法分別為:

    1. Hibernate 的分頁:
    Query query = session.createQuery("from Student");
    query.setFirstResult(firstResult);//設置每頁開始的記錄號
    query.setMaxResults(resultNumber);//設置每頁顯示的記錄數
    Collection students = query.list();
    復制
    1. JDBC 的分頁:根據不同的數據庫采用不同的sql 分頁語句 例如: Oracle 中的sql 語句為: “SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10” 查詢從記錄號2 到記錄號10 之間的所有記錄

    121、在ORACLE 大數據量下的分頁解決方法。一般用截取ID 方法,還有是三層嵌套方法!局械入y度】 答:一種分頁方法

    <%
    int i=1;
    int numPages=14;
    String pages = request.getParameter("page") ;
    int currentPage = 1;
    currentPage = (pages==null)?(1):{Integer.parseInt(pages)}
    sql = "select count(*) from tables";
    ResultSet rs = DBLink.executeQuery(sql) ;
    while(rs.next()) i = rs.getInt(1) ;
    int intPageCount=1;
    intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);
    int nextPage ;
    int upPage;
    nextPage = currentPage+1;
    if (nextPage>=intPageCount) nextPage=intPageCount;
    upPage = currentPage-1;
    if (upPage<=1) upPage=1;
    rs.close();
    sql="select * from tables";
    rs=DBLink.executeQuery(sql);
    i=0;
    while((i<numPages*(currentPage-1))&&rs.next()){i++;}
    %>
    //輸出內容
    //輸出翻頁連接
    合計:<%=currentPage%>/<%=intPageCount%>頁
    <a href="List.jsp?page=1">第一頁</a>
    <a href="List.jsp?page=<%=upPage%>">上一頁</a>
    <%
    for(int j=1;j<=intPageCount;j++){
    if(currentPage!=j){
    %>
    <a href="list.jsp?page=<%=j%>">[<%=j%>]</a>
    <%
    }else{
    out.println(j);
    }
    }
    %>
    <a href="List.jsp?page=<%=nextPage%>">下一頁</a>
    <a href="List.jsp?page=<%=intPageCount%>">最后頁</a>
    復制
    關聯標簽:
    快三群