最美的年纪遇见你----JDBC
我在看一些视频教程的时候,在讲到JDBC这一章节的时候有的会直接简单介绍一下JDBC然后就开始教你怎么获取数据库连接了,但是也有的先给介绍了一下持久化相关的知识点,我觉得这个是比较好的,所以,我们也先来看看持久化和持久化技术。
持久化和持久化技术
什么是持久化(persistence)呢?
教程里是这样说的—把数据保存到可掉电式存储设备中以供之后使用。
大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
以我的简单理解,就是可以将数据长久保存—持久!那么涉及到的一些技术就是持久化技术了呗!好吧,就这样!
简单说下持久化之后就开始今天的主菜—-JDBC,想必或多或少你都听过这个家伙,那么它又是个什么玩意儿呢?
在之前学Java基础的时候想必你都清楚了类和接口的概念了吧!那么其实JDBC就是一些类和接口的集合,而且是接口居多!那么JDBC可以干什么呢?我们之前学过数据库,那个时候我们都是单独操作数据库的,包括增删改查我们可以使用命令行完成,那时候你要知道我们完全没用到Java吧!也就是当你在操作数据库进行增删改查的时候你并没有写Java代码吧!可是我们学数据库也是为了和Java结合啊,那么这之间就缺少一种媒介,而这个媒介就是可以让数据库与Java应用层之间达到沟通连接的作用,没错,这个媒介就是JDBC,我们看张图。
这张图里提到了几个概念名词,我们一一解释;
1. 应用程序,简单来说就是用Java编写的应用
2. JDBC API 其实就是JDBC中的各个接口和类,主要是接口偏多
3. 数据库驱动,我们说了JDBC其实是一组api,而他们的真正的实现类都在各个数据库驱动类中
4. 数据库,你懂的
基于此,我们可以了解到,我们用Java写的程序如果想跟数据库建立连接,那么程序会直接与JDBC打交道,然后JDBC通过驱动类去与数据库打交道,从而就达到了程序与数据库之间的连接作用,但是我们发现不同的数据库他们的驱动类是不一样的。JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统。JDBC本身使Java连接数据库的一个标准,是进行数据库连接的抽象层,由Java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成!
简单介绍了JDBC,那么接下来让我们看看这家伙到底可以干点什么吧!今天是JDBC的第一篇自学文章,所以我们先使用JDBC连接数据库并且在Java中用代码建立一张表吧!另外需要告知大家一声,在以后的数据库操作中,凡是没有特别说明吗,这里的数据库指MySQL!
这是MySQL的一个客户端,用起来比较方便,接下来我们将在jdbcdemo这个数据库中操作,我们将在这个数据库中创建一个新表t_one,那么该怎么做呢?下面开始写代码吧!
首先,我们要明确我们的目标—使用JDBC连接数据库并且创建一张名为t_one的表!
那么,请你记住JDBC连接数据库的操作步骤:
1. 加载注册驱动
2. 获取连接对象
3. 创建或者获取语句对象
4. 执行sql语句
5. 释放资源
接下来我们就详细的说一下每一个步骤,当然必须有代码啊!(没有代码的教程都是耍流氓)
1.加载注册驱动
加载注册驱动吗,这是什么鬼,什么意思呢?还记得之前那张关系图吗?Java应用程序是与JDBC直接打交道,而jdbc又是通过驱动类与数据库连接的,所以我们在使用JDBC连接数据的第一步就是要加载注册驱动,那么如何加载注册驱动呢?可以使用如下代码完成!(异常先抛出)
Class.forName("com.mysql.jdbc.Driver");
通过以上代码就可以实现MySQL驱动类的注册,当然可以注册驱动的方法可不止这一种,还有如下两种方式
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
也就是说JDBC加载注册驱动有三种方式,那么你猜哪种方式是被推荐的呢?
加载注册完驱动之后就可以进行下一步获取连接对象了,可使用如下代码
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo","root","123456");
getConnection这个参数接收的是一个url,这个后面会单独说。执行上述代码其实就已经链接到数据库了
接下来创建获取语句对象
Statement statement = connection.createStatement();
通过获取到这个语句对象,我们就可以对sql语句进行相关操作了,接下来我们执行sql语句来创建一张表
String sql = "CREATE TABLE `t_one` (`id` bigint(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
statement.executeUpdate(sql);
接下来最后一步就是释放资源
statement.close();
connection.close();
至此搞定,让我们来运行下程序看看效果吧!
这。。。。什么鬼,怎么会这样?其实你忽略了最重要的一个步骤就是将数据库驱动包加载到你的项目当中,我们知道使用JDBC连接数据库第一个步骤是加载注册驱动,而不同的数据库的驱动类又是不同的,那么你的MySQL驱动包呢?因此我们需要将MySQL的驱动包加载到项目当中,一般这个驱动包由各个数据库厂商提供,我这里的是mysql-connector-java-5.1.x-bin.jar,注意是jar包,不是zip包.在项目中新建lib文件夹将此jar包移到lib中,然后点击右键Build Path — Add To Build Path!至此搞定,再运行一遍试试!没有报错,然后刷新我们的数据库可以看到!
t_one这张表被成功创建!至此我们就使用Java代码利用JDBC连接到数据库并成功创建一张表,但是这里面依然有很多不足的地方,比如异常的正确处理以及代码的服用简洁等,别急,且听下回分解!
对了,给你们这个—-jdbc连接oracle、mysql等主流数据库的驱动类和url
oracle
driverClass:oracle.jdbc.driver.OracleDriver
url:jdbc:oracle:thin:@127.0.0.1:1521:dbname
mysql
driverClass:com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/mydb
PS:有的时候,mysql的驱动类也也会看到使用org.gjt.mm.mysql.Driver的情况,
org.gjt.mm.mysql.Driver是早期的驱动名称,后来就改名为com.mysql.jdbc.Driver,
现在一般都推荐使用 com.mysql.jdbc.Driver。在最新版本的mysql jdbc驱动中,为了保持对老版本的兼容,仍然保留了org.gjt.mm.mysql.Driver,但是实际上 org.gjt.mm.mysql.Driver中调用了com.mysql.jdbc.Driver,因此现在这两个驱动没有什么区别。
DB2
driverClass:com.ibm.db2.jcc.DB2Driver
url:jdbc:db2://127.0.0.1:50000/dbname
syBase
driverClass:com.sybase.jdbc.SybDriver
url:jdbc:sybase:Tds:localhost:5007/dbname
PostgreSQL
driverClass:org.postgresql.Driver
url:jdbc:postgresql://localhost/dbname
Sql Server2000
driverClass:com.microsoft.jdbc.sqlserver.SQLServerDriver
url:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname
Sql Server2005
driverClass:com.microsoft.sqlserver.jdbc.SQLServerDriver