JDBC(Java Database Connectivity):Java访问数据库的解决方案。

JDBC只定义接口,具体实现由各个数据库厂商负责。

原生jdbc技术的使用基本都是模板式的开发,基本格式比较固定。

  • JDBC增删改查

try{
//导入驱动包、加载具体驱动类
Class.forName("具体驱动类");
//与数据库建立连接,不同数据库写法可能不同,相同数据库不同版本写法可能也不一样,之前开发中遇到的//sqlserver2000的写法就与新版本的不一样
Connection connection = DriverManager.getConnection("...");
//通过connection,获取操作数据库的对象(Statement\preparedStatement\callablestatement)
Statement stmt = connection.createStatement("...");
//增删改操作都用stmt.executeUpdate("...");
//(查询)处理结果集
//ResultSet rs = stmt.executeQuery("...")
while(rs.next()){rs.getXxx(..) }
}catch(ClassNotFoundException e  )
{ ...}
catch(SQLException e)
{...
}
catch(Exception e)
{...
}
finally
{//关闭各种连接资源,关闭顺序与打开顺序相反相反if(rs!=null)rs.close()if(stmt!=null) stmt.close();if(connection!=null)connection.close();
}
  • Statement\preparedStatement\callablestatement的区别

Statement用于执行不带参数的简单SQL语句,并返回它所生成的结果,每次执行时,数据库都要编译该SQL语句。

PreparedStatement表示预编译的SQL语句的对象,用于执行带参数的预编译的SQL语句,也可以不带参数。编译一次,执行多次,效率高; 安全性好,有效防止Sql注入等问题。

CallableStatement提供了用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。继承自PreparedStatement,支持带参数的SQL操作。提供了对输出和输入/输出参数(IN/OUT)的支持。不同数据库的存储过程是不可移植的,因此CallableStatement面临移植性差问题。

  • JDBC调用存储过程

//jdbc调用存储过程sql语句:
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
String sql = "{call queryEmp(?,?,?,?)}";Connection conn = null;
CallableStatement cstmt= null;try{//提前将获取数据库连接的方法封装为JDBCUtils公共方法conn = JDBCUtils.getConnection();cstmt= conn.prepareCall(sql);//赋值参数cstmt.setInt(1, 7839);//注册参数,声明类型cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);cstmt.registerOutParameter(3, java.sql.Types.DOUBLE);cstmt.registerOutParameter(4, java.sql.Types.VARCHAR);//执行cstmt.execute();//获取值String name = call.getString(2);double sal = call.getDouble(3);String job = call.getString(4);}catch (Exception e){e.printStackTrace();}finally{//释放资源JDBCUtils.release(conn, cstmt, null);}
  • JDBC调用存储函数

//jdbc调用存储函数sql语句://{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}//第一个占位符为返回值String sql = "{? = call queryEmpIncome(?)}";Connection conn = null;CallableStatement cstmt= null;try{//获取连接conn = JDBCUtils.getConnection();//获取调用存储函数的对象cstmt= conn.prepareCall(sql);//注册返回值类型cstmt.registerOutParameter(1, java.sql.Types.DOUBLE);//参数赋值cstmt.setInt(2, 7839);//执行cstmt.execute();//取出返回值double income = cstmt.getDouble(1);}catch (Exception e){e.printStackTrace();}finally{//释放资源JDBCUtils.release(conn, cstmt, null);}
  • 存储过程与存储函数主要区别

  1. 存储过程定义关键字用procedure,函数定义用function。
  2. 存储过程中不能用return返回值,只能通过改变参数为输出值(OUT)来,近似得输出返回值;存储函数中必须有return子句,定义return子句时,其后紧跟着返回值得类型。
  3. 存储过程可以有多个输出值,存储函数的返回值只有一个。
  4. function定义中只能有DDL(如select等)语句;procedure中主要是DML语句(对数据库进行复杂操作时,如对多个表进行Update、Insert、Query、Delete时)。
  5. 存储过程的执行方式有两种(a.使用execute    b.使用begin和end);函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select SUMOF(3,4) form dual;)。

