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

}

}

}

 

 

相关文章
相关标签/搜索