撩课Java+系统架构点击开始学习

96.JDBC操作数据库的步骤 ?

、加载数据库驱动
、创建并获取数据库链接
、创建jdbc statement对象
、设置sql语句
、设置sql语句中的参数(使用preparedStatement)
、通过statement执行sql并获取结果
、对sql执行结果进行解析处理
、释放资源(resultSet、preparedstatement、connection)

97.JDBC中的Statement 和PreparedStatement的区别?

Java提供了
Statement、
PreparedStatement
CallableStatement
三种方式来执行查询语句,
其中 Statement 用于通用查询,
PreparedStatement 用于执行参数化查询,
而 CallableStatement则是用于存储过程。 关于PreparedStatement接口,
需要重点记住的是:
. PreparedStatement可以写参数化查询,
比Statement能获得更好的性能。 . 对于PreparedStatement来说,
数据库可以使用已经编译过
及定义好的执行计划,
这种预处理语句查询
比普通的查询运行速度更快。 . PreparedStatement可以阻止常见的
SQL注入式攻击。 . PreparedStatement可以写动态查询语句 . PreparedStatement与
java.sql.Connection对象是关联的,
一旦你关闭了connection,
PreparedStatement也没法使用了。 . “?” 叫做占位符。 . PreparedStatement查询
默认返回FORWARD_ONLY的ResultSet,
你只能往一个方向移动结果集的游标。
当然你还可以设定为其他类型的
值如:”CONCUR_READ_ONLY”。
. 不支持预编译SQL查询的JDBC驱动,
在调用connection.prepareStatement(sql)的时候,
它不会把SQL查询语句发送给数据库做预处理,
而是等到执行查询动作的时候
调用executeQuery()方法时
才把查询语句发送个数据库,
这种情况和使用Statement是一样的。 . 占位符的索引位置从1开始而不是0,
如果填入0会导致
java.sql.SQLException invalid column index异常。
所以如果PreparedStatement有两个占位符,
那么第一个参数的索引时1,
第二个参数的索引是2.

98.说说数据库连接池工作原理和实现方案?

一般来说,Java应用程序访问数据库的过程是:
.装载数据库驱动程序;
.通过jdbc建立数据库连接;
.访问数据库,执行sql语句;
.断开数据库连接。 程序开发过程中,存在很多问题: 首先,
每一次web请求都要建立一次数据库连接。
建立连接是一个费时的活动,
每次都得花费0.05s~1s的时间,
而且系统还要分配内存资源。
这个时间对于一次或几次数据库操作,
或许感觉不出系统有多大的开销。 可是对于现在的web应用,
尤其是大型电子商务网站,
同时有几百人甚至几千人在线是很正常的事。
在这种情况下,
频繁的进行数据库连接操作
势必占用很多的系统资源,
网站的响应速度必定下降,
严重的甚至会造成服务器的崩溃。
其次,对于每一次数据库连接,
使用完后都得断开。
否则,如果程序出现异常而未能关闭,
将会导致数据库系统中的内存泄漏,
最终将不得不重启数据库 “数据库连接”是一种稀缺的资源,
为了保障网站的正常使用,
应该对其进行妥善管理。
其实我们查询完数据库后,
如果不关闭连接,
而是暂时存放起来,
当别人使用时,
把这个连接给他们使用。
就避免了一次建立数据库
连接和断开的操作时间消耗。 数据库连接池的基本思想:
就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,
当需要建立数据库连接时,
只需从“缓冲池”中取出一个,
使用完毕之后再放回去。
我们可以通过设定连接池最大连接数
来防止系统无尽的与数据库连接

99.execute,executeQuery,executeUpdate的区别是什么?

在jdbc中有3种执行sql的语句分别是
execute,
executeQuery
executeUpdate ResultSet executeQuery(String sql);
执行SQL查询,并返回ResultSet 对象。 方法executeQuery
用于产生单个结果集(ResultSet)的语句,
例如 SELECT 语句。
被使用最多的执行 SQL 语句的方法。
这个方法被用来执行 SELECT 语句,
它几乎是使用最多的 SQL 语句。
但也只能执行查询语句,
执行后返回代表查询结果的ResultSet对象。 .int executeUpdate(String sql);
可执行增,删,改,
返回执行受到影响的行数。 方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句
以及 SQL DDL(数据定义语言)语句,
例如 CREATE TABLE 和 DROP TABLE。
INSERT、UPDATE 或 DELETE 语句的效果
是修改表中零行或多行中的一列或多列。
executeUpdate 的返回值是一个整数(int),
指示受影响的行数(即更新计数)。
对于 CREATE TABLE 或 DROP TABLE 等
不操作行的语句,
executeUpdate 的返回值总为零。 .boolean execute(String sql);
可执行任何SQL语句,
返回一个布尔值,
表示是否返回ResultSet 。 可用于执行任何SQL语句,
返回一个boolean值,
表明执行该SQL语句是否返回了ResultSet。
如果执行后第一个结果是ResultSet,
则返回true,否则返回false。
但它执行SQL语句时比较麻烦,
通常我们没有必要使用execute方法
来执行SQL语句,
而是使用executeQuery或executeUpdate更适合,
但如果在不清楚SQL语句的类型时
则只能使用execute方法
来执行该SQL语句了。