JDBC使用总结:增删改查、调用存储过程、执行存储函数、存储过程与存储函数区别分析相关推荐

  1. vb.net调用oracle存储过程,vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc...

    vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc 我的VBNETORACLE增删改查学习笔记(本源码在VBNET2008下测试通过)学习VBNET有一段时间了,之 ...

  2. JDBC+MySQL入门增删改查案例

    目录 前言 案例分析 核心思路拆解 案例涉及知识点 第一关 创建数据库和项目 创建数据库 创建项目 第二关 JDBC插入和查询 预备工作 单个插入 批量插入 查询数据 JDBC修改和删除 修改数据 删 ...

  3. jsp+Servlet+JavaBean+JDBC+MySQL项目增删改查

    1简单的Mvc,分层建包. java resources src/mian/java (1)dao 包 JDBC连接类,连接数据库.增删改查方法,其他的方法. (2)model包 实体类,数据库字段, ...

  4. JDBC的DML增删改查的代码重构设计(上)

    1 设计商品对象 public class Product {private Long id;private String productName;private String brand;priva ...

  5. 增删改查操作下锁的相关情况_查询时的锁分析

    此系列主要分析在增删改查操作下,表是否有索引等情况下,锁的申请使用情况,研究分析并用于语句调优,数据库优化,死锁堵塞分析等:由于时间问题,该篇只分析查询的情况,下篇继续分析 锁的种类 首先,先了解下数 ...

  6. JDBC(实现增删改查的通用操作)

    JDBC JDBC概述 创建表以及相对应的对象(ORM) 表 对象 获取连接的方式 方式一 方式二 方式三 方式四 方式五(推荐使用) 增.删.改操作 查询操作 JDBC概述 为了使Java编写的程序 ...

  7. JDBC基础的增删改查方法封装

    先创建一个user实体类 脚本架包 数据库user类表 package JDBCdemo;public class User {private long id;private String usern ...

  8. SQL增删改查,循环,触发器,存储过程,以及sql语法

    可以直接粘贴代码使用 --创建数据库命令 create database j1216 on ( name=j1216, filename='E:\shuju\j1216\j1216.mdf', siz ...

  9. 查询jsp servelet mysql_JSP + Servlet + JDBC + Mysql 实现增删改查 课程管理系统(示例代码)...

    1.项目目录结构 2.项目环境 Eclipse IDE  MYSQL  jdk tomcat jar包 3.数据库相关配置 先创建一个course的数据库名,然后在建立一个course的表 要注意将i ...

  10. JDBC的DML增删改查的代码重构设计(下)

    JDBC的操作模板: 流程:1.创建ProductResultSetHandler对象:2.作为参数传递给query方法3.在query方法中:rsh.handler,其实调用的是ProductRes ...

最新文章

  1. 利用lua中的string.gsub来巧妙实现json中字段的正则替换
  2. spring之旅第四篇-注解配置详解
  3. doget dopost 过滤器 乱码
  4. 《GDAL源码剖析与开发指南》一一1.9 简单的调用
  5. Question for the 3D printing lattice?
  6. 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
  7. 说说 Spring AOP 原理
  8. java设置绝对布局_浅谈Java绝对布局 原创
  9. 如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
  10. 564. 寻找最近的回文数
  11. mysql left join右边有多条_left join 右表多条数据重复
  12. 在线JSON校验格式化工具(Be JSON)
  13. linux中一个用户可以同时属于多个组吗,为什么linux用户可以属于多个用户组,文件只能属于一个用户组?...
  14. 荣耀卖掉会有鸿蒙系统吗,华为为什么要把荣耀卖掉 荣耀卖掉之后依然还是那个荣耀吗?...
  15. 十六进制转ASCII码表
  16. unity泛型单例模式Singleton
  17. 05【数据的备份与恢复】
  18. 详解线性反馈移位寄存器(LFSR)
  19. ROS开发之如何使用RPLidar A1二维激光雷达?
  20. Oracle 11g 的 VKTM 进程 - virtual keeper of time

热门文章

  1. #39;git merge#39;和#39;git rebase#39;有什么区别?
  2. win11杜比视界音效怎么打开 window11开启杜比视界音效的步骤方法
  3. 如何用html制作彩虹,用 CSS 制作彩虹
  4. 宝元系统通讯软件recon_企业即时通讯工具需注意哪些问题
  5. jframe大小根据组件变化_Swing JDialog容器和JFrame容器使用教程
  6. b丅151组成的充电器电路_宜家LIVBOJ 无线充电器拆解,这设计一目了然
  7. UVW 在C#中的代码实现
  8. Stack Overflow监控系统内部架构初探
  9. 优化Angularjs的$watch方法
  10. nginx rewrite解决 jenkins error 404心得笔记