一、为什么引入JDBC

在学习JDBC之前,抛开它的概念,我先按照我的理解解释一下,为什么要引入JDBC。在我看来,引入JDBC跟我之前学过的引入JVM(Java虚拟机)有些相似之处。当然,关于JVM的具体知识我还没学,但是为啥用它我知道。JVM相当于在Java与各个平台创建一个"转换器",这样解决了Java跨平台性。这次,JDBC貌似又沿用了这种思想。

Java想要访问数据库,但是数据库的种类多啊,如果为了迎合每个数据库去做一套方案,那得累死。这时候,JDBC就出现了,他在Java与各大数据库之间被使用。

有了JDBC,向各种关系数据发送SQL语句就很容易了。程序员只需用JDBC API写一个程序就可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

二、JDBD的定义

摘自百度搜索:

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

三、JDBC的工作原理

了解了为什么引入JDBC和其定义,接下来需要知道一些JDBD的工作原理,也就是说它是如何实现代码在基于JDBC的基础上,来成功访问数据库的。这点非常重要。可以看下面的图理解一下,纯属个人理解,如果有误感谢指正。

在理解JDBC在Java访问数据库的过程中所扮演的角色之后,就可以去码代码啦。

四、JDBC操作步骤

1.导Jar包

2.注册驱动(只做一次)。看到“只做一次”有没有回忆起静态属性,有这样的特点。

3.建立链接

4.创建执行语句

5.执行

6.处理结果

7.释放资源!(从小到大释放)

下面演示具体实现过程:

1.使用JDBC需要在工程中导入对应的jar包。在Eclipse下,在工程的图标上右击,选择”Properties”,在”Java Bulid Path”中选择”Add External JARs…”,选择下载并解压后获得的jar包。

加载之后,简单阅读了一下这个jar包的内容和启动程序的介绍:

public class Test1 {
public static final String DRIVER = "com.mysql.jdbc.Driver"; public static void main(String[] args) {
try {
System.out.println(Class.forName(DRIVER));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//若能输出驱动的名称,代表配置好了

附加:

为什么调用Class.forName(),却没有newInstance(); ?

原因:Class.forName() 加载了指定类后,若类中有静态初始化器,JVM必然会执行该类的静态代码段,而JDBC的Driver类都是会有static代码块。

2.在完整的代码里演示整个过程

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class Test1 {
// 第一步:Jar包中驱动类的名称设置为静态常量
public static final String DRIVER = "com.mysql.jdbc.Driver"; public static void main(String[] args) throws SQLException {
// 第二步:注册驱动类,用到Class.forName,原理是通过类名,把类装在到虚拟机中。Class中的C要大写
try {
System.out.println(Class.forName(DRIVER));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 第三步:建立连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/t_employee", "root", "root");
/*
* 注意:
* 1.这里Connection和DriverManager都需要导包,不要到mysql包,最好导SQL包,以后方便兼容;
* 2.会抛出异常:throws SQLException,此时为了演示,先抛出;
* 3.getConnection的参数未来会被配置到配置文件中,将来不会像我上面那样写的,尤其是第一个参数(url);
* 4.第一参数中的t_employee,是具体数据库的名字,不是表名。
* 5.创建连接时需要用户名和密码;
*/ // 第四步:创建statement对象和执行语句(造车)
Statement stm = conn.createStatement();// 需导包:import java.sql.Statement
// 第五步:执行,返回结果集对象(车装完一箱东西,回来了)
ResultSet rs = stm.executeQuery("select*from t_employee");
/*
* 注意:
* 1.ResultSet需要导包:import java.sql.ResultSet;
* 2.executeQuery()方法的参数是String sql;
*/
// 第六步:处理(结合数据库中的数据特点,用while循环输出)
while (rs.next()) {
System.out.print(rs.getInt("id") + "\t");
System.out.print(rs.getString("name") + "\t");
System.out.print(rs.getInt("age") + "\t");
System.out.println(rs.getInt("salary"));
/*
* 注意:
* 1.它是一列一列取的。比如id在第一列,name在第二列,取的时候可以把id和name换成1,2
* 但是,最好别这样做,防止数据库列数有变动,就糟糕了;
* 2.getInt、getString......取的时候,数据类型要对上;
* 3.id、name、age....大小写无所谓
*/
}
// 第七步:释放资源(创建连接消耗很大,一定要关闭资源!!!)
try {
rs.close();
stm.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* 注意: 这样关闭资源是有很大隐患的!!!!!!
* 比如,万一创建连接之后,哪段代码挂掉了,资源将不会被关闭。
* 这里只做JDBC操作步骤的简单演示,具体异常处理之后会继续介绍
*/
}
}

Java JDBC的基础知识(一)的更多相关文章

  1. Java JDBC的基础知识(三)

    在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...

  2. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  3. Java JDBC的基础知识(五)

    本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...

  4. Java JDBC的基础知识(四)

    之前学习了如何创建一个数据库工具类,如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.Res ...

  5. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  6. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  7. Java面试题-基础知识

    参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...

  8. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)

    一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...

  9. JAVA核心技术I---JAVA基础知识(static关键字)

    一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...

随机推荐

  1. DotNetCore依赖注入实现批量注入

    文章转载自平娃子(QQ:273206491):http://os.pingwazi.cn/resource/batchinjectservice 一.依赖注入 通过依赖注入,可以实现接口与实现类的松耦 ...

  2. 【BZOJ1053】 反素数ant

    BZOJ1053 反素数ant 我们先考虑唯一分解定理求出约数个数: \(x=a_1^{p_1}a_2^{p_2}a_3^{p_3}...a_k^{p_k}\) 然后\(num=\Pi_{i=1}^k ...

  3. nginx-2.nginx是什么

    Nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器: Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以 ...

  4. 使用solr crud 的三种方式(了该)

    1.solrJ       实际是http 请/响 2.spring data solr 实际是对官方类库(solrJ)的封装 3.使用httpClient 手动请求

  5. 带你走进二进制-一次APT攻击分析

    原文:https://osandamalith.com/2017/06/04/apt-attack-in-bangladesh/ 由prison翻译整理,首发i春秋   引言;   这是一次来自遥远国 ...

  6. linux上安装redis4.0.9

    redis安装从3.0的版本到现在4.0的版本,现在装一个4.0的版本供大家学习使用. 先yum安装gcc yum -y install gcc 已加载插件:fastestmirror, langpa ...

  7. python 多版本管理pyenv和virtualenv虚拟开发环境

    pyenv是管理多个python版本的工具. 1.pyenv的安装 git clone https://github.com/yyuu/pyenv.git ~/.pyenv 2.将PYENV_ROOT ...

  8. WebRTC开发基础(WebRTC入门系列2:RTCPeerConnection)

    RTCPeerConnection的作用是在浏览器之间建立数据的“点对点”(peer to peer)通信. 使用WebRTC的编解码器和协议做了大量的工作,方便了开发者,使实时通信成为可能,甚至在不 ...

  9. Python code 提取UML

    Python是一门支持面向对象编程的语言,在大型软件项目中,我们往往会使用面向对象的特性去组织我们的代码,那有没有这样一种工具,可以帮助我们从已有代码中提取出UML图呢?答案是有的.以下,我们逐个介绍 ...

  10. android开发学习——day4

    自己手动创建空活动,创建和加载布局,效果:界面中出现靠上对齐的button 在活动中使用Toast,效果:对点击按钮做出响应 在活动中使用menu,效果:界面中出现菜单,并且点击对应选项会有响应 De ...