jdbc与java数据库编程知识整理

JDBC概述

•什么是JDBC

JDBC(Java DataBase Connectivity)

称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。

•JDBC的结构可划分为两层:

JDBC Driver Interface(驱动程序管理器接口)

JDBC API

•JDBC优缺点

–优点:

•JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。

•JDBC支持不同的关系数据库,这使得程序的可移植性大大加强。

•JDBC API是面向对象的,可以让用户把常用的方法封装为—个类,以备后用

–缺点:

•使用JDBC,访问数据记录的速度会受到一定程度的影响。

•JDBC结构中包含不同厂家的产品,这就给更改数据源带来了很大的麻烦。

•JDBC核心接口与类

•JDBC核心类库包含在java.sql包中。

–类

•DriverManager:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接。

•SQLException-有关数据库操作的异常

–接口:

•Connection:特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。

•PreparedStatement:表示预编译的 SQL 语句的对象。

•Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。

•ResultSet :表示数据库结果集的数据表,通常通过执行查询数据库的语句生成 。

•CallableStatement :用于执行 SQL 存储过程的接口 。

创建JDBC应用

•创建JDBC应用程序的步骤

–1.载入JDBC驱动程序

–2.定义连接URL

–3.建立连接

–4.创建Statement对象

–5.执行查询或更新

–6.结果处理

–7.关闭连接

•数据库驱动程序

–数据库驱动程序分类

•Type 1: jdbc-odbc桥

–把JDBC API调用转换成ODBC API 调用, 然后ODBC API调用针对供应商的ODBC 驱动程序来访问数据库, 即利用JDBC- ODBC 桥通过ODBC来存储数据源 。

•Type 2: 本地API驱动

–本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库. 这种方法需要本地数据库驱动代码。讯。

•Type 3: 网络协议驱动

–它使用一种与具体数据库无关的协议将数据库请求发送给一个中间服务器。

•Type 4: 本地协议驱动

– 这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求.由于4型驱动写的应用可以直接和数据库服务器通讯,这种类型的驱动完全由java实现,因此实现了平台独立性。

•通常开发中多采用第四种方式,这种驱动不需要先把jdbc的调用传给odbc或本地数据库接口或者是中间层服务器,所以它的执行效率是非常高的驱动

•数据库驱动程序

–各数据库厂商均提供对 JDBC 的支持,即提供数据库连接使用的驱动程序文件

–需要为数据库应用程序正确加载驱动程序文件以获得数据库连接,实施操作

–Oracle 数据库的 JDBC 驱动程序文件 “ojdbc14.jar”(Oracle官方网站下载)

•加载 JDBC 驱动程序

–Class 类中提供加载驱动程序的方法:

className-表示类的描述符的字符串

–Oracle 驱动的类描述符为:

public static Class forName(String className) throws ClassNotFoundException

oracle.jdbc.driver.OracleDriver

–示例:

–在工程主类 JdbcOracleTest 的 main 方法中增加加载 Oracle 驱动的代码:

•声明表示 Oracle 驱动类描述符的字符串变量 driver

•调用 Class 类的静态方法 forName 加载该驱动(注意异常处理)

•建立与数据库的连接

–DriverManager 类提供 getConnection 方法可获得指定数据库的连接对象:

–Oracle 数据库的 url 格式为:

public static Connection getConnection (String url, String userName, String password) throws SQLException

jdbc:oracle:thin:@<主机名或IP>:1521:<数据库名>

–示例

–修改类 JdbcOracleTest 的 main 方法:

•声明表示指定数据库url的字符串变量 url

•分别声明表示用户名和口令的字符串变量 userName 和 password,分别初始化为 "SCOTT" 和 "TIGER“

•声明Connection接口对象con,赋值为 DriverManager类的getConnection方法的返回值

•输出打印 “数据库连接成功” 的提示信息

•获得 Statement 对象

–Connection接口中提供可获得 Statement 对象的方法:

–可调用重载的 createStatement 方法,可指定参数,设置数据库操作结果的相关属性。

•执行 SQL 语句

–Statement接口提供可执行 SQL 命令的方法:

boolean execute(String sql) throws SQLException

ResultSet executeQuery(String sql) throws SQLException

int executeUpdate(String sql) throws SQLException

–示例(查询)

–在工程主类 JdbcOracleTest 的 main 方法中增加操作数据库的代码:

•获得可发送SQL命令的Statement对象st

•调用对象st的excuteQuery方法发送SQL查询命令,查询SCOTT下的表DEPT,获得所有记录数据,返回结果集对象rs

•操作结果集对象

–ResultSet接口提供可对结果集进行操作的方法:

•移动结果集操作指针:

•指定数据类型根据传入列的名字获取指定列的值:

•指定数据类型根据传入列的编号获取指定列的值:

boolean next() throws SQLException

Xxx getXxx(String columnName) throws SQLException

Xxx getXxx(1) throws SQLException

•关闭操作对象及连接

•可调用接口ResultSet、Statement、Connection 中的关闭方法,立即释放数据库和 JDBC 相关资源:

void close() throws SQLException

–示例

–在工程主类 JdbcOracleTest 的 main 方法中增加关闭数据库操作对象的代码:

•关闭结果集对象 rs

•关闭 Statement 对象 st

•关闭 Connection 对象 con

•JDBC日期时间处理

•对于数据库种不同的时间类型,要分别采用与之相对应的Java包装类来存取:

–日期类型用java.sql.Date

–时间类型用java.sql.Time

–日期/时间类型用java.sql.Timestamp;

–getTimestamp()可以把年月日时分秒都取出来,getDate()只能取出年月日,getTime()只能取出时分秒。

•JDBC的日期/时间类型转换为字符串

–Timestamp timeStamp = //通过数据库访问获取到该数据

–SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

–String str = sdf.format(timeStamp);

•java.sql.Timestamp如何转换为java.util.Date

–java.sql.Timestamp是java.util.Date的子类,不需要做任何转换直接赋值即可:

–java.sql.Timestamp ts;

–java.util.Date utilDate;

–utilDate = ts;

•java.util.Date如何转换为java.sql.Timestamp

–java.util.Date是java.sql.Timestamp的父类,要这样转换:

–java.sql.Timestamp ts;

–java.util.Date utilDate;

–ts.setTime(utilDate.getTime());

•PreparedStatement接口

–PreparedStatement接口是Statement接口的子接口,允许使用不同的参数多次执行同样的 SQL 语句。

–Connection接口提供创建PreparedStatement对象的方法,可指定SQL语句:

PreparedStatement prepareStatement(String sql) throws SQLException

PreparedStatement pstmt = con.prepareStatement ("INSERT INTO EMP VALUES(?,?)"); pstmt.setInt(1, 99); pstmt.setString(2, "Tom"); int count = pstmt.executeUpdate( );

•PreparedStatement接口优点:

–可动态设置参数

–增加了预编译功能

–提高执行速度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,608评论 18 399
  • 本人的环境为Myeclipse10、MySQL5.7.15 本文包括:简介JDBC编程步骤打通数据库程序详解—Dr...
    廖少少阅读 3,936评论 7 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 对于寺庙,对于出家人,大部份人如未上出家班之前的我一样,对寺庙、对佛法是陌生的,对寺庙的生活是好奇的。那么,借此机...
    当时明月在zh阅读 3,786评论 31 31
  • 翻看新闻,其中有写到贫困地区的一群“少女妈妈”。 有一位16岁的妈妈(化名:阿兰)抱着刚出生的孩子还一脸天真地说:...
    因儿阅读 287评论 0 0