Java面試題總結之JDBC 和Hibernate
全文字數: 1202
閱讀時間: 大約4 分鐘
1、100 用戶同時來訪數據庫,要采取什么技術?
答:采用數據庫連接池。
2、什么是ORM?
答:對象關系映射(Object—Relational Mapping,簡稱ORM)是一種為了解決面向對象與面向關系數據庫存在的互不匹配的現象的技術;簡單的說,ORM 是通過使用描述對象和數據庫之間映射的元數據,將java 程序中的對象自動持久化到關系數據庫中;本質上就是將數據從一種形式轉換到另外一種形式。
3、Hibernate 有哪5 個核心接口?
答:Configuration 接口:配置Hibernate,根據其啟動hibernate,創建SessionFactory 對象;SessionFactory 接口:初始化Hibernate,充當數據存儲源的代理,創建session 對象,sessionFactory 是線程安全的,意味著它的同一個實例可以被應用的多個線程共享,是重量級、二級緩存;Session 接口:負責保存、更新、刪除、加載和查詢對象,是線程不安全的,避免多個線程共享同一個session,是輕量級、一級緩存;Transaction 接口:管理事務;Query 和Criteria 接口:執行數據庫的查詢。
4、關于hibernate:
1)在hibernate 中,在配置文件中一對多,多對多的標簽是什么;
2)Hibernate 的二級緩存是什么;
3)Hibernate 是如何處理事務的;
答:1)一對多的標簽為
2)sessionFactory 的緩存為hibernate 的二級緩存;
3)Hibernate 的事務實際上是底層的JDBC Transaction 的封裝或者是JTA
Transaction 的封裝;默認情況下使用JDBCTransaction。
5、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();
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():回滾事務。
9、Java 中訪問數據庫的步驟?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) {
}
}
}
Java JDBC
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。