前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面试手册:JDBC

Java面试手册:JDBC

作者头像
南风
发布2018-12-17 15:36:34
8220
发布2018-12-17 15:36:34
举报
文章被收录于专栏:Java大联盟Java大联盟

什么是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所提供的接口来实现设计程序的,理论上必须更换数据库的时候,应用程序不用修改,直接更换数据库驱动程序实现数据库的更换。

代码语言:javascript
复制
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、查看或修改结果

具体的方法:

代码语言:javascript
复制
代码实例: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”)
使用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 中对数据库的操作时,一般是建立一个模型类,将数据库的表映射到模型类,然后以面向对象的操作方法来处理。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java大联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序是如何同数据库进行沟通的
  • JDBC分为两部分
  • 使用JDBC代码进行数据库连接处理:
  • JDBC体系结构:java访问各种关系型数据库的一系列API,功能包括
  • 使用JDBC的步骤
    • JDBC 连接池:相当于容器
      • 注意
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档