100.Statement中的setFetchSize和setMaxRows方法有什么用处

setMaxRows可以用来限制返回的数据集的行数。
当然通过SQL语句也可以实现这个功能。
比如在MySQL中我们可以用
LIMIT条件来设置返回结果的最大行数。 setFetchSize理解起来就有点费劲了,
因为你得知道Statement
和ResultSet是怎么工作的。
当数据库在执行一条查询语句时,
查询到的数据是在数据库的缓存中维护的。
ResultSet其实引用的是数据库中缓存的结果。 假设我们有一条查询返回了100行数据,
我们把fetchSize设置成了10,
那么数据库驱动每次只会取10条数据,
也就是说得取10次。
当每条数据需要处理的时间比较长的时候
并且返回数据又非常多的时候,
这个可选的参数就变得非常有用了。 我们可以通过Statement来
设置fetchSize参数,
不过它会被ResultSet对象
设置进来的值所覆盖掉。

撩课-Java每天5道面试题第13天的更多相关文章

  1. 撩课-Java每天5道面试题第15天

    撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...

  2. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  3. 撩课-Java每天5道面试题第9天

    撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...

  4. 撩课-Java每天5道面试题第8天

    撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...

  5. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  6. 撩课-Java每天10道面试题第4天

    撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...

  7. 撩课-Java每天5道面试题第17天

    116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...

  8. 撩课-Java每天5道面试题第24天

    151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...

  9. 撩课-Java每天5道面试题第23天

    146.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于MVC架构的 用来简化web应用程序开发的应用开发框架, 它是Spring的一个模块, 无 ...

随机推荐

  1. 2016.5.57—— Remove Duplicates from Sorted List

    Remove Duplicates from Sorted List 本题收获: 指针: 不管什么指针在定义是就初始化:ListNode *head = NULL; 如果给head指针赋值为第一个no ...

  2. 微信小程序实战--开发一个简单的快递单号查询

    功能如图: 虽然工作中只负责小程序后台开发,但是还是小程序开发产生了浓厚的兴趣,官方文档也是超级详细了 这里就简单做一个快递单号的查询: 新建一个page: 接着就可以写wxml了.这里用一个简单的i ...

  3. 80.YCrCb - YUV - RGB之间的介绍

    一,引言 YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL).YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视.与RGB视频信号传输相比,它最大的优点在于只需 ...

  4. 双机/RAC/Dataguard的区别【转】

    本文转自 双机/RAC/Dataguard的区别-jasoname-ITPUB博客 http://blog.itpub.net/22741583/viewspace-684261/ Data Guar ...

  5. ajax局部刷新后里面的jquery事件失效的解决方法

    live() 与bind()作用基本一样. 最重要区别:live()可以将事件绑定到当前和将来的元素(eg:为id=zy元素绑定点击事件,而当你用js动态生成一个节点并插入到dom文档结构中时,如果你 ...

  6. bzoj 1607 Patting Heads 轻拍牛头

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1607 题解: 题目似乎出错,应为“同时拍打所有所持纸条上的数字能被此牛所持纸条上的数字整除 ...

  7. python网络编程--事件驱动模型

    论事件驱动与异步IO 事件驱动模型:根据事件的触发去干什么事,就是根据一个事件做反应 原文:http://www.cnblogs.com/alex3714/articles/5248247.html常 ...

  8. vue系列之项目优化

    webpack中的Code Splitting Code Splitting是什么以及为什么 在以前,为了减少HTTP请求,通常地,我们会把所有的代码都打包成一个单独的JS文件,但是,如果这个文件体积 ...

  9. spotlight on mysql--安装以及简介

    Spotlight on MySQL 安装与配置 第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connecto ...

  10. Mat结构

    主要是记录一下大牛的博客,再次感谢这些无私的博主. 这篇博客http://blog.csdn.net/yang_xian521/article/details/7107786中,我觉得要注意的是Mat ...