一、JDBC简介(来自俞琰——数据库老师)

Java数据库编程主要使用JDBC技术。JDBC是一种用于执行SQL语句的Java API。它由一组用Java编写的类和接口组成。JDBC为开发人员提供了一个标准的API, 使他们能够用纯Java API来编写数据库应用程序。

利用JDBC, 向各种关系数据库发送的SQL语句就变成了一件很容易的事。换言之,利用JDBC API, 就不必专门为访问SQL Server数据库写一个程序,又专门为访问Oracle写一个程序,为访问Informix数据库又写一个程序。开发人员只需用JDBC API写一个程序就够了,它可向相应的数据库发送SQL语句。而且由于是使用Java编写的应用程序,就无需为不同的平台编写不同的应用程序。将Java和JDBC结合起来将使程序员只需写一遍程序就可让它在任何平台上运行。

JDBC在应用程序中的体系结构图如下所示:

JDBC 应用程序体系架构图

简单地说,JDBC可以做三件事情。

(1) 与数据库建立连接。

(2) 发送并执行SQL语句。

(3) 处理结果。

这些工作都是通过JDBC以下几个核心类来完成的。

1 DriverManager类

DriverManager类是JDBC的管理层,用于注册并跟踪可用的驱动程序,同时在数据库和相应的驱动程序之间建立连接。DriverManager类的所有成员都是静态成员,开发者在程序中无需对其进行实例化,可以直接通过类名来调用其方法。

(1) 加载可用驱动程序。

在JDBC中可以自动在DriverManager类中注册驱动程序,在程序中利用Class.forName( )方法加载指定的驱动程序,这将显式地加载驱动程序类。由于这与外部设置无关,因此推荐使用这种加载驱动程序的方法。其示例代码如下:

Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

(2) 建立连接

加载驱动程序类并在DriverManager类中注册后,即可与数据库建立连接了。对于简单的应用程序,开发者只需直接使用DriverManager.getConnection( )方法,准备建立与数据库的连接。当调用DriverManager.getConnection( )方法发出连接请求时,DriverManager类将检查加载的驱动程序,查看它是否可以建立连接。

以下代码是通常情况下用驱动程序建立连接时所需的示例代码。

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);//加载驱动程序

String url=”jdbc:odbc:MyDatSource”;//MyDataSource是用户建立的ODBC数据源

