JDBC学过但又属于很容易忘记的那种,每次要用到,都要看下连接模式。每次找又很费时间,总之好麻烦呀呀呀,所以写篇博客,总结下原理和常用接口,要是又忘了可以直接来博客上看,嘿嘿。

一、什么是JDBC

1、JDBC全称是 Java DataBase Connectivity,可以为多种关系型数据库DBMS提供统一的访问方式,主要目的是用Java来操作数据库。

2、JDBC API主要负责三个功能:(1)与数据库建立连接(2)发送SQL语句给数据库(3)数据库将结果返回

具体过程大致是这样子的:

3、实现方法:(1)DriverManager:管理jdbc驱动(2)Connection 连接数据库(3)Statement(PreparedStatement)增删改查 CallableStatement 调用数据库的存储过程和存储函数 (4)ResultSet 结果集

4、实现步骤:(1)导入驱动,加载具体驱动类(2)与数据库建立连接(3)执行SQL语句(4)返回结果

5、常见数据库 oracle,mysql,SQLServer的加载驱动

oracle---具体驱动类:oracle.jdbc.OracleDriver     连接字符串:jdbc:oracle:thin:@localhost(ip地址):1521:ORCL

mysql---具体驱动类:com.mysql.jdbc.Driver    连接字符串:jdbc:mysql://localhost(ip地址):3306/数据库实名

SQLServer---具体驱动类:com.microsoft.sqlserver.jdbc.SQLServerDriver     连接字符串:jdbc.microsoft.sqlserver:localhost(ip地址):1433;数据库实名

6、举个实例(以mysql数据库为例)实现对数据库增删改 查

建一个JDBCDemo

