Java面试题总结之JDBC 和Hibernate

640?wx_fmt=gif 点击“蓝字”关注我们

640?wx_fmt=png

全文字数:   1202

阅读时间:   4 分钟

640?wx_fmt=png 640?wx_fmt=jpeg
 
 

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)一对多的标签为<one-to-many> ;多对多的标签为<many-to-many>;

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


640?wx_fmt=jpeg

解锁更多精彩内容

640?wx_fmt=jpeg

AlbertYang公众号

微信号 : hntkyxy

CSDN博客:AlbertYang666

微博:AlbertYang666

知乎:AlbertYang

博客园:AlbertYang666


640?wx_fmt=gif 欢我们的内容就点“在看”分享给小伙伴哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值