JDBC实现CRUD操作
目录
前言
一、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操作相关推荐
- JDBC的CRUD操作之PreparedStatement的查询操作
@Test/*** 查询操作*/public void demo4(){Connection conn = null;PreparedStatement pstmt = null;ResultSet ...
- JDBC的CRUD操作之PreparedStatement的删除操作
@Test/*** 删除操作*/public void demo3(){Connection conn = null;PreparedStatement pstmt = null;try{// 获得连 ...
- JDBC的CRUD操作之PreparedStatement的修改操作
@Test/*** 修改操作*/public void demo2(){Connection conn = null;PreparedStatement pstmt = null;try{// 获得连 ...
- JDBC的CRUD操作之PreparedStatement的保存操作
@Test/*** 保存操作*/public void demo1(){Connection conn = null;PreparedStatement pstmt = null;try{// 获得连 ...
- java代码对数据库数据的CRUD操作
java代码对数据库数据的CRUD操作 前言 一.CRUD.JDBC是什么? 二.操作步骤 1.连接mqsql数据库.加载数据库驱动 2.对数据库中的表进行增.删.改.查 总结 前言 对于刚刚学习完J ...
- 数据库MySQL基础---JDBC开发步骤--JDBC封装工具类--PreparedStatement实现CRUD操作
JDBC简介 1.JDBC定义Java数据库连接(Java Database Connectivity,简称JDBC):是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询 ...
- JDBC操作1:实现对数据库crud操作
目录 1. JDBC概念 1.1 什么是JDBC 1.2 JDBC实现形式 1.3 jdbc操作API介绍 1.4 jdbc操作步骤(固定) 2. JDBC实现对数据库crud操作 2.1 第一步 加 ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...
- java中利用框架传入相同的url实现crud操作_还在手写CRUD代码?这款开源框架助你解放双手!
相信很多朋友在项目中使用的ORM框架都是MyBatis,如果单用MyBatis来操作数据库的话,需要手写很多单表查询的SQL实现.这时候我们往往会选择一个增强工具来实现这些单表CRUD操作,这里推荐一 ...
最新文章
- linux正则表达式awk讲解
- Unity 协程Coroutine综合测试
- 自定义验证规则ValidationAttribute的使用
- itext jsp页面打印
- 51单片机 驱动步进电机 C语言 lcd,51单片机红外遥控控制步进电机的LCD显示源程序...
- JAVA入门级教学之(面向过程和面向对象的区别)
- 普诺飞思公布发明者社区,启发基于事件视觉技术的创新
- abaqus分析用户手册单元卷_ABAQUS与你我的约定
- python有关函数的面试题
- 支付功能如何软件测试
- mysql数据库教程子查询_MySQL数据库实操教程(17)——子查询
- Linux中光驱对应的设备文件,Linux硬盘对应的设备文件
- LOIC网站压力测试工具
- WEB API 接口签名sign验证入门与实战
- 用phpexcel导入导出文件
- 【java基础】同比和环比
- 微电子学前沿讲座三-国产EDA的困境-刘伟民博士
- XCOM Enemy Unknown
- cyusb3014 设备插入 westbridge未识别问题220514
- npx mrm lint-staged 报错
热门文章
- vivo x6plus支持html,vivo X6 Plus有几个版本?vivo X6 Plus双4G与全网通版区别对比
- cmi matlab,【每日一策】Matlab量化交易策略之 恒温器策略
- 2012年03月21日
- 泛函分析 03.04 内积空间与Hilbert空间 - 正交基和正交列的完备性
- java使用maven引入jsoup,爬取网页内容
- 五款电动车充电器原理图(重点图2分析过程UC3842的VCC启动电压和稳定供电电压说明,12V由稳压二极管得到做外围电源LM358比较器可被控制输出12V 和0V切换)UC3842电源管理芯片详解
- OC基础——Protocal(协议)
- 大一作业HTML网页作业:中华传统文化题材网页设计(纯html+css实现----中国结 12页 地缓存登录注册
- Java程序员的JavaScript学习笔记(13—— jQuery UI)
- c语言分号的转义字符,C语言中的转义字符 - osc_9gm4ypss的个人空间 - OSCHINA - 中文开源技术交流社区...