目录

前言

一、JDBC介绍

1、概念

2、关系

3、优点

二、JDBC编程步骤

1、导包

2、获取连接

2.1创建配置文件

2.2数据连接方式(通用格式)

3、实现CRUD操作

3.1为什么要替换?

3.2使用PreparedStatement实现增、删、改操作

3.3使用PreparedStatement实现查询操作

4、资源释放

三、JDBC API 总结


前言

前面介绍了MySQL基本的增删改查操作,那么如何在java中来实现对数据库的数据操作呢!本编介绍的JDBC就是为了实现java对数据库进行访问的!

一、JDBC介绍

1、概念

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。

2、关系

如图所示,JDBC就像是一座桥梁连接了java与MySQl, 作为一种规范去执行sql语句。各种的类型数据库都有其相对应的JDBC接口规范,本编介绍MySQL数据库对应的JDBC规范。

3、优点

1、JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
2、 JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

二、JDBC编程步骤

步骤图:

1、导包

导入MySql对应的Java.sql包,必须要导包才能实现JDBC对数据库的访问,如果导包会抛ClassNotFoundException异常。

如何导包:

1、将上述jar包拷贝到Java工程的一个目录中,习惯上新建一个lib文件夹。

2、在驱动jar上右键-->Build Path-->Add to Build Path

2、获取连接

2.1创建配置文件

使用配置文件的好处:
①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
②如果修改了配置信息,省去重新编译的过程。

注意:配置文件位置要处于src下。test为数据库名称,随着需要更改。

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

2.2数据连接方式(通用格式)

        //1、读取配置文件中的四个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Connection/jdbc.properties");Properties prop = new Properties();prop.load(is);//2、获取配置文件内容String url = prop.getProperty("url");String user = prop.getProperty("user");String password = prop.getProperty("password");String driver = prop.getProperty("driver");//3、加载驱动Class.forName(driver);//4、获取连接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);

DriverManager的源码中已经存在静态代码块,实现了驱动的注册。

3、实现CRUD操作

3.1为什么要替换?

使用Statement操作数据表的弊端:

1、存在拼串操作,繁琐
2、问题二:存在SQL注入问题

PreparedStatement的优势:

1、PreparedStatement得代码可读性和可维护性更高。

2、PreparedStatement 可以防止 SQL 注入,占位符的使用解决了sql注入问题。

3、DBServer会对**预编译**语句提供性能优化。

3.2使用PreparedStatement实现增、删、改操作

//通用的增、删、改操作(体现一:增、删、改 ; 体现二:针对于不同的表)public void update(String sql,Object ... args){Connection conn = null;PreparedStatement ps = null;try {//1.获取数据库的连接conn = JDBCUtils.getConnection();//2.获取PreparedStatement的实例 (或:预编译sql语句)ps = conn.prepareStatement(sql);//3.填充占位符for(int i = 0;i < args.length;i++){ps.setObject(i + 1, args[i]);}//4.执行sql语句ps.execute();} catch (Exception e) {e.printStackTrace();}finally{//5.关闭资源JDBCUtils.closeResource(conn, ps);}}

3.3使用PreparedStatement实现查询操作

// 通用的针对于不同表的查询:返回一个对象 (version 1.0)public <T> T getInstance(Class<T> clazz, String sql, Object... args) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {// 1.获取数据库连接conn = JDBCUtils.getConnection();// 2.预编译sql语句,得到PreparedStatement对象ps = conn.prepareStatement(sql);// 3.填充占位符for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}// 4.执行executeQuery(),得到结果集:ResultSetrs = ps.executeQuery();// 5.得到结果集的元数据:ResultSetMetaDataResultSetMetaData rsmd = rs.getMetaData();// 6.1通过ResultSetMetaData得到columnCount,columnLabel;通过ResultSet得到列值int columnCount = rsmd.getColumnCount();if (rs.next()) {T t = clazz.newInstance();for (int i = 0; i < columnCount; i++) {// 遍历每一个列// 获取列值Object columnVal = rs.getObject(i + 1);// 获取列的别名:列的别名,使用类的属性名充当String columnLabel = rsmd.getColumnLabel(i + 1);// 6.2使用反射,给对象的相应属性赋值Field field = clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columnVal);}return t;}} catch (Exception e) {e.printStackTrace();} finally {// 7.关闭资源JDBCUtils.closeResource(conn, ps, rs);}return null;}

4、资源释放

释放ResultSet, Statement,Connection。资源释放是增删改查操作都需要进行的,所以封装成方法作为一个工具包使用。

 //查询资源关闭public static void closes(Connection conn,Statement ps,ResultSet rs){try {if (conn != null)conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {if (ps != null)ps.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}

三、JDBC API 总结

到此JDBC实现CRUD操作的整个流程整理完毕,涉及的知识点很多,目前本人理解得不够,只能总结一下基本步骤实现。学习过程中了解到JDBC得两种编程思想和涉及得技术实现,就简单的介绍一下。

