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的使用理解的更多相关文章

  1. Java SE学习【三】——JDBC

    最近学到了数据库与java的jdbc方面,还有个DAO模式,写一下自己的理解,后期有什么不对的再改. 一.数据库三范式的理解 记得以前上课时,也上了一学期的“数据库系统原理”,给我们上课的老师算是渣渣 ...

  2. Spring DAO vs Spring ORM vs Spring JDBC

    Pat 的疑惑 最近关注于 Spring 提供的数据访问技术,对于 Spring 相关的这几个项目有何不同我不是太明白: Spring-DAO (http://docs.spring.io/sprin ...

  3. Jmeter使用入门

    修改时间 修改内容 修改人 2016.3.12 创建 刘永志 2016.6.18 完成 刘永志 Jmeter简介 Jmeter的基本概念 百度百科: Apache JMeter是Apache组织开发的 ...

  4. 跟开涛老师学shiro -- 身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  5. Mybatis第一篇【介绍、快速入门、工作流程】

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  6. Mybatis入门看这一篇就够了

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  7. Jmeter 测试工具

    Jmeter的基本概念 百度百科: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可 ...

  8. Jmeter安装和启动和使用

    一.安装配置JDK 1.下载安装jdk,地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.配置JDK环境变 ...

  9. 理解JDBC和JNDI

    下面的英文是我找过来的,因为是英文所以不敢翻译出来误导别人,但是它描述的确实恰到好处,比所谓网上的JNDI和JDBC云云的解释要精辟很多,如果遇到不认识的单词,用有道吧~~:) The Java Na ...

随机推荐

  1. 49.Qt-网络编程之QTCPSocket和QTCPServer(实现简易网络调试助手)

    在上章 48.QT-网络通信讲解1,我们学习了网络通信基础后,本章便来实战一篇.源码正在上传中,等下贴地址. PS:支持客户端和服务器,提供源码,并且服务器支持多客户端连入,并且可以指定与个别客户端发 ...

  2. java并发编程(二十五)----(JUC集合)LinkedBlockingDeque和ConcurrentLinkedDeque介绍

    Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque.这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂. LinkedBlockingDeque 我们 ...

  3. Mysql超详解

    Mysql超详解 一.命令框基本操作及连接Mysql 找到Mysql安装路径,查看版本 同时按快捷键win+R会弹出一个框,在框中输入cmd 点击确定后会出现一个黑框,这是命令框,我们的操作要在这命令 ...

  4. Lasso估计学习笔记(二)

    先看Lasso估计学习笔记(一),这篇是续的上一篇

  5. 服务注册组件——Eureka高可用集群搭建

    服务注册组件--Eureka高可用集群搭建 什么是Eureka? 服务注册组件:将微服务注册到Eureka中. 为什么需要服务注册? 微服务开发重点在一个"微"字,大型应用拆分成微 ...

  6. nginx配置ssl证书实现https加密请求详解

    原文链接:http://www.studyshare.cn/software/details/1175/0 一.加密方式 1.对称加密 所谓对称加密即:客户端使用一串固定的秘钥对传输内容进行加密,服务 ...

  7. web 前端开发学习路线

    初级 HTML 5 HTML 5 与 HTML 4 的区别 HTML 5 新增的主体结构元素 HTML 5 新增的非主体结构元素 HTML 5 表单新增元素与属性 HTML 5 表单新增元素与属性(续 ...

  8. linux 下 VSCODE 使用CMake编译STM32程序

    项目在做什么 项目地址 本项目是为了研究MCU在linux下开发而做的 --build 存放cmake编译生成的文件 --cmake 存放cmake编译时会用到的文件,比如工具链检查.编译选项等 -- ...

  9. 第一章 .NET基础-1.1.学前入门

    一.1.1. 概念:.NET和C# l .NET/DOTNET:一般指.Net Framework框架.一种平台,一种技术.它提供了一个稳定的运行环境:来保障我们.Net平台正常的运转. l C#(C ...

  10. C#之项目常用方法之静态扩展

    一般项目中我们经常用到数据Json的序列化与反序列化,为了方便在需要的地方快速使用,一般建议都封装为静态扩展方法,在需要的地方可直接使用. 而目前C#项目中序列化一般都是用的 Newtonsoft.J ...