Java面試題總結之JDBC 和Hibernate

 

1100 用戶同時來訪數據庫,要採起什麼技術?java

答:採用數據庫鏈接池。mysql

2、什麼是ORMsql

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

3Hibernate 有哪5 個核心接口?緩存

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

4、關於hibernate: session

1)在hibernate 中,在配置文件中一對多,多對多的標籤是什麼;oracle

2)Hibernate 的二級緩存是什麼;app

3)Hibernate 是如何處理事務的;sqlserver

答:1)一對多的標籤爲<one-to-many> ;多對多的標籤爲<many-to-many>;

2)sessionFactory 的緩存爲hibernate 的二級緩存;

3)Hibernate 的事務其實是底層的JDBC Transaction 的封裝或者是JTA

Transaction 的封裝;默認狀況下使用JDBCTransaction。

5Hibernate 的應用(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();

 

6、什麼是重量級?什麼是輕量級?

答:輕量級是指它的建立和銷燬不須要消耗太多的資源,意味着能夠在程序中常常建立和銷燬session 的對象;重量級意味不能隨意的建立和銷燬它的實例,會佔用不少的資源。

7、數據庫的鏈接字符串?

答:

 

// MS SQL Server

Class.forName(「com.microsoft.sqlserver.jdbc.SQLServerDriver」).

newInstance();

conn = DriverManager.getConnection(「jdbc: 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(「com.mysql.jdbc.Driver」).newInstance();

conn = DriverManager.getConnection(「jdbc:mysql

://localhost:3306/pubs」,」root」,」」);

處理中文的問題:

jdbc:mysql://localhost:3306/pubs?useUnicode=true

&characterEncoding=UTF-8

 

8、事務處理?

答:Connection 類中提供了3 個事務處理方法:setAutoCommit(Boolean autoCommit):設置是否自動提交事務,默認爲自動提交事務,即爲true,經過設置false 禁止自動提交事務;commit():提交事務;rollback():回滾事務。

9Java 中訪問數據庫的步驟?Statement PreparedStatement 之間的區別?

答:Java 中訪問數據庫的步驟以下:

1)註冊驅動;

2)創建鏈接;

3)建立Statement;

4)執行sql 語句;

5)處理結果集(若sql 語句爲查詢語句);

6)關閉鏈接。

PreparedStatement 被建立時即指定了SQL 語句,一般用於執行屢次結構相同的SQL 語句。

10、用你熟悉的語言寫一個鏈接ORACLE 數據庫的程序,可以完成修改和查詢工做。

答:JDBC 示例程序以下:

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) {

}

}

}

 

 

相關文章
相關標籤/搜索