java基础 JDBC & Statement & PreparedStatement
参考文章:
http://blog.csdn.net/wang379275614/article/details/23393335
概念
JDBC-数据库连接,是由一些类和接口构成的API,是J2SE的一部分,有java.sql、javax.sql包组成。下面看一下JDBC API与应用程序和数据库驱动及数据库之间的关系:

可以看出JDBC是Sun公司为应用程序与数据库驱动之间提供的一组接口(规范)。数据库驱动是实现数据库操作的类,它并不由sun公司来实现,而是由具体的公司来根据sun提供的规范(JDBC)来制作。
操作数据库的步骤(以mySql为例)
1. 注册驱动
常用的有3种方式:
1) 直接注册驱动:
DriverManager.registerDriver(com.mysql.jdbc.Driver);这种方式要求程序首先要引入驱动包,否则无法通过编译。而且它可能会造成DriverManager中产生两个一样的驱动,并对具体的驱动类产生依赖,所以不推荐使用。
2) 键值对方式:
System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);同时注册多个驱动则用冒号隔开。这种方式如果事先不引入驱动包的情况下能通过编译(因为操作的都为字符串,运行时肯定不行啦),所以虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用。
3) Class.forName方式(类似反射):
Class.forName(“com.mysql.jdbc.Driver”); Class.forName函数的作用是根据类的名字将类装载到虚拟机中(并未实例化);这种方式也不会对具体的驱动类产生依赖,而且使用很方便,所以推荐使用。
2. 建立连接
Connection conn=DriverManager.getConnection(url,uid,pwd);
url格式:JDBC:子协议:子名称//主机名:端口/数据库名?key=value&…
例如:jdbc:mysql://localhost:8086/jdbc;uid和pwd也可以用key=value的方式告诉数据库。
其它参数:如,userUnicode=true&characterEncoding=gbk
3. 创建执行sql语句的对象
这里有两个对象可以使用:Statement、PreparedStatement对象
一般来说有参数的sql操作都用PreparedStatement对象,因为它有防止sql注入等优点。两者的区别这里不多介绍,创建语句:(假设conn为数据库连接对象)
Statement st=conn.createStatement();
PreparedStatement ps=conn.prepareStatement(strSql);
可以看出在创建PreparedStatement对象时即需要指明要执行的sql语句,因为它会对sql语句进行预处理,例如进行一些防止sql注入的字符过滤等;而Statement则在执行sql动作时才指明sql语句。
4. 执行语句(CURD)
查询:st.executeQuery(strSql);或者ps. executeQuery();
非查询(增、删、改):st.executeUpdate(strSql);或ps.executeUpdate();
5. 处理执行结果
查询:返回值用ResultSet接收,例:ResultSet rs=st.executeQuery(strsql)
非查询(增、删、改):返回值为int
6. 释放资源
依次释放ResultSet、Statement(或PreparedStatement)、Connection对象,释放顺序与创建顺序相反(类似“栈”结构)
注意,Connection是非常稀有的资源,用完必须马上释放,它的使用原则是尽量晚的创建,尽量早的释放,以减少占用资源的时间
JDBC 访问DB的体系结构分为两类
1)2层:客户-数据库
2)3层:客户-中间层(WebLogicServer)-数据库

使用3层的JDBC体系结构访问数据,首先要安装WebLogicServer,然后在它上面配置一个连接池(Connection Pool)和一个数据源(Data Source)
浅析Statement、PreparedStatement、CallableStatement
Statement:
Statement 对象用于执行不带参数的简单 SQL 语句
Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.但存在sql注入风险
PreparedStatement:
该 PreparedStatement接口继承Statement
PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句
PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题。对于多次重复执行的语句,使用PreparedStatement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。
CallableStatement:
该CallableStatement接口继承PreparedStatement
CallableStatement 对象用于执行对数据库已存储过程的调用
java基础 JDBC & Statement & PreparedStatement的更多相关文章
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...
- JAVA基础-JDBC(一)
一.JDBC的简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,由与各种数据库都有着一套自己的规范,JAVA对其操 ...
- Java基础 JDBC
一,前言 数据库是开发中必不可少的一个工具,那么java如何操作数据库呢,那就是我们的JDBC了,接下来我们将会好好聊一下这个JDBC. 二,JDBC 2.1 JDBC概述 JDBC(Java Dat ...
- Java基础——JDBC
今天学习的内容是:JDBC 通常jdbc连接分6步: 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执行sql 语句: 5)处理结果集(若sql 语句为查询语句): 6)关闭连接. ...
- Java基础-JDBC访问数据库
基本步骤: 加载数据库驱动 建立连接 创建SQL语句 执行SQL语句 处理执行结果 释放资源 代码示例: import java.sql.Connection; import java.sql.Dri ...
- JAVA基础-JDBC二(常用的开源工具)
一.连接池 在实际的开发应用中,我们常常会对数据库进行大量的高并发的访问,而最原始的连接和操作方式并不能满足这种大量的访问,程序员为了追求更方便.更快捷.更科学安全的开发.第三方的工具类和Dao层的框 ...
- java基础-jdbc——三种方式加载驱动建立连接
String url = "jdbc:mysql://localhost:3306/student?Unicode=true&characterEncoding=utf-8" ...
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- [疯狂Java]JDBC:PreparedStatement预编译执行SQL语句
1. SQL语句的执行过程——Statement直接执行的弊病: 1) SQL语句和编程语言一样,仅仅就会普通的文本字符串,首先数据库引擎无法识别这种文本字符串,而底层的CPU更不理解这些文本字符串( ...
随机推荐
- 2019-11-29-VisualStudio-断点调试详解
原文:2019-11-29-VisualStudio-断点调试详解 title author date CreateTime categories VisualStudio 断点调试详解 lindex ...
- JS 弹窗“是否删除”
var r = confirm("是否确认删除!");if (r == true) {location.href = "/Employees/Delete/" ...
- 初学Mybatis
首先配置mybatis配置文件 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" &qu ...
- group by 两个字段
group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等 使用group by的两个要素: (1) 出现在select后面的字段 要么 ...
- 是否注意过isEmpty 和 isBlank 区别?
isEmpty 和 isBlank 区别 org.apache.commons.lang.StringUtils 类提供了 String 的常用操作,最为常用的判空有如下两种 isEmpty(Stri ...
- svn忽略target文件
背景:最近项目转移到svn上 发现:项目从svn拉取下来到eclipse中,发现有大量的文件改动,一看都是一些.project之类的配置文件或者是target文件夹,或者下面的文件 这些东西肯定是不需 ...
- EtherNet/IP CIP协议
EtherNet/IP CIP协议 1.EtherNet/IP简述 EtherNet/IP(Ethernet/Indstrial Protocol,以太网/工业协议)是一种基于以太网和TCP/IP技术 ...
- SSH端口转发之本地转发
一.案例环境: 3台RHEL6.5 64虚拟机(分别为:HostA.HostB.HostC) IP地址: HostA:192.168.100.101 HostB:192.168.100.102 Hos ...
- NLP学习(5)----attention/ self-attention/ seq2seq/ transformer
目录: 1. 前提 2. attention (1)为什么使用attention (2)attention的定义以及四种相似度计算方式 (3)attention类型(scaled dot-produc ...
- Kustomize安装配置入门文档
一,简介 kustomize是sig-cli的一个子项目,它的设计目的是给kubernetes的用户提供一种可以重复使用同一套配置的声明式应用管理,从而在配置工作中用户只需要管理和维护kubernet ...