Mysql——JDBC编程 理论介绍
一、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编程 理论介绍的更多相关文章
- JDBC编程理论知识(1)
1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组 ...
- Mysql——JDBC编程 简单的例子
第一类连接Mysql方法见下图: 第二类连接Mysql方法:(跟第一类差不多,并提供查询操作) 首先在Mysql中建立testjdbc数据库,在该数据库下面建立Student表: 参考代码: CREA ...
- 第十三章.MySQL数据库与JDBC编程(下)
JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...
- MySQL之JDBC编程增删改查
MySQL之JDBC 一.JDBC是什么 Java DatabaseConnectivity (java语言连接数据库) 二.JDBC的本质 JDBC是SUN公司制定的一套接口(interface). ...
- 浅谈JDBC编程
一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...
- 《MySQL 存储过程编程》-读书笔记
本书结构: 第一部分:存储编程基础 第1章:存储过程程序基础 第2章:MySQL存储编程指南 第3章:语言基础 第4章:语句块 第5章:在存储程序中使用SQL 第一章:MySQL存储程序介绍 存储程序 ...
- JDBC编程之事务的使用教程
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html 关于事务的理论知识.ACID特性等等,网上太多了,在此不一一重复.本文主要着重 事务 ...
- 深入浅出MyBatis:JDBC和MyBatis介绍
JDBC相关概念 Java程序都是通过JDBC连接数据库的,通过SQL对数据库编程,JDBC是由SUN公司提出的一些列规范,只定义了接口规范,具体实现由各个数据库厂商去实现,它是一种典型的桥接模式. ...
- 单独使用jdbc编程问题总结(一)
在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...
随机推荐
- .net用url重写URLReWriter实现任意二级域名
.net用url重写URLReWriter实现任意二级域名 这两天需要用到URLReWriter来搞那个猪头的Blog,网上看到篇好文,收藏 摘要:解释了url重写的相关知识.用asp.net实现二级 ...
- 跨discuz站获取
1.在需要取得formhash的页面加入下面js代码,还需要jquery库. <script lanuage="javascript"> $(function(){ $ ...
- xml格式发送
1. namespace xml格式发送 { /// <summary> /// 实体转Xml,Xml转实体类 /// </summary> /// <typeparam ...
- java中常用的类型转换
1.将字符串转换成整数(String--->int)方法一: (1) int i = Integer.parseInt(String s); 其中(1)其实就是我们经常用到的将s转换为10进 ...
- 浅谈BloomFilter【上】基本概念和实现原理
在日常生活中.包括在设计计算机软件时,我们常常要推断一个元素是否在一个集合中. 比方在字处理软件中,须要检查一个英语单词是否拼写正确(也就是要推断 它是否在已知的字典中).在 FBI. ...
- 快速搭建一个成熟,强壮的App框架【转载】
App框架搭建 招聘信息: iOS 研发工程师 iOS开发工程师 iOS开发实习工程师 新浪微博-Android开发工程师&iOS开发工程师 美术设计师(2D) UI设计师 cocos2dx手 ...
- 三星DRAM+NAND FLASH 合成MCP芯片介绍及应用攻略
转自:http://blog.csdn.net/gao5528/article/details/6256119 三星DRAM+NAND FLASH 合成MCP芯片介绍及应用攻略(K5系列产品篇) 一年 ...
- 交易应用及网站驱动不兼容Windows 10的解决方案
微软公司于2015年7月29日正式发布了Windows 10操作系统.全球范围内已有数以千万计的用户踊跃地升级到了Windows 10,在新用户享受Windows 10所带来的全新使用体验的同 ...
- mysql 优化下
比较全面的MySQL优化参考(下篇) 8条回复 本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分 ...
- MIC性能优化策略
MIC性能优化主要包括系统级和内核级:系统级优化包括节点之间,CPU与MIC之间的负载均衡优化:MIC内存空间优化:计算与IO并行优化:IO与IO并行优化:数据传递优化:网络性能优化:硬盘性能优化等. ...