1、编程思想

  • 面向接口编程的思想

  • ORM思想(object relational mapping)

    • 一个数据表对应一个java类

    • 表中的一条记录对应java类的一个对象

    • 表中的一个字段对应java类的一个属性

2、技术实现

  • JDBC结果集的元数据:ResultSetMetaData

    • 获取列数:getColumnCount()

    • 获取列的别名:getColumnLabel()

  • 通过反射,创建指定类的对象,获取指定的属性并赋值

JDBC实现CRUD操作相关推荐

  1. JDBC的CRUD操作之PreparedStatement的查询操作

    @Test/*** 查询操作*/public void demo4(){Connection conn = null;PreparedStatement pstmt = null;ResultSet ...

  2. JDBC的CRUD操作之PreparedStatement的删除操作

    @Test/*** 删除操作*/public void demo3(){Connection conn = null;PreparedStatement pstmt = null;try{// 获得连 ...

  3. JDBC的CRUD操作之PreparedStatement的修改操作

    @Test/*** 修改操作*/public void demo2(){Connection conn = null;PreparedStatement pstmt = null;try{// 获得连 ...

  4. JDBC的CRUD操作之PreparedStatement的保存操作

    @Test/*** 保存操作*/public void demo1(){Connection conn = null;PreparedStatement pstmt = null;try{// 获得连 ...

  5. java代码对数据库数据的CRUD操作

    java代码对数据库数据的CRUD操作 前言 一.CRUD.JDBC是什么? 二.操作步骤 1.连接mqsql数据库.加载数据库驱动 2.对数据库中的表进行增.删.改.查 总结 前言 对于刚刚学习完J ...

  6. 数据库MySQL基础---JDBC开发步骤--JDBC封装工具类--PreparedStatement实现CRUD操作

    JDBC简介 1.JDBC定义Java数据库连接(Java Database Connectivity,简称JDBC):是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询 ...

  7. JDBC操作1:实现对数据库crud操作

    目录 1. JDBC概念 1.1 什么是JDBC 1.2 JDBC实现形式 1.3 jdbc操作API介绍 1.4 jdbc操作步骤(固定) 2. JDBC实现对数据库crud操作 2.1 第一步 加 ...

  8. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  9. java中利用框架传入相同的url实现crud操作_还在手写CRUD代码?这款开源框架助你解放双手!

    相信很多朋友在项目中使用的ORM框架都是MyBatis,如果单用MyBatis来操作数据库的话,需要手写很多单表查询的SQL实现.这时候我们往往会选择一个增强工具来实现这些单表CRUD操作,这里推荐一 ...

最新文章

  1. linux正则表达式awk讲解
  2. Unity 协程Coroutine综合测试
  3. 自定义验证规则ValidationAttribute的使用
  4. itext jsp页面打印
  5. 51单片机 驱动步进电机 C语言 lcd,51单片机红外遥控控制步进电机的LCD显示源程序...
  6. JAVA入门级教学之(面向过程和面向对象的区别)
  7. 普诺飞思公布发明者社区,启发基于事件视觉技术的创新
  8. abaqus分析用户手册单元卷_ABAQUS与你我的约定
  9. python有关函数的面试题
  10. 支付功能如何软件测试
  11. mysql数据库教程子查询_MySQL数据库实操教程(17)——子查询
  12. Linux中光驱对应的设备文件,Linux硬盘对应的设备文件
  13. LOIC网站压力测试工具
  14. WEB API 接口签名sign验证入门与实战
  15. 用phpexcel导入导出文件
  16. 【java基础】同比和环比
  17. 微电子学前沿讲座三-国产EDA的困境-刘伟民博士
  18. XCOM Enemy Unknown
  19. cyusb3014 设备插入 westbridge未识别问题220514
  20. npx mrm lint-staged 报错

热门文章

  1. vivo x6plus支持html,vivo X6 Plus有几个版本?vivo X6 Plus双4G与全网通版区别对比
  2. cmi matlab,【每日一策】Matlab量化交易策略之 恒温器策略
  3. 2012年03月21日
  4. 泛函分析 03.04 内积空间与Hilbert空间 - 正交基和正交列的完备性
  5. java使用maven引入jsoup,爬取网页内容
  6. 五款电动车充电器原理图(重点图2分析过程UC3842的VCC启动电压和稳定供电电压说明,12V由稳压二极管得到做外围电源LM358比较器可被控制输出12V 和0V切换)UC3842电源管理芯片详解
  7. OC基础——Protocal(协议)
  8. 大一作业HTML网页作业:中华传统文化题材网页设计(纯html+css实现----中国结 12页 地缓存登录注册
  9. Java程序员的JavaScript学习笔记(13—— jQuery UI)
  10. c语言分号的转义字符,C语言中的转义字符 - osc_9gm4ypss的个人空间 - OSCHINA - 中文开源技术交流社区...