对JDBC的使用理解
JDBC,即Java连接数据库,是java针对数据库操作的一套API,使用JDBC对数据库进行操作时分为以下几步:
1.加载数据库驱动类
Class.forName("com.mysql.jdbc.Driver");
2.获取数据库连接
要能连接到数据库,就需要知道数据库的用户名 user,密码 password,以及url,url定义了连接数据库时的协议,子协议,数据库来源信息,mysql的url链接一般为:
jdbc:mysql://localhost:3306/test?userUnicode=true&characterEncoding=gbk; 这里,jdbc就是链接数据库的协议,mysql为子协议,后面为数据库的地址以及相应的数据库。
知道以上信息后就可以连接到一个数据库了,使用DriverManager的getConnection(String url,String user,String password) 可获取Connection对象,该对象代表一个数据库的链接,通过该链接,可以向数据库发送及执行sql语句。
3.定义sql语句;
4.创建发送及执行sql语句的对象
这里JDBC提供了三个类,用于向数据库发送及执行sql语句,分别为 Statement,PreparedStatement,CallableStatement。
a. Statement:用于发送及执行简单的sql语句,也就是执行静态的sql语句(相应参数在sql语句里写死的,没有使用占位符),获取方式:Statement sta=con.creatStatement();
b. PreparedStatement:执行动态的sql语句,能够对sql语句进行预编译,获取方式为:PreparedStatement pre=con.preparedStatement(sql);,所谓预编译,就是在获取PreparedStatement对象的时候就已经将sql语句发送到数据库完成了预编译,只不过这个时候的sql语句中要传入的相应参数是使用占位符?来表示的。在后面执行sql语句的时候会将相应参数设置好传进来直接执行,由于是提前已经编译好了,这条预编译的sql语句能够在将来的查询中重用,所以如果是对同一语句的重复操作,这种方式sql的执行效率要比Statement的高一些,由于PreparedStatement第一次执行的消耗是很高的,它的性能是体现在后面的重复执行的。比如,要使用PreparedStatement的方式执行一条记录的查询时,JDBC驱动会发送一个网络请求到数据库预编译这个查询,在具体执行查询语句的时候又会发送一次执行的请求,前后一共是进行了两次网络请求。而Statement由于不会发送预编译的请求,只是在执行sql语句的时候发送一次请求,只会产生一次网络请求。所以,对于执行一次的sql语句使用Statement的方式,对于一条sql语句需要多次执行,使用PreparedStatement.
同时,使用PreparedStatement还能防sql注入,为什么呢?接下来我们分析
使用Statement时,sql语句是把直接拼装而成的String字符串发送到数据库进行执行,如:String sql="select * from table where name= '" +varname +"'" and password='" + varpassword+"'"; 如果此时,如果有人把“ ;drop table tablename ”作为varpassword传进来,则:sql语句就变成了:"select * from table where name= '" +varname +"'" and password='" + varpassword+"'";drop table tablename;,这样有可能就会成功执行,导致数据库被删除。
但如果使用PreparedStatement时,上面的sql语句就可以写成:String sql="select * from table where name= ?and password=?;此时参数就是使用占位符?来表示的,这条语句在PreparedStatement pre=con.preparedStatement(sql)时会提前被预编译,后期再通过pre.setString(1,varname)这种方式给sql语句中传入参数时,就无法和原来的sql语句发生任何匹配的关系了,这样就能有效防止sql注入了,而如果使用普通的statement,有可能要对drop等进行过滤,无法防止sql注入。
c.CallableStatement:用来执行数据库存储过程,CallableStatement cstmt= con.prepareCall("{CALL demo(?,?)}");
5. 执行sql语句
Statement接口提供了三种执行sql语句的方法:executeQuery、executeUpdate和execute.
a. ResultSet executeQuery(String sql):用于执行数据库查询的sql语句,返回一个结果集对象。
b. int executeUpdate(String sql):用于执行insert,update或delete以及sql DDL语句。
c. execute(String sql),用于执行返回多个结果集。
6. 遍历结果集,获取查询结果。
7. 关闭JDBC对象资源。
对JDBC的使用理解的更多相关文章
- Java SE学习【三】——JDBC
最近学到了数据库与java的jdbc方面,还有个DAO模式,写一下自己的理解,后期有什么不对的再改. 一.数据库三范式的理解 记得以前上课时,也上了一学期的“数据库系统原理”,给我们上课的老师算是渣渣 ...
- Spring DAO vs Spring ORM vs Spring JDBC
Pat 的疑惑 最近关注于 Spring 提供的数据访问技术,对于 Spring 相关的这几个项目有何不同我不是太明白: Spring-DAO (http://docs.spring.io/sprin ...
- Jmeter使用入门
修改时间 修改内容 修改人 2016.3.12 创建 刘永志 2016.6.18 完成 刘永志 Jmeter简介 Jmeter的基本概念 百度百科: Apache JMeter是Apache组织开发的 ...
- 跟开涛老师学shiro -- 身份验证
身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...
- Mybatis第一篇【介绍、快速入门、工作流程】
什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- Mybatis入门看这一篇就够了
什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- Jmeter 测试工具
Jmeter的基本概念 百度百科: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可 ...
- Jmeter安装和启动和使用
一.安装配置JDK 1.下载安装jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.配置JDK环境变 ...
- 理解JDBC和JNDI
下面的英文是我找过来的,因为是英文所以不敢翻译出来误导别人,但是它描述的确实恰到好处,比所谓网上的JNDI和JDBC云云的解释要精辟很多,如果遇到不认识的单词,用有道吧~~:) The Java Na ...
随机推荐
- 49.Qt-网络编程之QTCPSocket和QTCPServer(实现简易网络调试助手)
在上章 48.QT-网络通信讲解1,我们学习了网络通信基础后,本章便来实战一篇.源码正在上传中,等下贴地址. PS:支持客户端和服务器,提供源码,并且服务器支持多客户端连入,并且可以指定与个别客户端发 ...
- java并发编程(二十五)----(JUC集合)LinkedBlockingDeque和ConcurrentLinkedDeque介绍
Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque.这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂. LinkedBlockingDeque 我们 ...
- Mysql超详解
Mysql超详解 一.命令框基本操作及连接Mysql 找到Mysql安装路径,查看版本 同时按快捷键win+R会弹出一个框,在框中输入cmd 点击确定后会出现一个黑框,这是命令框,我们的操作要在这命令 ...
- Lasso估计学习笔记(二)
先看Lasso估计学习笔记(一),这篇是续的上一篇
- 服务注册组件——Eureka高可用集群搭建
服务注册组件--Eureka高可用集群搭建 什么是Eureka? 服务注册组件:将微服务注册到Eureka中. 为什么需要服务注册? 微服务开发重点在一个"微"字,大型应用拆分成微 ...
- nginx配置ssl证书实现https加密请求详解
原文链接:http://www.studyshare.cn/software/details/1175/0 一.加密方式 1.对称加密 所谓对称加密即:客户端使用一串固定的秘钥对传输内容进行加密,服务 ...
- web 前端开发学习路线
初级 HTML 5 HTML 5 与 HTML 4 的区别 HTML 5 新增的主体结构元素 HTML 5 新增的非主体结构元素 HTML 5 表单新增元素与属性 HTML 5 表单新增元素与属性(续 ...
- linux 下 VSCODE 使用CMake编译STM32程序
项目在做什么 项目地址 本项目是为了研究MCU在linux下开发而做的 --build 存放cmake编译生成的文件 --cmake 存放cmake编译时会用到的文件,比如工具链检查.编译选项等 -- ...
- 第一章 .NET基础-1.1.学前入门
一.1.1. 概念:.NET和C# l .NET/DOTNET:一般指.Net Framework框架.一种平台,一种技术.它提供了一个稳定的运行环境:来保障我们.Net平台正常的运转. l C#(C ...
- C#之项目常用方法之静态扩展
一般项目中我们经常用到数据Json的序列化与反序列化,为了方便在需要的地方快速使用,一般建议都封装为静态扩展方法,在需要的地方可直接使用. 而目前C#项目中序列化一般都是用的 Newtonsoft.J ...