DriverManager.getConnection(url, “username”,”password”;

其中,DriverManager.getConnection( )方法将返回代表数据库连接的Connection对象。

2 Connection类

Connection对象代表与数据库的连接。调用DriverManager类的getConnection()方法将返回一个Connection对象。

Connection con=DriverManager.getConnection(String url, String username, String password);

其中,第一个参数是数据库的URL,它是一种标识数据库的方法,用来指定一个驱动程序连接的数据库。

JDBC中URL的标准语法由三部分组成,各部分间用冒号分隔,如下所示。

jdbc:<子协议>:<子名称>

其中,jdbc表示协议,并且JDBC中URL的协议总是jdbc。<子协议>表示驱动程序名或数据库连接机制的名称。子协议的典型示例是”odbc”,该名称是指定ODBC的数据资源名称的URL专门保留的。例如,为了通过JDBC-ODBC桥来访问某个数据库,可以使用如下的URL。

jdbc:odbc:MyDataSource

其中,子协议为”odbc”,子名称”MyDataSource“是本地ODBC数据源。

Connection类是JDBC中主要的类之一,从事务处理到创建语句,从管理连接到向数据库发送查询,它提供了许多功能。Connection中的方法按照功能划分主要有以下几类:

(1) 向数据库发送SQL语句

createStatement( ) 方法:创建Statement对象,此对象用于发送简单的SQL语句。

prepareStatement( )方法:创建PrepareStatement对象,此对象用于发送带有一个或多个输入参数(IN参数)的SQL语句,执行语句时,这些IN参数将被送到数据库中。

prepareCall( )方法:创建CallableStatement对象,此对象用于执行SQL存储过程,它从PreparedStatement中继承了用于处理IN参数的方法,而且还增加了用于处理OUT参数和INOUT参数的方法

(2)事务处理

void setAutoCommit( ) 方法:设置此连接是否为自动提交方式。

void commit( )方法:使本次数据库操作有效,它只能在非自动提交的情况下使用。

void rollback( )方法:使本次数据库操作无效,它也只能在非自动提交的情况下使用。

(3) 管理连接

void close( )方法:关闭数据库的连接并且释放所占用的JDBC资源。

void setReadOnly( )方法:将连接设置为只读。

3 Statement类

Statement对象是由Connection类的createStatement( )方法创建的,用于将SQL语句发送到数据库中,作为在给定连接上执行SQL语句的包容器,Statement对象用于执行不带参数的简单的SQL语句。

(1) 创建Statement对象

Statement对象可由Connection类的两种不同的createStatement( )方法创建,示例如下:

Statement stmt=con.createStatement();

Statement stmt=con.createStatement(int type, int concurrency);

其中,type的值决定滚动方式,取值可以是:

ResultSet.TYPE_FORWARD_ONLY,结果集的游标只能向下滚动。

ResultSet.TYPE_SCROLL_INSENSITIVE, 结果集的游标可以上下滚动,并且当结果集变化时,当前数据库不变。

ResultSet.TYPE_SCROLL_SENSITIVE,结果集的游标可以上下滚动,并且当结果集变化时,当前数据库同步变化。

Concurrency的值决定数据库是否可更新。

ResultSet.CONCUR_READ_ONLY,结果集为只读。

ResultSet.CONCUR_UPDATETABLE,结果集为可更新的。

(2) 使用Statementt对象执行SQL语句。

Statement提供三种执行SQL语句:executeQuery(), executeeUpdate()和execte(),具体使用哪个方法由SQL语句所产生的内容决定。

executeQuery()方法用于执行产生单个结果集的SQL语句,例如SELECT语句。

executeUpdate()方法用于执行那些不返回结果集的SQL语句。例如INSERT, UPDATE, DELETE语句,其返回值是一个整数,表示受影响的行数。

execute()方法用于执行返回多个结果集的SQL语句。

(3) 关闭Statement对象

Statement对象将由Java垃圾回收程序自动关闭。而为了养成一种好的编程习惯,应在不需要Statement对象时显式地调用close()方法关闭它们。这将立即释放DBMS资源,有助于避免潜在的内存问题。

4 ResultSet类

ResultSet类提供对数据结果集的访问机制。结果集是一个二维表结构,其中包含查询所返回的列标题及相应的值。根据创建ResultSet对象的Statement及其子类的类型不同,ResultSet也分为单向ResultSet和可滚动的ResultSet。

(1) 行和光标

ResultSet类始终有一个游标指向其当前数据行。生成ResultSet对象时,游标总是定位在第一行的前面。每调用一次next()方法,光标将向下移动一行。因此第一次调用next()方法时,将把光标于第一行上,使它成为当前行。这样通过调用next()方法可以按照从上至下的次序获取ResultSet的行。

对于可滚动ResultSet,JDBC2.0提供了更多的支持光标移动的方法。

ResultSet.previous();将光标上移一行。

ResultSet.first() 将光标移到结果集的第一行

ResultSet.last() 将光标移到结果集的最后一行

ResultSet.beforeFirst() 将光标移到结果集的第一行之前

ResultSet.afterLast() 将光标移到结果集的最后一行之后

ResultSet.absolute(int row):将光标移到参数row指定的行,若row为负值,就是倒数的行数

ResultSet.relative(int rows)以当前光标位置为基准,将光标向下或向上移动rows行

(2) 列

getXXX()方法提供了获得当前行中某列值的途径。在每一行内,可按任意次序获取列值。但为了保证可移植性,应该从左至右获取列值。列名或列好可用于标识要从中获取数据的列。例如,如果ResultSet对象rs的第二列名为title,并将值存储为字符串,则下列任意代码都将获取存储在该列中的值。

String s=rs.getString(“title”);

String s=rs.getString(2);

ResultSet中列的信息,被称作结果集的元数据,它被存储在ResultSetMetaData对象。可通过调用ResultSet.getMetaData()方法得到。返回的ResultSetMetaData对象将给出其对应的ResultSet对象中各列的编号、类型和属性。

Mysql——JDBC编程 理论介绍的更多相关文章

  1. JDBC编程理论知识(1)

    1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组 ...

  2. Mysql——JDBC编程 简单的例子

    第一类连接Mysql方法见下图: 第二类连接Mysql方法:(跟第一类差不多,并提供查询操作) 首先在Mysql中建立testjdbc数据库,在该数据库下面建立Student表: 参考代码: CREA ...

  3. 第十三章.MySQL数据库与JDBC编程(下)

    JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...

  4. MySQL之JDBC编程增删改查

    MySQL之JDBC 一.JDBC是什么 Java DatabaseConnectivity (java语言连接数据库) 二.JDBC的本质 JDBC是SUN公司制定的一套接口(interface). ...

  5. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

  6. 《MySQL 存储过程编程》-读书笔记

    本书结构: 第一部分:存储编程基础 第1章:存储过程程序基础 第2章:MySQL存储编程指南 第3章:语言基础 第4章:语句块 第5章:在存储程序中使用SQL 第一章:MySQL存储程序介绍 存储程序 ...

  7. JDBC编程之事务的使用教程

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html  关于事务的理论知识.ACID特性等等,网上太多了,在此不一一重复.本文主要着重  事务 ...

  8. 深入浅出MyBatis:JDBC和MyBatis介绍

    JDBC相关概念 Java程序都是通过JDBC连接数据库的,通过SQL对数据库编程,JDBC是由SUN公司提出的一些列规范,只定义了接口规范,具体实现由各个数据库厂商去实现,它是一种典型的桥接模式. ...

  9. 单独使用jdbc编程问题总结(一)

    在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...

随机推荐

  1. Oracle 创建表空间、临时表空间、创建用户并指定表空间、授权,删除用户及表空间

    /* 说明:若已经存在相应的用户和表空间,则需要先删除相应的用户和表空间 然后再全部重新建立 */ --删除用户 drop user USERNAME cascade; --删除表空间 drop ta ...

  2. EasyUI datagrid 过滤事件段

    //dateTimeRange过滤扩展 $.extend($.fn.datagrid.defaults.filters, { dateRange: { /*onInit: function(targe ...

  3. 基于SpringMVC+Ext.js的权限管理系统(无权限框架)

    代码地址如下:http://www.demodashi.com/demo/12811.html 0.准备工作 注意!!! 本案例数据库相关请下载例子包,内有数据库脚本.EXCEL数据表和详细的设计文档 ...

  4. $on、$emit和$broadcast的使用

    $emit只能向parent controller传递event与data( $emit(name, args) ) $broadcast只能向child controller传递event与data ...

  5. Android实现一键获取课程成绩dome

    欢迎转载但请标明出处:http://blog.csdn.net/android_for_james/article/details/50984493 两周废寝忘食的创作最终成功了,如今拿出来分享一下. ...

  6. Apollo-open-capacity-platform 微服务能力开发平台 (转)

    来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...

  7. ppm\pgm格式

    PGM 是便携式灰度图像格式(portable graymap file format),在黑白超声图像系统中经常使用PGM格式的图像.文件的后缀名为".pgm". PGM格式图像 ...

  8. .net验证控件,导航控件

    一.客户端验证(用户体验,减少服务器端压力) 二.服务器端验证(防止恶意攻击,客户端js很容易被绕过) 验证控件:RequiredFieldValidator:字段必填:RangeValidator: ...

  9. 《Python基础教程》第20章学习笔记

    python实现:https://github.com/captainwong/instant_markup c++实现:https://github.com/captainwong/instant_ ...

  10. Java学习笔记之equals和Objects.equals

    equals 相信大家就知道,就是比较,我们平时也会在自己定义的类中加入自己重写的equals用来比较两个类是否相同,例如这样 public class Person { private String ...