JDBC中的主要类(接口)

在JDBC中常用的类有:

1、DriverManager

2、Connection

3、Statement

4、ResultSet

1、DriverManager

其实我们今后只需要会用DriverManager的getConnection( )方法即可:

1. Class.forName(“com.mysql.jdbc.Driver”);//注册驱动

2. String url = “jdbc:mysq  l://localhost:3306/mydb1”;

3. String username = “root”;

4. String password = “123”;

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

注意,上面代码可能出现的两种异常:

1.  ClassNotFoundException:这个异常是在第1句上出现的,出现这个异常有两个可能:

没有给出mysql的jar包;

把类名称打错了,查看类名是不是com.mysql.jdbc.Driver。

2. SQLException:这个异常出现在第5句,出现这个异常就是三个参数的问题,往往username和password一般不是出错,所以需要认真查看url是否打错。

对于DriverManager.registerDriver()方法了解即可,因为我们今后注册驱动只会Class.forName(),而不会使用这个方法。

2、Connection

Connection最为重要的方法就是获取Statement:

Statement stmt = con.createStatement();

后面在学习ResultSet方法时,还要学习一下下面的方法:

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


3、Statement

Statement最为重要的方法是:

(1) int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;

(2) ResultSetexecuteQuery(String sql):执行查询操作,执行查询操作会返回ResultSet,即结果集。

(3) booleanexecute ( )           (了解即可)

Statement还有一个boolean execute()方法,这个方法可以用来执行增、删、改、查所有SQL语句。

该方法返回的是boolean类型,表示SQL语句是否有结果集!。

如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。

如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。

4、ResultSet之滚动结果集(了解)

下一行:默认只能使用它,其他的方法存在,但不能使用!默认的结果集不可滚动!

上一行

下N行

上N行

到N行!

ResultSet表示结果集,它是一个二维的表格!ResultSet内部维护一个行光标(游标),ResultSet提供了一系列的方法来移动游标

void beforeFirst():把光标放到第一行的前面,这也是光标默认的位置;

void afterLast():把光标放到最后一行的后面;

boolean first():把光标放到第一行的位置上,返回值表示调控光标是否成功;

boolean last():把光标放到最后一行的位置上;

boolean isBeforeFirst():当前光标位置是否在第一行前面;

boolean isAfterLast():当前光标位置是否在最后一行的后面;

boolean isFirst():当前光标位置是否在第一行上;

boolean isLast():当前光标位置是否在最后一行上;

boolean previous():把光标向上挪一行;

boolean next():把光标向下挪一行;

boolean relative(int row):相对位移,当row为正数时,表示向下移动row行,为负数时表示向上移动row行;

boolean absolute(int row):绝对位移,把光标移动到指定的行上;

int getRow():返回当前光标所有行。

获取结果集元数据!

得到元数据:rs.getMetaData( ),返回值为ResultSetMetaData;

获取结果集列数:int getColumnCount( )

获取指定列的列名:String getColumnName(int colIndex)

结果集特性:当使用Connection的createStatement时,已经确定了Statement生成的结果集是什么特性。

是否可滚动、是否敏感、是否可更新

con.createSttement():生成的结果集:不滚动、不敏感、不可更新!

con.createStatement(int,int):

第一个参数:

l  ResultSet.TYPE_FORWARD_ONLY:不滚动结果集;

l  ResultSet.TYPE_SCROLL_INSENSITIVE:滚动结果集,但结果集数据不会再跟随数据库而变化;

l  ResultSet.TYPE_SCROLL_SENSITIVE:滚动结果集,但结果集数据不会再跟随数据库而变化;

第二个参数:

CONCUR_READ_ONLY:结果集是只读的,不能通过修改结果集而反向影响数据库;

l  CONCUR_UPDATABLE:结果集是可更新的,对结果集的更新可以反向影响数据库。

上面方法分为两类,一类用来判断游标位置的,另一类是用来移动游标的。

如果结果集是不可滚动的,那么只能使用next()方法来移动游标,而beforeFirst()、afterLast()、first()、last()、previous()、relative()方法都不能使用!!!

结果集是否支持滚动,要从Connection类的createStatement()方法说起。也就是说创建的Statement决定了使用Statement创建的ResultSet是否支持滚动。

StatementcreateStatement(int resultSetType, int resultSetConcurrency)

resultSetType的可选值:

ResultSet.TYPE_FORWARD_ONLY:不滚动结果集;

ResultSet.TYPE_SCROLL_INSENSITIVE:滚动结果集,但结果集数据不会再跟随数据库而变化;

ResultSet.TYPE_SCROLL_SENSITIVE :滚动结果集,但结果集数据不会再跟随数据库而变化;

可以看出,如果想使用滚动的结果集,我们应该选择TYPE_SCROLL_INSENSITIVE!其实很少有数据库驱动会支持TYPE_SCROLL_SENSITIVE的特性!通常我们也不需要查询到的结果集再受到数据库变化的影响。

resultSetConcurrency的可选值:

CONCUR_READ_ONLY:结果集是只读的,不能通过修改结果集而反向影响数据库;

CONCUR_UPDATABLE:结果集是可更新的,对结果集的更新可以反向影响数据库。

通常可更新结果集这一“高级特性”我们也是不需要的!

获取滚动结果集的代码如下:

Connection con= …

Statement stmt= con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,CONCUR_READ_ONLY);

String sql = …//查询语句

ResultSet rs =stmt.executeQuery(sql);//这个结果集是可滚动的

5、ResultSet之获取列数据

