6一、jdbc的操做步骤java
加载驱动:Class.forName("oracle.jdbc.driver.OracleDriver");面试
建立链接:Connection con =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");正则表达式
建立查询语句:PreparedStatement ps = con.prepareStatement("select * from emp where sal between ? and ?");数据库
ps.setInt(1, 1000);缓存
ps.setInt(2, 3000);安全
执行语句:ResultSet rs = ps.executeQuery();并发
处理结果:while(rs.next()) {oracle
System.out.println(rs.getInt("empno") + " - " + rs.getString("ename"));}工具
关闭资源:finally { if(con != null){性能
try { con.close();
} catch (SQLException e) {
e.printStackTrace(); } } }
6二、Statement和PreparedStatement有什么区别?哪一个性能更好?
与Statement相比,①PreparedStatement接口表明预编译的语句,它主要的优点在于能够减小SQL的编译错误并增长SQL的安全性(减小SQL注射攻击的可能性);②PreparedStatement中的SQL语句是能够带参数的,避免了用字符串链接拼接SQL语句的麻烦和不安全;③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优点,因为数据库能够将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。
6三、使用JDBC操做数据库时,如何提高读取数据的性能?如何提高更新数据的性能?
要提高读取数据的性能,能够指定经过结果集(ResultSet)对象的setFetchSize()方法指定每次抓取的记录数(典型的空间换时间策略);要提高更新数据的性能可使用PreparedStatement语句构建批处理,将若干SQL语句置于一个批处理中执行。
6四、dao模式
一个为数据库或其余持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各类数据访问操做。
6五、事务的ACID是指什么
原子性(Atomic):事务中各项操做,要么全作要么全不作,任何一项操做的失败都会致使整个事务的失败;
一致性(Consistent):事务结束后系统状态是一致的;
隔离性(Isolated):并发执行的事务彼此没法看到对方的中间状态;
持久性(Durable):事务完成后所作的改动都会被持久化,即便发生灾难性的失败。经过日志和同步备份能够在故障发生后重建数据。
补充:关于事务,在面试中被问到的几率是很高的,能够问的问题也是不少的。首先须要知道的是,只有存在并发数据访问时才须要事务。当多个事务访问同一数据时,可能会存在5类问题,包括3类数据读取问题(脏读、不可重复读和幻读)和2类数据更新问题(第1类丢失更新和第2类丢失更新)。
脏读(Dirty Read):A事务读取B事务还没有提交的数据并在此基础上操做,而B事务执行回滚,那么A读取到的数据就是脏数据。
不可重复读(Unrepeatable Read):事务A从新读取前面读取过的数据,发现该数据已经被另外一个已提交的事务B修改过了。
幻读(Phantom Read):事务A从新执行一个查询,返回一系列符合查询条件的行,发现其中插入了被事务B提交的行。
第1类丢失更新:事务A撤销时,把已经提交的事务B的更新数据覆盖了。
第2类丢失更新:事务A覆盖事务B已经提交的数据,形成事务B所作的操做丢失。
数据库一般会经过锁机制来解决数据并发访问问题,按锁定对象不一样能够分为表级锁和行级锁;按并发事务锁定关系能够分为共享锁和独占锁。
6六、JDBC中如何进行事务处理
Connection提供了事务处理的方法,经过调用setAutoCommit(false)能够设置手动提交事务;当事务完成后用commit()显式提交事务;若是在事务处理过程当中发生异常则经过rollback()进行事务回滚。除此以外,从JDBC 3.0中还引入了Savepoint(保存点)的概念,容许经过代码设置保存点并让事务的保存点
6七、JDBC可否处理Blob和Clob
能,Blob是指二进制大对象(Binary Large Object),而Clob是指大字符对象(Character Large Objec),JDBC的PreparedStatement和ResultSet都提供了相应的方法来支持Blob和Clob操做
6八、简述正则表达式及其用途
编写处理字符串的程序时,常常会有查找符合某些复杂规则的字符串的须要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码
6九、Java中是如何支持正则表达式操做的
String类有支持正则表达式操做的方法,attern类表示正则表达式对象,它提供了丰富的API进行各类正则表达式操做
70、反射的3种方法获取类对象
方法1:类型.class,例如:String.class;方法2:对象.getClass(),例如:”hello”.getClass();方法3:Class.forName(),例如:Class.forName(“java.lang.String”)