java编程面试数据库基础部分

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

给你java学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

2.3.1 数据库的分类及常用的数据库

数据库分为:关系型数据库和非关系型数据库

关系数据库:mysql,oracle,sqlServer

非关系型:redis,mongoDB

2.3.2 简单介绍一下关系数据库三范式

范式就是规范,就是关系型数据库在设置表时,要遵循的三个规范。

要满足第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式。

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体列中的某个属性不能有多个值或者不能有重复的属性,列数据的不可分割。

二范式(2NF)要求数据库表中的每个行必须可以被唯一的区分,为实现区分通常需要为表加上一列,以存储各个实例的唯一标识。(主键)

满足第三范式(3NF)必须先满足第二范式,简而言之,第三范式要求一个数据库表中不包含已在其他表中已包含的非关键字信息。(外键)

反三范式,有的时候为了效率,可以设置重复或者可以推导的字段,订单(总价)和订单项(单价)

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

2.3.3 事务的四个基本特征

事物是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。

一个转账必须A帐号扣钱成功,B帐号加钱成功,才算真正的转账成功。

事务必须满足四大特征:

原子性:表示事务内操作不可分割,要么成功,要么都失败

一致性:要么成功,要么失败,后面的失败了要对前面的操作进行回滚

隔离性:一个事务开始后,不能与其他事务干扰

持久性(持续性):表示事务开始了,就不能终止。

2.3.4 mysql数据库的默认的最大连接数?

为什么需要最大连接数?特定服务器上面的数据库只能支持一定数目同时连接,这时候需要我们设置最大连接数(最多同时服务多少连接),在数据库安装时都会有一个默认的最大连接数。最大连接数为100.

max_connections=100;


2.3.5 说一下mysql的分页?Oracle的分页?

为什么需要分页?在很多数据库时,不可能完全显示数据,进行分段显示。

mysql是使用关键字limit 来进行分页的,limit offset,size 表示从多少索引取多少位。

Oracle的分页。大部分情况下,我们是记不住了,说思路,要使用三层嵌套查询

oracle的分页优点记不住了,只记得一些大概,是使用类三层嵌套查询,如果在工作中使用了,可以到原来的项目中拷贝或上网查询。

2.3.6 简单讲一下数据库的触发器的使用场景

触发器,需要触发条件,当条件满足以后做什么操作。

触发器用处还是很多的,比如校内网、Facebook,你发一个日志,自动通知好友,其实就是在增加日志做一个后触发,再向通知表中写入条目,因为触发效率高,而UCH没有用触发器,效率和数据处理能力很低。

每插入一个帖子,都希望将版面表中的最后发帖时间,帖子数字段进行同步更新,用触发器做效率更高。

关键字:trigger

2.3.7 简单讲一下数据库的存储过程的使用场景?

数据库存储过程具有如下优点:

1)存储过程只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句每执行一次就编译一次,因此使用存储过程可以大大提高数据执行数度,

2)通常,复杂的业务逻辑需要多条SQL语句,这些语句要分别地从客户端发送到服务器,当客户端和服务器之间的操作很多时,将产生大量的网络传输,如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低类网络负载,

3)存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量,

4)安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用exectu权限调用存储过程,无需拥有访问底层数据库对象的显示权限。

定义存储过程:

create procedure studen(name varchar(50),age int,id in);

begin

insert into student values('lisi',22,1);

select name,age from student;

end;

调用存储过程

call student();

select

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

2.3.8 用jdbc怎么调用存储过程?

加载驱动

获取连接

设置参数

执行

释放连接

public static void main(String[]args) {

Connection conn = null;

CallableStatement st = null;

try {

//这里最好不要这么干,因为驱动名写死在程序中了

Class.forName("com.mysql.jdbc.Driver");

//实际项目中,这里应用DataSource数据,如果用框架

//这个数据源不需要我们编码创建,我们只需DataSourceds=context.lookup();

//conn = ds.getConnection();

conn = DriverManager.getConnection("jdbc:mysql:///test","root","root");

st = conn.prepareCall("{call insert_Student(?,?,?)}");

st.registerOutParameter(3, Types.INTEGER);

st.setString(1, "laowang");

st.setInt(2, 25);

st.execute();

//get第几个,不同的数据库不一样,建议不写

System.out.println(st.getString(3));

catch(Exception e){

e.printStackTrace();

}

}

2.3.9 常用的SQL

2.3.10 简单说一下你对jdbc的理解

Java database connection java数据库连接,数据库关系系统(mysql,oracle)是很多,每个数据库管理系统支持的命令是不一样的,

java只定义接口,让数据库厂商自己实现接口,对于我们而言只需要导入对应厂商开发的实现接口,然后以接口方式进行调用(mysql+mysql驱动+jdbc)

2.3.11 写一个简单的jdbc的程序,写一个访问oracle数据库的jdbc程序?

加载驱动(oracle.jdbc.driver.OracleDriver)

获取连接(DriverManager.getConnection(url, user, password))

设置参数

Statement st = conn.createStatement();

st.setXXX(index,value)

执行(execute)

释放连接(是否连接要从小到大,必须放到finally)

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

2.3.12 JDBC中的PreparedStatement相比Statement的好处

大多数时候都使用PreparedStatement代替

1)PreparedStatement是预编译的,比Statement速度快

2)代码的可读性和可维护性

虽然PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说,都比直接用Statement的代码高很多档次。

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.setString(4,var4);

perstmt.executeUpdate();

不用我多说,对于第一种方法.别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心.

3)安全性

PreparedStatement可以防止SQL注入攻击,而Statement却不能,比如:

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?

select * from tb_name = '随意' and passwd = '' or '1' = '1';

因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:

把[';drop table tb_name;]作为varpasswd传入进来,则:

select * from tb_name = '随意' and passwd = '';drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.

而 如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.(前提是数据库本身支持预编译,但上前可能没有什么服务端数据库不支持编 译了,只有少数的桌面数据库,就是直接文件访问的那些)只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement, 有可能要对drop,;等做费尽心机的判断和过虑.

2.3.13 数据库连接池的作用

1)限定数据库的个数,不会导致由于数据库过多导致系统运行缓慢或者崩溃。

2)数据库连接池不需要每次创建或者销毁,节约资源。

3)数据库连接池不需要每次创建,响应时间快。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,785评论 0 11
  • 本人的环境为Myeclipse10、MySQL5.7.15 本文包括:简介JDBC编程步骤打通数据库程序详解—Dr...
    廖少少阅读 3,923评论 7 39
  • 也是间濑直方的绘本,讲述了圣诞节一家人坐巴士出去玩的情景。画风清新细腻不说,还有好多和主线故事无关的小细节,笑宝会...
    冰清beulah阅读 462评论 0 2
  • 今天是第2天用简书记录我和她的故事。 春节这几天联系她的时候,她和她爸妈、弟弟一家人在惠州过年。今...
    oksi阅读 223评论 0 2