經(jīng)典筆試題-JDBC及Hibernate篇

小編:管理員 2301閱讀 2022.10.22

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

110、數據庫,比如100 用戶(hù)同時(shí)來(lái)訪(fǎng),要采取什么技術(shù)解決?【基礎】 答:可采用連接池。

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

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

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

  1. 一對多的標簽為 ;多對多的標簽為;
  2. sessionFactory 的緩存為hibernate 的二級緩存;
  3. Hibernate 的事務(wù)實(shí)際上是底層的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();
//執行相關(guān)的數據庫操作:增,刪,改,查
session.save(user); //增加, user 是User 類(lèi)的對象
session.delete(user); //刪除
session.update(user); //更新
Query query = session.createQuery(“from User”); //查詢(xún)
List list = query.list();
//提交事務(wù)
tx.commit();
//如果有異常,我們還要作事務(wù)的回滾,恢復到操作之前
tx.rollback();
//最后還要關(guān)閉session,釋放資源
session.close();
復制

115、什么是重量級?什么是輕量級?【基礎】 答:輕量級是指它的創(chuàng )建和銷(xiāo)毀不需要消耗太多的資源,意味著(zhù)可以在程序中經(jīng)常創(chuàng )建和銷(xiāo)毀session 的對象;重量級意味不能隨意的創(chuàng )建和銷(xiāo)毀它的實(shí)例,會(huì )占用很多的資源。

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”,””);
處理中文的問(wèn)題:
jdbc:mysql://localhost:3306/pubs?useUnicode=true
&characterEncoding=GB2312
復制

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

public void testJdbc(){
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            //step1:注冊驅動(dòng);
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //step 2:獲取數據庫連接;
            con= DriverManager.getConnection(
                    "jdbc:oracle:thin:@192.168.0.39:1521:TARENADB",
                    "sd0605","sd0605");
        /************************查詢(xún)************************/
            //step 3:創(chuàng  )建Statement;
            String sql = "SELECT id, fname, lname, age, FROM
            Person_Tbl";
            ps = con.prepareStatement(sql);
            //step 4 :執行查詢(xún)語(yǔ)句,獲取結果集;
            rs = ps.executeQuery();
            //step 5:處理結果集—輸出結果集中保存的查詢(xún)結果;
            while (rs.next()){
                System.out.print("id = " + rs.getLong("id"));
                System.out.print(" , fname = " +
                                第35 頁(yè)共59 頁(yè)
                        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(); //關(guān)閉數據庫連接,以釋放資源。
            } catch (Exception e1) {
            }
        }
    }
復制

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

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

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

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

121、在ORACLE 大數據量下的分頁(yè)解決方法。一般用截取ID 方法,還有是三層嵌套方法!局械入y度】 答:一種分頁(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
//輸出內容
//輸出翻頁(yè)連接
合計:<%=currentPage%>/<%=intPageCount%>頁(yè)
第一頁(yè)
上一頁(yè)
<%
for(int j=1;j<=intPageCount;j++){
if(currentPage!=j){
%>
[<%=j%>]
<%
}else{
out.println(j);
}
}
%>
下一頁(yè)
最后頁(yè)
復制
關(guān)聯(lián)標簽:
91久久香蕉国产线看观看软件|思思热在线视频精品996|精品无码一区二区三区水蜜桃|久久综合无码中文字幕无码|午夜亚洲AⅤ无码高潮片在线