您的位置 首页 java

面试手册:JDBC详解

面试手册:JDBC详解

什么是 jdbc

面试手册:JDBC详解

  • 有了JDBC 向各种 关系型数据库 发送SQL语句就是一件很容易的事。是一个独立于数据库的管理系统,提供了通用的SQL数据库存取操作的接口(CRUD:Create Read Update Delete),定义了一组同一标准,为访问不同数据库提供同一途径。它是由sum公司开发的一套系统组件,供开发者直接调用。

程序是如何同数据库进行沟通的

  • 数据库本身就是一个独立运行的应用程序,编写应用程序就是利用网络通信协议与数据库进行命令交换,来进行命令的增删查找。双层架构
面试手册:JDBC详解

  • 问题的重点在于,你的应用程序如何调用这组程序库?
  • 因为每个数据库的通常有不同的通信协议,用于连接不同数据库在API上也会有所不同
  • JDBC 基本上就是用来解决这些问题,当应用程序需要练级数据库就调用这组标准的API,而标准的API中的接口由数据库厂商实现,通常称为JDBC 驱动程序 (Driver)。
  • 三层架构
面试手册:JDBC详解

JDBC分为两部分

  • JDBC 应用程序开发者接口((ApplicationDeveloper Interface)
  • JDBC 驱动程序开发者接口 (Driver Developer Interface)),驱动程序接口是数据库厂商要实现驱动程序时的规范,一般开发者并不用了解。
面试手册:JDBC详解


使用JDBC代码进行数据库连接处理:

开发应用程序过程中,如果要操作数据库,我们是通过JDBC所提供的接口来实现设计程序的,理论上必须更换数据库的时候,应用程序不用修改,直接更换数据库驱动程序实现数据库的更换。

Connection conn = DriverManager.getConnection(....); //驱动
Statement st = conn.createStatement(); //声明
ResultSet rs = st.executeQuery("select * from T_user"); //executeQuery 执行命令
假设这段代码是连接 mysql 数据库,你会需要在Classpath中设置My sql ;对应JDBC的驱动程序。
具体来说,就是在Classpath 中设置一个JAR文件此时应用程序、JDBC 与数据库的关系如下图所示。
 
  • 连接MySQL 数据库
面试手册:JDBC详解

  • 连接Oracle 数据库
面试手册:JDBC详解

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大联盟」,关注即可获取海量学习干货,同时还有不定期送书,键盘,鼠标等粉丝福利。

面试手册:JDBC详解

赶快来关注一波,海量资源拿到手软。

文章来源:智云一二三科技

文章标题:面试手册:JDBC详解

文章地址:https://www.zhihuclub.com/184413.shtml

关于作者: 智云科技

热门文章

网站地图