网站首页 > 教程分享 正文
什么是JDBC
Java数据库连接,简称JDBC(java Database Connectivity),是一种用于执行SQL语句的java API,它由一组java编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据的开发人员能够用纯java API编写数据库应用程序。
- 有了JDBC 向各种关系型数据库发送SQL语句就是一件很容易的事。是一个独立于数据库的管理系统,提供了通用的SQL数据库存取操作的接口(CRUD:Create Read Update Delete),定义了一组同一标准,为访问不同数据库提供同一途径。它是由sum公司开发的一套系统组件,供开发者直接调用。
程序是如何同数据库进行沟通的
- 数据库本身就是一个独立运行的应用程序,编写应用程序就是利用网络通信协议与数据库进行命令交换,来进行命令的增删查找。双层架构
- 问题的重点在于,你的应用程序如何调用这组程序库?
- 因为每个数据库的通常有不同的通信协议,用于连接不同数据库在API上也会有所不同
- JDBC 基本上就是用来解决这些问题,当应用程序需要练级数据库就调用这组标准的API,而标准的API中的接口由数据库厂商实现,通常称为JDBC驱动程序(Driver)。
- 三层架构
JDBC分为两部分
- JDBC 应用程序开发者接口((ApplicationDeveloper Interface)
- JDBC 驱动程序开发者接口 (Driver Developer Interface)),驱动程序接口是数据库厂商要实现驱动程序时的规范,一般开发者并不用了解。
使用JDBC代码进行数据库连接处理:
开发应用程序过程中,如果要操作数据库,我们是通过JDBC所提供的接口来实现设计程序的,理论上必须更换数据库的时候,应用程序不用修改,直接更换数据库驱动程序实现数据库的更换。
Connection conn = DriverManager.getConnection(....); //驱动 Statement st = conn.createStatement(); //声明 ResultSet rs = st.executeQuery("select * from T_user"); //executeQuery 执行命令 假设这段代码是连接MySQL数据库,你会需要在Classpath中设置MySQL;对应JDBC的驱动程序。 具体来说,就是在Classpath 中设置一个JAR文件此时应用程序、JDBC 与数据库的关系如下图所示。
- 连接MySQL 数据库
- 连接Oracle 数据库
JDBC体系结构:java访问各种关系型数据库的一系列API,功能包括
1、建立数据库连接2、创建SQL语句3、执行SQL语句4、查看或修改结果具体的方法:
代码实例:Connection conn = DriverManager.getConnection("URL",“user”,"password")url:数据库地址,jdbc:mysql://localhost:/database(数据库名字)?useUnicode=true&characterEncoding=UTF-8 //在数据库名字后面最好加入utf—8 user:数据库用户名 password:数据库密码 oracle:连接驱动://Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:dabase",“user”,“password”)
- executeQuery():运行select 语句,返回ResultSet 结果集。
- executeUpdate():运行 insert、delete、update的操作,返回更新的行数。
- true:表示 SQL执行返回的结果是resultSet类型(select)
- 表示 SQL执行返回的结果不是是resultSet类型 (insert,delete,update)
- Statement :执行SQL语句:并且返回他所生成的结果对象:Statement,由createStatement创建,用于发送简单的sql语句(不带参数):不使用,而使用它的子类PreparedStatement
- PreparedStatement接口:用于发送一个或者多个输入参数的sql语句,它的父类是Statement,但是其效率更高,
- 并且可以防止SQL注入
- ,因此我们一般都用prepareStatement.
- CallableStatement,继承prepareStatement,由preParCall创建,
- 用于调用存储过程
- 。
- execute():运行语句返回是否有结果集:true/false,
- 不过该方法很少用来返回结果集,因为容易发生SQL注入
- 我们常用的是:
- DriverManager:驱动管理
- Connection:连接与特定数据库的连接(会话),在连接上下文中执行SQL语句并且返回结果
- DriverManager 的 getConnection()方法是建立JDBC URL中定义的数据库在Connection 连接的(连接对象内部其实包含了Socket对象,是一个远程连接,比较耗时,这是Connection对象管理的一个要点,
- 在实际开发中,为了提高效率,我们使用连接池来管理连接对象
- )
使用JDBC的步骤
- 导入jar包 :MySQL-connector-java-5.1.33-bin.jar
- 编写代码:
- name="root";
- password= "1121"
- url = "jdbc:mysql://localhost:/database(数据库名字)?useUnicode=true&characterEncoding=UTF-8"
- driveClassName = "com.mysql.jdbc.Driver"
- 编写连接MySQL的四大参数
- 加载MySQL的驱动类
- class.forName(driveClassName)
- 获取MySQL数据库的连接对象
- Connection conn = DriveManger.getConnection(url,name,password);
- 向MySQL数据库发送SQL语句
- String sql = "insert into dept values(65,"tt","oo")";
- Statement stmt = conn.createStatement();
- int result = stmt.executeUpdate(sql);
- 查询语句的话,读取结果集中的数据
- 关闭MySQL数据库相关的连接
- stmt.close();
- conn.close();
- 用到的对象:
- Result executeQuery(String sql) :返回结果集
- int stmt.executeUpdate(sql) : 返回返回更新数据
- DriverManager (管理JDBC驱动程序):getConnection(String url,name,password)
- Connection(管理连接):conn.createStatement()
- Statement (执行静态SQL语句):
- ResultSet(查询数据库得到的结果集):将结果集封装成类
- next()
- first()
- last()
- previous()
- relative(int rows)
- absolute(int row)
- 移动光标:
- 获取字段: getxxx();
JDBC 连接池:相当于容器
- Connection 连接的弊端
- ,每次连接都要验证密码和用户名,用完后由被关闭,当下次执行的时候又再次连接,这样既耗时又浪费资源(可以比较为一次性手机和公共电话),为了提高程序效率我们使用连接池。
- 数据库连接池基本思想:为数据库建立缓冲池(连接的集合),预先在里面方一定数量的的连接对象,当Java application(应用程序)需要获取数据库连接时,直接从连接池中取一个出来,用完后不关闭,再放到池中,重复利用,做到资源共享。
- JDBC 提供了DataSource接口来使用数据库连接池,但是JDBC没用对该接口进行实现,但是在实际开发中我们不需要自己实现,直接利用第三方工c3p0 就可以完成。
- c3p0是在JDBC的第二步使用,替换连接步骤。
- c3p0产生的类和原生的类不一样,前者是代理连接数据库,后者是直接连接数据库
- 关闭释放资源的方式不同
- ,c3p0这个时候调用的close()方法不是扔掉,而是还回连接池.
- c3p0 使用步骤:
- 导入c3p0jar 包
- 创建C3P0数据源
- 设置数据库属性(url , user. password)
- 加载驱动(不用class.forName())
- 设置初始化的连接数(连接池大小):最大连接数(虽然连接池的初始化连接是10,但是当链接不够时还可以重新申请,直到上限,如果超过上限,则等待),和最小连接(2)
- C3P0—config.xml 文件名不能修改,放置在src路径下
- name—config.xml 标签的name属性不可以自定义
- property 标签的name属性不能修改
- Property 标签内部的值不能加双引号
- DBUtils工具:简化JDBC代码,查询数据,可以完成自动封装,但是只能单表查询封装,多表关联无法封装,多表关联封装以后MyBatis 框架或者Hibernate 框架来完成。
- 自动封装的原理:通过反射机制创建目标对象,必须调用无参构造,实体类必须有一个无参构造,属性必须有stter方法
注意
- 提供SQL占位符:用?代替参数。
- String sql = "update card set name = ? ,classs= ? where cno= ?";
- 关于SQL注入:
- 原理:利用系统没有对用户输入的数据进行充分验证,在用户输入的信息中注入非法SQL语句,从而利用系统的sql引擎完成恶意行为的做法。
- 解决方案:占位符替换,也不用拼接sql语句。定义子类。
- 在数据库中保存图片(音频 视频):(图片音视频都是以二进制的形式保存在数据库中(选择适合的类型,注意资源大小),二进制保存类型有(只是大小不同)tinyblob:255kb 、blob:65kb 、mediublob: 16M )
- JDBC 事务:(一般框架里面都有,具体写代码的时候不用自己去写)
- 关闭自动提交 //setAutoCommit(false);
- 手动提交 //conn.commit();
- 回滚 //conn.rollback();
- 硬编码:是将数据库信息写死在程序中,每次修改信息,都需要重新编译java程序;一般会将数据库的连接信息提取出来放在配置文件里面,java程序只需要读取配置文件就、就可以了。
- 写底层框架的条件:(学会看源码)1.xml解析 2.反射 3. 接口---->实现类
- 框架:就是工具,提高编写效率(类似于洗衣机) 按照正确的步骤操作。
- 异常处理:1,自己处理(try catch 自己处理)。 2,抛出给上级 。类似于公司出问题自己处理或者上级处理,但是最高是JVM。
- 关于封装:当一个代码多次重复执行,那么我们可以将它封装成一个类,一个方法多次被调用,那么将他放到静态代码块中。
- java 中对数据库的操作时,一般是建立一个模型类,将数据库的表映射到模型类,然后以面向对象的操作方法来处理。
关注微信公众号「Java大联盟」,关注即可获取海量学习干货,同时还有不定期送书,键盘,鼠标等粉丝福利。
猜你喜欢
- 2024-10-14 Java之Spring4:JDBC(java之父余胜军网站)
- 2024-10-14 《JDBC》第09节:JDBC之DatabaseMetaData数据库元数据对象
- 2024-10-14 《JDBC》第18节:JDBC之数据库连接池Hikari的使用(软编码方式)
- 2024-10-14 flink教程-详解flink 1.11 中的JDBC Catalog
- 2024-10-14 肝!Spring JDBC持久化层框架“全家桶”教程
- 2024-10-14 JDBC的基础使用(jdbc 教程)
- 2024-10-14 大数据开发基础之JAVA基础-JDBC基础知识
- 2024-10-14 JDBC基础整理(jdbc 教程)
- 2024-10-14 小白都能看懂的JDBC事务(jdbc实现事务管理)
- 2024-10-14 Spring JdbcTemplate讲解(spring的jdbc模板)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)