2017 Java开发面试题-数据库篇(1)

1、存储过程

--创建
CREATE PROCEDURE pro_name(IN inputName inputType, OUT outputName outputType)
BEGIN
--sql statement...
SELECT ** INTO outputName FROM ** WHERE **
SET outputName = newValue;
END

--调用
set @inputName=value1;
set @outputName=value2;
CALL pro_name(@inputName,@outputName);

--删除
DROP PROCEDURE pro_name;

参数类型:
IN:输入参数
OUT:输出参数
INOUT:既可以输入/输出

2、触发器

CREATE TRIGGER AFTER INSERT/UPDATE/DELETE ON table1 FOR EACH ROW
INSERT INTO tables(...) VALUES(...);

3、数据库三范式

1NF:
字段原子性,不可再分
所有关系型数据库都满足1NF

2NF:
1NF+数据库表中每个实例or行必须可以唯一的被区分
一般通过加上主键实现

3NF:
1NF+2NF+数据库表不包含已在其他表中已包含的非主关键字信息

4、数据库优化经验

1、PrepareStatement性能一般比Statement高
一个sql发给服务器执行,涉及步骤:
语法检查-》语义分析-》编译-》缓存
或:sql-》发给oracle服务器-》语法检查和编译成内部指令-》缓存和执行指令
2、有外键约束会影响
如果能够保证数据的完整性,那在设计数据库时需要去掉外键
3、sql语句优化
4、建立索引
索引一般用B-Tree实现
http://blog.csdn.net/weiliangliang111/article/details/51333169
如果没有索引的话,查询内容一般需要全表遍历,效率低

5、UNION vs UNION ALL

他们用于连接连个结果集
union all保留重复结果
union链接好结果集后,会排序,删除出重复记录
所以union all比union快

6、JDBC注册驱动程序的三种方式

http://blog.csdn.net/b1198103958/article/details/46053509


Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动  

String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议  
Connection conn=DriverManager.getConnection(url,"username","password"); 
能够在编译时不依赖于特定的JDBC Driver库
也易于改造成从配置文件读取JDBC配置,可以在运行时动态更换数据库连接驱动

System.setProperty("jdbc.driver", "com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议  
Connection conn=DriverManager.getConnection(url,"username","password"); 
可以同时导入多个驱动:
System.setProperty("jdbc.drivers","XXXDriver:XXXDriver:XXXDriver");

new com.mysql.jdbc.Driver();//创建driver对象,加载数据库驱动  
String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议  
Connection conn=DriverManager.getConnection(url,"username","password");  
它必须要有jdbc驱动才可以通过编译

7、Class.forName 的作用

程序按照参数中指定的字符串形式的类名去搜索并加载相应的类
若其字节码已经加载,则返回代表该字节码的Class对象
否则,按照类加载器的委托机制去搜索和加载
若无法加载,抛出异常ClassNotFoundException
加载完字节码后,就可以用Class字节码的newInstance创建实例
有时,程序使用的具体类名设计时无法确定,只能在运行时确定,则就需Class.forName动态加载
此类名多为配置文件中配置的eg:
1、spring ioc每次依赖注入的具体类
2、jdbc驱动类名,以便产品交付后不用改源程序就可以改驱动类

8、数据连接池的工作机制

http://www.cnblogs.com/newpanderking/p/3875749.html
对于共享资源的著名设计模式:资源池
是为了解决资源频繁分配、释放造成的问题

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于次树木的连接
当有新的连接请求,池池驱动程序返回空闲连接
若无空闲连接,根据配置的参数,新建一定数量的连接

Connection是原始COnnection的代理,代理Connection的close不是真的关连接
而是把他代理的Connection对象还给连接池

通过连接池的管理机制可以监控连接使用情况,为系统开发、测试、性能调整提供参考

优点:
1、资源复用
2、减少连接时间,响应快
3、简化的编程模式

猜你喜欢

转载自blog.csdn.net/iyangdi/article/details/77938227