可以通过next()方法使ResultSet的游标向下移动,当游标移动到你需要的行时,就需要来获取该行的数据了,ResultSet提供了一系列的获取列数据的方法:

String getString(int columnIndex):获取指定列的String类型数据;

int getInt(int columnIndex):获取指定列的int类型数据;

double getDouble(int columnIndex):获取指定列的double类型数据;

boolean getBoolean(int columnIndex):获取指定列的boolean类型数据;

Object getObject(int columnIndex):获取指定列的Object类型的数据。

上面方法中,参数columnIndex表示列的索引,列索引从1开始,而不是0,这第一点与数组不同。如果你清楚当前列的数据类型,那么可以使用getInt()之类的方法来获取,如果你不清楚列的类型,那么你应该使用getObject()方法来获取。

ResultSet还提供了一套通过列名称来获取列数据的方法:

String getString(String columnName):获取名称为columnName的列的String数据;

int getInt(String columnName):获取名称为columnName的列的int数据;

double getDouble(String columnName):获取名称为columnName的列的double数据;

boolean getBoolean(String columnName):获取名称为columnName的列的boolean数据;

Object getObject(String columnName):获取名称为columnName的列的Object数据;

关于JDBC的使用详解请查看      JDBC操作详解

JDBC中常用对象介绍的更多相关文章

  1. BOM模型中常用对象 定义计数器 网页跳转 网页前进后退

    今天上午学了的BOM模型中常用对象,了解了一部分的属性 For循环的规律 外层循环控制行 内层循环控制列 <!doctype html> <html> <head> ...

  2. JDBC中常用的类和接口

    <零基础学Java> JDBC中常用的类和接口 利用JDBC的这些类和接口可以更方便地访问并处理存储在数据库中的数据. DriverManager类 DriverManager类 是JDB ...

  3. JDBC中常用的接口

    JDBC常用的接口DriverManager 驱动管理器获得数据库链接 Connection 数据库链接接口 Statement 语句接口,用来静态操作SQL语句 PreparedStatement ...

  4. day18-事务与连接池 3.jdbc中事务操作介绍

    那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...

  5. JavaScript常用对象介绍

    目录 对象(object) 对象的创建方式 点语法 括号表示法 内置对象 Array 数组创建方式 检测数组 转换方法 分割字符串 栈方法 队列方法 重排序方法 操作方法 位置方法 迭代方法 Stri ...

  6. Python操作Word:常用对象介绍

    前面已经介绍过了试用win32com类库来进行Word开发,系列文章<Python操作Word>是继承了前面的文章,所以,你应该先查看前面的文章,其实只有两篇,文章地址列在最下面的参考资料 ...

  7. iOS开发之网络编程--1、AFNetwork 3.x 的所有开发中常用基础介绍

    前言:第三方网络请求框架中AFNetwork 3.x收欢迎程度相当高的: 由于iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载 ...

  8. C#中常用接口介绍

    1. IComparable接口 IComparable接口定义通用的比较方法.由类型使用的IComparable接口提供了一种比较多个对象的标准方式.如果一个类要实现与其它对象的比较, 则必须实现I ...

  9. Web中常用字体介绍(转)

    1.在Web编码中,CSS默认应用的Web字体是有限的,虽然在新版本的CSS3,我们可以通过新增的@font-face属性来引入特殊的浏览器加载字体. 浏览器中展示网页文字内容时,文字字体都会按照设计 ...

随机推荐

  1. canvas+js+面向对象的圆形封装

    效果: Circle.js /* 1. 封装属性: x, y r, fillStyle strokeStyle opacity 2.render */ function Circle(option) ...

  2. linux下线程的分离和结合属性

    在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈)是不释放的.相反, ...

  3. 在Eclipse平台中,搭建SpringBoot开发环境

    1.查看eclipse版本号,Help->About Eclipse IDE 2.下载对应版本的STS插件 下载地址:https://spring.io/tools3/sts/all(注意版本对 ...

  4. 洛谷 P2014 选课(树形背包)

    洛谷 P2014 选课(树形背包) 思路 题面:洛谷 P2014 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲.然后,本来本题所有树是森林(没有共同祖先),但是题中的 ...

  5. chm 已取消到该网页的导航,打不开!

    方法 11. 双击此 .chm 文件. 2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框. 3. 单击“打开”. 方法 21. 右键单击该 CHM 文件,然后单击“属性”. ...

  6. Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式、rpm方式和yum方式)

    不多说,直接上干货! 福利每天都有  =>  =>=>=>=> 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师  ...

  7. Redis之hiredis API (String)

    String // // Created by zhangrongxiang on 2018/3/7 13:48 // File string2 // #include <hiredis/hir ...

  8. Java的访问权限(public并不等于默认)

    一共有四种访问权限,对应四个范围 1.private :只有本类内可以使用,即使是子类也没权使用 2.protect :子类和友好类能够使用,继承中经常用到 3.默认值,(就是什么都没写),只有同包名 ...

  9. [PY3]——函数——函数注解 | 实现类型检查功能

    函数注解(Function Annotations)——> 可以在定义函数的时候对参数和返回值添加注解 写函数注解 #平时我们使用help()可以查看一个函数的说明,我们自己写的函数也可以提供这 ...

  10. JAVA泛型——逆变

    在上篇<JAVA泛型——协变>这篇文章中遗留以下问题——协变不能解决将子类型添加到父类型的泛型列表中.本篇将用逆变来解决这个问题. 实验准备 我们首先增加以下方法,见代码清单1所示. 代码 ...