public class JDBCDemo {
private String driver="com.mysql.jdbc.Driver";
private String url="jdbc:mysql://localhost:3306/test";
private String username="root";
private String password="root";
Connection conn=null;
Statement statement=null;
ResultSet set=null;
public void updateSql(){
try{
//加载驱动类
Class.forName(driver);
//与数据库建立连接
conn= DriverManager.getConnection(url,username,password);
//发送SQL语句
statement=conn.createStatement();
//插入数据
String sql="insert into user(username,password) values('114','1234')";
//修改数据
//String sql="update user set password='1232' where id=2"
//删除数据
//String sql= "delete from user where id=2";
//sql语句结果,一般进行 增删改 的SQL语句用excuteUpdate
int count=statement.executeUpdate(sql);
if(count>0){
System.out.println("操作成功");
}else{
System.out.println("操作失败");
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (statement == null) {//用判断来防止statement空异常
statement.close();
}
if (conn == null) {
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
} }
}
public void querySql(){
try{
//加载驱动类
Class.forName(driver);
//与数据库建立连接
conn= DriverManager.getConnection(url,username,password);
//发送SQL语句
statement=conn.createStatement();
String sql="select * from user where username='111' and password='1234' ";
//返回结果集
set=statement.executeQuery(sql);
while(set.next()){
//用两种方式获取值,一种是根据列名,一种是所在的列数
String name=set.getString("username");
String pass=set.getString("password");
//String name=set.getString(2);
// String pass=set.getString(3);
System.out.println(name+","+pass);
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (statement == null) {//用判断来防止statement空异常
statement.close();
}
if (conn == null) {
conn.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
}

上述代码主要使用Statement方式发送SQL,还有preparedStatement方式。他们之间有相同点,但是又不是一样,下面就来比较下Statement和PreparedStatement

二、Statement与PreparedStatement的比较

Statement:(1)产生方式:Connection.createStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一般将SQL语句放在executeUpdate()中

PreparedStatement:(1)产生方式:Connection.prepareStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一系列SetXXX方法(5)将SQL放在Connection.PrepareStatement(SQL)(6)需要预编译

查看PreparedStatement的源码 ,可知PreparedStatement继承Statement,Statement里有的方法PreparedStatement都有,但是PreparedStatement还有很多SetXXX方法

用代码直观的体现两者的区别:

除了这部分之外,其他和上述代码一样,多了一步预编译。

三、PreparedStatement较Statement的优势

(1)编码更加简洁灵活:在PreparedStatement中SQL语句后的查询条件,插入的值可以用占位符(?)来表示,不用像Statement一样写具体的值,只需要调用PreparedStatement中的SetXXX方法赋值即可。

(2)提高性能:如果要执行一条SQL语句100回,Statement需要connection,createStatement(sql)语句编译SQL100次,PreparedStatemnet只需要编译SQL语句一回(即connection.PreparedStatement(sql)),重复执行100次preparedStatement.executeQuery();减少编译SQL次数,提高性能。

(3)安全性高,可以有效防止SQL注入的风险:Statement存在SQL注入的风险,PreparedStatement可以防止SQL注入的风险。

java篇之JDBC原理和使用方法的更多相关文章

  1. 【JDBC】java程序通过jdbc连接oracle数据库方法

    版权声明:本文为博主原创文章(原文:blog.csdn.net/clark_xu 徐长亮的专栏).未经博主同意不得转载. https://blog.csdn.net/u011538954/articl ...

  2. java web程序 jdbc连接数据库错误排查方法

    学习jsp.我遇到了麻烦,我总是看不懂500错误,因为每次都显示整个页面的错误,都是英文 我看不懂,后来,把他弄烦了,我也烦了,比起学习java.那个异常可以很简单的就知道.现在解决 了第一个问题,5 ...

  3. 并发编程(十二)—— Java 线程池 实现原理与源码深度解析 之 submit 方法 (二)

    在上一篇<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中提到了线程池ThreadPoolExecutor的原理以及它的execute方法.这篇文章是接着上一篇文章 ...

  4. JAVA的List接口的remove重载方法调用原理

    前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引inde ...

  5. java:comp/env/jdbc/ 的两种配置方法

    1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  6. 【java回调】同步/异步回调机制的原理和使用方法

    回调(callback)在我们做工程过程中经常会使用到,今天想整理一下回调的原理和使用方法. 回调的原理可以简单理解为:A发送消息给B,B处理完后告诉A处理结果.再简单点就是A调用B,B调用A. 那么 ...

  7. Java线程池的原理及几类线程池的介绍

    刚刚研究了一下线程池,如果有不足之处,请大家不吝赐教,大家共同学习.共同交流. 在什么情况下使用线程池? 单个任务处理的时间比较短 将需处理的任务的数量大 使用线程池的好处: 减少在创建和销毁线程上所 ...

  8. 管中窥豹——框架下的SQL注入 Java篇

    管中窥豹--框架下的SQL注入 Java篇 背景 SQL注入漏洞应该算是很有年代感的漏洞了,但是现在依然活跃在各大漏洞榜单中,究其原因还是数据和代码的问题. SQL 语句在DBMS系统中作为表达式被解 ...

  9. 一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)

    JDBC全称又叫做Java DataBase Connectivity,就是Java数据库连接,说白了就是用Java语言来操作数据库.这篇文章主要是对JDBC的原理进行讲解.不会专注于其使用.主要是理 ...

随机推荐

  1. 关于linux的一点好奇心(一):linux启动过程

    一直很好奇,操作系统是如何工作的?我们知道平时编程,是如何让代码跑起来的,但那些都是比较高层次的东西.越往后,你会越觉得,像是空中楼阁,或者说只是有人帮你铺平了许多道理,而你却对此一无所知. 1. 操 ...

  2. [学习笔记] Oracle字符串函数、日期函数、数值函数、转换函数、聚合函数

    函数 单行函数:对一行数据进行操作的函数,如字符串函数.数值函数.转换函数.日期函数等. 聚合函数:同时对多行数据进行操作,如求和函数等. 字符串函数 函数 说明 ASCII(X) 求字符X的ASCI ...

  3. Oracle打怪升级之路二【视图、序列、游标、索引、存储过程、触发器】

    前言 在之前 <Oracle打怪升级之路一>中我们主要介绍了Oracle的基础和Oracle常用查询及函数,这篇文章作为补充,主要介绍Oracle的对象,视图.序列.同义词.索引等,以及P ...

  4. TypeScript 中文教程之缩小----部分翻译自TS官方

    Narrowing概念:字面意思是缩小,可以理解为细化或者您觉得更好的代名词. TS官方在这里做了很详细的说明,文字较多,简单以图片概括: typeof  type guards 类型防护过程,可以通 ...

  5. Redis_安装配置(2)

    一.安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 $ yum install -y gcc 上面命令 ...

  6. 在git上下载的源码项目,运行时报错AssertionError [ERR_ASSERTION] [ERR_ASSERTION]: Task function must be specified

    原因是gulp3 和gulp4的运行方式不一样, 解决方法: 1.修改package.json文件中gulp的版本为最新版本 2.删除node_modules文件夹和package-lock.json ...

  7. Vue - 问题集、知识点

    通信:父组件 -> 子组件 父组件 <!--这里需要用v-bind来绑定data中的fontsize,否则传过去的只是一个字符串"fontsize"--> < ...

  8. xftp 6 的 使用

    1.前言 xftp是个向云服务器linux系统传输文件的软件,装载在window系统 简单易用 2.下载 官方下载地址:https://www.netsarang.com/zh/xftp-downlo ...

  9. Jekyll + NexT + GitHub Pages 主题深度优化

    前言 笔者在用 Jekyll 搭建个人博客时踩了很多的坑,最后发现了一款不错的主题 jekyll-theme-next,但网上关于 Jekyll 版的 Next 主题优化教程少之又少,于是就决定自己写 ...

  10. css上下居中

    position: absolute; top: 20%; left: 50%; transform: translateX(-50%); -ms-transform: translateX(-50% ...