数据库连接

数据库概述

数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS) :指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

常见数据库管理系统

  • MySQL
    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
  • Orcale
    Oracle数据库被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
  • DB2
    DB2是IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
  • Microsoft SQL Server
    SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。

SQL语言

DDL

Data Definition Language 数据定义语言

  • 作用:用来定义数据库对象:库、表、列等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* 操作数据库 */
--增 create
create database 数据库名; --创建新的数据库
create database 数据库名 character set GBK;--创建新的字符集为GBK的数据库
--查 show
show databases;--查看DBMS中所有的数据库
show create database 数据库名;--查看数据库的定义信息
--改 alter
alter database 数据库名 character set utf8;--把数据库改成utf8字符集
--删 drop
drop database 数据库名;--删除数据库
--其他
use 数据库名;--使用数据库
select database();--查看当前正在使用的数据库
flush privileges;--刷新数据库

/* 操作表 */
--增 create
create table 表名(--创建新表
字段名1 字段类型(长度) [约束],
字段名2 字段类型(长度) [约束],
...
);
--查 show
show tables;--查询数据库中有的表
show create table 表名;--查看表格的创建细节
desc 表名;--查看表的字段信息
--改 alter
alter table 表名 add 列名 数据类型[约束];--添加一个列
alter table 表名 change 旧列名 新列名 新数据类型[约束];--修改列的列名
alter table 表名 modify 列名 新数据类型[约束];--修改列的数据类型
alter table 表名 drop 列名;--删除表的列
alter table 表名 AUTO_INCREMENT=5;--重新设置自增id
rename table 旧表名 to 新表名;--修改表名
alter table 表名 character set 字符集;--修改表的字符集
--删 drop
drop table 表名;
drop table if exists 表名;--如果表存在,则删除;如果不存在,也不会报错.这种语句是MySql特有的语句,其他的数据库都是不支持这种语法的

DML

Data Manipulation Language 数据操作语言

1
2
3
4
5
6
7
8
9
10
11
12
13
--增 insert
insert into 表名 values(字段值1,字段值2, ...);--全字段插入
insert into 表名(字段1) values(字段值1);--部分字段插入
insert into 表名 values(记录1的所有字段),(记录2的所有字段)...;--一次性插入多条 数据
--改 update
update 表名 set 列名1=列值1,列名2=列值2 ... where 列名=值;--修改操作
update 表名 set 列名1=列值1;--没有where条件的,会直接修改所有列名的值
update 表名 set 列名1 = replace(列名1,'原内容','要替换的内容');--批量替换字段里的字符串
--删 delete
delete from 表名 where 列名=值;--删除表中条件是where的
delete from 表名;--删除表中所有数据,表结构还在,删除后的数据可以找回
truncate table 表名;--删除表中所有数据,把表直接drop掉,然后再创建一个同样的新表-删除的数据不能找回。该命令会让id重新从1开始自动递增

DQL

Data Query Language 数据查询语言

  • 作用:用来查询记录(数据)
    查询语句的顺序
    书写顺序:select → from →join on → where → group by → having → order by → limit
    执行顺序:from → join on → where → group by → having → select → order by → limit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* 简单查询 */
select * from emp;--查询所有列
select empno,ename,job from emp;--查询指定的列
select empno as '编号',ename as '别名' from emp;--给列起别名(as可以省略可以使用"",''或者不使用引号)
select e.empno,e.ename from emp as e;--给表起别名,表中的字段也能通过表的别名来调用
/* 条件查询 */
--条件语句 > < >= <= !=(<>) =
--and(&&)
select * from emp where deptno=10 and sal>2000;--可以使用&&带代替
--or(||)
select * from emp where ename='smith' or sal=5000;--可以使用||来代替
--between...and
select * from emp where ename between 'A' and 'F';--BETWEEN AND作用于字符型的数据的时候,包含第一个边界值,但是不包含第二个边界值
--in(set)
select * from emp where sal in(800,1600);--in表示包含的意思
--is null (尽量不要使用,会导致索引失效)
select * from emp where comm is null;--对于null的判断不能使用=号
--not
select * from emp where deptno !=10;
select * from emp where deptno <>10;
select * from emp where not deptno =10;
select * from emp where comm is not null;
select * from emp where not comm is null;
--注意
--对于字符型的数据,是严格区分大小写的
--Oracle在任何的平台上都是严格区分字符型数据大小写的
--MySql在Liunx/Unix平台上严格区分字符型数据大小写,但是在window平台上不区分字符型数据大小写
--可以使用BINARY关键字,让MySql在window平台上也严格字符字符型数据的大小写
select * from emp where binary ename='smith';
/* 模糊查询 */
select * from emp where ename like '_M%';-- _ :任意一个字母 查询第二个字母是m的人
select * from emp where ename like '%m%';-- %:任意0~n个字母 查询名字包含m的人
/* 字段控制查询 */
select salary*12 as '年薪' from emp;--可以使用算术表达式将月薪以年薪的形式显示
select distinct deptno from emp;--去掉重复值查询
select *,sal+ifnull(comm,0) from emp;
/* 排序 */
select * from emp order by sal asc;--升序排序,可默认不写
select * from emp order by sal desc;--降序排序
select * from emp order by sal desc,empno asc;--按月薪降序排序,如果月薪相同,按编号升序排序
/* 单行函数 */
--year(日期字段) 将日期格式化为年(月日时分秒同理)
select year(now())--输出今年
select year('2018-01-01');--2018
--substr(被截取字段名称,起启下标,截取长度) 截取字符串的函数
select ename,substr(ename,2,1) from emp;
--length(str) 返回字符型数据的长度
select ename,length(ename) from emp;
select * from emp where length(ename)=5;--查询名字的长是5的员工
--lower(str) 把字符型数据转换为小写的字符
select ename,lower(ename) from emp;
--upper(str) 把字符型数据转换为大写的字符
select * from emp where binary ename=upper('smith');
/* 聚合函数 */
--count() 统计指定列不为NULL的记录行数
select count(*) from emp;
select count(*) from emp where sal+ifnull(comm,0)>2500
--max() 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
select max(sal) from emp;
--min() 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
select min(sal) from emp;
--sum() 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
select sum(sal) from emp;
--avg() 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
select avg(sal) from emp;
/* 分组查询 */
--分组查询
select deptno,sum(sal) from emp group by deptno;
--HAVING子句
select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
--having与where的区别:where是先筛选后分组;having是先分组后筛选
/* LIMIT */
--分页查询
select * from emp limit 5;--查询5行记录,默认从0开始
select * from emp limit 0,5;--查询5行记录,起始行从0开始
select * from emp limit 3,10;--查询10行记录,起始行从3开始
--注意:LIMIT只能在MySql和SqlServer中有效
/* 多表查询(跨表查询) */
--联合查询
--说明:合并结果集就是把两个select语句的查询结果合并到一起,被合并的两个结果:列数、列类型必须相同
--union 去除重复记录
--union all 不去除重复记录
--连接查询
--内连接
--等值连接:建立在父子表关系上,用等号来连接两个表
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e,dept d
where e.deptno=d.deptno;--SQL1992语法
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
inner join dept d on(e.deptno=d.deptno);--SQL1999语法
--使用内连接的时候,inner可以忽略
--非等值连接:两个表之间没有父子关系,用非等号来连接两个表
select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisal
from emp e,salgrade s
where e.sal between s.losal and s.hisal;--SQL1992语法
select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisal
from emp e
join salgrade s on e.sal between s.losal and s.hisal--SQL1999语法
--自连接:使用别名将一个表虚拟成两个表(父子表),然后再这两个表上面做等值连接
select e.empno '员工编号',e.ename '员工姓名',m.empno '经理编号',m.ename '经理姓名'
from emp e,emp m
where e.mgr=m.empno && m.empno=7698--SQL1992语法
select e.empno '员工编号',e.ename '员工姓名',m.empno '经理编号',m.ename '经理姓名'
from emp e
join emp m on(e.mgr=m.empno)
where m.empno=7698--SQL1999语法
--外连接
--左外连接(LEFT OUTER JOIN):左外连接可以把左表中不满足对应关系的数据查询出来
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
left outer join dept d on e.deptno=d.deptno;--使用外连接的时候,outer可以忽略
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from dept d
left join emp e on e.deptno=d.deptno;--左表的位置是相对的
--右外连接(RIGHT OUTER JOIN):右外连接可以把右表中不满足对应关系的数据查询出来
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
right join dept d on e.deptno=d.deptno;
--全外连接(FULL OUTER JOIN):可以把左右两个表中不满足对应关系的数据都查询出来
select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
from emp e
full join dept d on e.deptno=d.deptno;--Oracle支持全外连接,MySql不支持全外连接
--join的更多用法见下表
--子查询
--1.用来给主查询提供查询条件或查询数据而首先执行的一个查询
--2.主查询使用子查询的结果
--子查询必须要放在()里面
--分类
--出现在where中的子查询,用来给查询提供查询条件的
select * from emp
where sal>(select max(sal) from emp where deptno=30);--查询高于30部门所有人工资的员工信息
--出现下from后面的子查询,用来给主查询提供查询数据的(all,any)
select * from emp
where sal>all(select sal from emp);--查询高于30部门所有人工资的员工信息
--(了解)出现在查询列表中的子查询,功能类似于外连接的效果

常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* 数据函数 */
-- abs() 取绝对值
select abs(-1); -- 1
-- round() 用于数据的四舍五入
select round(13.26723,2);-- 结果13.27
--rand() 生成随机数
select rand();--生成一个0到1之间的随机数
-- ceiling() 向上取整
select ceiling(2.5); -- 3
-- floor() 向下取整
select floor(2.5); -- 2
-- sign() 符号函数: 负数返回-1,正数返回1,0返回0
select sign(2); -- 1
/* 字符串函数 */
-- char_length(str) 返回字符串包含的字符数
select char_length('abcdef'); -- 6
-- concat() 合并字符串,参数可以有多个
select concat('我爱','北京','天安门'); -- 我爱北京天安门
-- insert() 替换字符串,从某个位置开始替换某个长度
select insert('一二三四五六七',1,3,'八八八'); -- 八八八四五六七
-- lower() 把字符型数据转换为小写的字符
select lower('Manaphy'); -- manaphy
-- upper() 把字符型数据转换为大写的字符
select upper('Manaphy'); -- MANAPHY
-- left() 从左边截取字符串
select left('Manaphy',3); -- Man
-- right() 从右边截取字符串
select right('Manaphy',3); -- phy
-- replace() 替换字符串
select replace('一二三四五六七','四五','八九'); -- 一二三八九六七
-- substr(被截取字段名称,起启下标,截取长度) 截取字符串的函数
select substr('一二三四五六七',1,3); -- 一二三
-- reverse() 反转字符串
select reverse('一二三四五六七'); -- 七六五四三二一
/* 日期函数 */
-- year(日期字段) 将日期格式化为年(月日时分秒同理)
select year(now());-- 输出今年
select year('2018-01-01');-- 2018
-- 获取当前日期
select current_date();
select curdate();
-- 获取当前日期和时间
select now();
select localtime();
select sysdate();
-- 获取当前时间
select curtime();
select current_time();

DCL

Data Control Language 数据控制语言

  • 作用:用来定义访问权限和安全级别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* 实体完整性 */
--主键约束 primary key 说明:每个表中要有一个主键, 数据唯一, 且不能为null
create table stu(
id int primary key
);--创建表时指定主键

create table stu(
id int,
name varchar(10),
primary key(id,name)
);--联合主键,创建了两个列作为主键

create table stu(
id int,
name varchar(10)
);
alter table stu add primary key(id);
alter table stu modify id int primary key;--在已经有表的情况下使用

--唯一约束 unique 说明:数据不能重复
create table stu(
id int primary key,
name varchar(50) unique
);

--自动增长列
--auto_increment(mysql)
--identity(sqlserver)
--sequence(oracle)
--说明:给主键添加自动增长的数值,列只能是整数类型
create table stu(
id int primary key auto_increment
);--mysql的方式

/* 域完整性 */
--数据类型
--数值类型:tinyint(1字节) int(4字节) bigint(8字节) folat(4字节) double(8字节) decimal
--日期类型
date--1000-01-01/9999-12-31
datetime--1000-01-01 00:00:00/9999-12-31 23:59:59
timestamp--1970-01-01 00:00:00/2038 结束时间是第 2147483647(2^31-1)秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
time--'-838:59:59'/'838:59:59' (±35天)
year--1901/2155
--字符串类型:char(定长字符串) varchar(变长字符串) binary varbinary text(长文本数据) enum set
--非空约束
create table stu(
id int primary key,
name varchar(10) not null
);
--默认值约束
create table stu(
id int primary key,
sex varchar(2) default '男'
);--默认是男
insert into stu(id) values(1);--默认是男
insert into stu values(2,default);--默认是男
insert unto stu values(3,null);--此处是null
--check约束
check(sex='男' or sex='女')--(mysql不支持)
/* 引用完整性 */
--外键约束
alter table 左表 add foreign key(左表的某个字段) references 右表(主键);
create table 表名(
id int primary key,
name varchar(20),
classno bigint,
foreign key(classno) references tb_class(classno);
--注意
--1.从表的列引用了主表的主键,那么该列就称为外键
--2.外键的名字可以不相同
--3.外键的数据类型必须与主表中主键的数据类型完全相同
--4.外键可以是null值
/* 表与表之间的关系 */
--1.一对多: 一张表中的一条记录再另一张表中出现多次
--2.多对多: 要想两张表之间实现多对多的关系,必须有一张中间表,通过中间表创建与两张表的外键约束,实现多个一 对多,使用这种方式创建外键约束,非常适合实现多个一对多。
--3.一对一:一张表里的记录,在另外一张表里只能出现一次.表和表之间的关系必须通过外键来创建,但是外键一创建就是一对多,因此在从表里将外键设置唯一性约束,实现一对一

JDBC

JDBC使用详解
JDBC的基本使用

JDBC全称Java Database Connectivity
JDBC可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接。

JDBC优点:

  • 使用的驱动不同,即可连接不同的数据库。
  • 使用同一套操作来操作不同的数据库
  • 如果每一个数据库java都制订一套连接方式,那么当不同的数据库更新的时候,java也需要更新自己的代码,而使用jdbc,使用同一套代码来操作,使用不同的驱动程序(驱动程序由数据库厂商提供)来连接,这使得可以连接不同的数据库。

JDBC访问步骤

  • 加载并注册数据库驱动(导入驱动包sqljdbc4.jar)
  • 通过DriverManager获取数据库连接
  • 通过Connection对象获取Statement对象
  • 使用Statement执行SQL语句
  • 操作ResultSet结果集
  • 关闭资源,释放资源

导入驱动

  • 在对应的数据库厂商网站获取对应的jar包
  • 将对应的jar包添加到引用。
    在eclipse中可以将jar包导入一个文件夹后,右键Build Path -> add to path就可以将jar包添加到当前项目引用的库里面。

JDBC实例

在SQLServer数据库系统创建了一个Student数据库,数据库有一个stu表

stu表中数据如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package JDBC_01;
import java.sql.*;
public class JDBC_01 {

public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
Statement stmt=null;
ResultSet rs=null;
Connection conn=null;
try {
/*
* MySQL和SQLServer加载有以下不同
1.MySQL加载驱动
Class.forName("com.mysql.jdbc.Driver");
2.通过DriverManager获取数据库连接
String url="jdbc:mysql://localhost:3306/Student?charaterEncoding=utf-8";
*/
//*****************************************************************************************88
//1.加载驱动SQL server
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("1.加载成功");
//2.通过DriverManager获取数据库连接
//Student为数据库名
String url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
String username="sa";
String password="123456";
conn=DriverManager.getConnection(url,username,password);
System.out.println("2.连接成功");
//3.通过Connection对象获取Statement对象
stmt=conn.createStatement();
System.out.println("3.成功获取Statement对象");
//4.使用Statement执行SQL语句
String sql="select * from stu"; //从stu表中查询
rs=stmt.executeQuery(sql);
System.out.println("4.执行SQL结果如下"+"\n");
//5.操作ResultSet结果集
System.out.println("ID|name|sex");
while(rs.next()) {
int id=rs.getInt("ID");
String name=rs.getString("name");
String sex=rs.getString("sex");
System.out.println(id+"|"+name+"|"+sex+"|");
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}finally { //释放资源,反着关闭
if(rs!=null) {
rs.close();
}
if(stmt!=null) {
stmt.close();
}
if(conn!=null) {
conn.close();
}
}
}

}

执行结果如下:

详细介绍

  • 加载数据库驱动——Driver接口
    Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。

      Class.forName("com.mysql.jdbc.Driver"); //MySQL
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //SQLServer
      Class.forName("oracle.jdbc.driver.OracleDriver"); //Oracle
  • 建立连接——Connection接口
    客户端与数据库所有交互都是通过connection对象完成的
    使用DriverManager来获取
    URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

      String url=jdbc:mysql:[]//localhost:3306/数据库名 ?参数名:参数值
      url=jdbc:oracle:thin:@localhost:1521:database   //Oracle
      url=jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=database //SQLServer
          url=jdbc:mysql://localhost:3306/database   //MySQL
      Connection conn = DriverManager.getConnection(url,user,pass); 
DriverManager类常用方法 说明
registerDriver(Driver driver) 用于向DriverManager中注册给定的JDBC驱动程序
getConnection(String url,String user,String password) 用于建立和数据库的连接,并返回表示连接的Connction对象

Connection常用方法 说明
createStatement() 创建向数据库发送sql的statement对象。
prepareStatement(sql) 创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql) 创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit) 设置事务是否自动提交。
commit() 在链接上提交事务。
rollback() 在此链接上回滚事务。
getMetaData() 用于返回表示数据库的元数据的DatabaseMetaData对象
  • 执行SQL语句——Statement接口
    用于执行静态SQL语句并返回它所生成结果的对象。
    三种Statement类:
  1. Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
  2. PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
  3. CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。
    Statement st = conn.createStatement(); //获取用于向数据库发送sql语句的statement
    StiString sql="select * from stu";
    st.executeQuery(sql);//向数据库发送sql
Statement对象常用方法 说明
executeQuery(String sql) 用于向数据发送查询语句,返回ResultSet结果集。
executeUpdate(String sql) 用于向数据库发送insert、update或delete语句,返回更新的行数
execute(String sql) 用于向数据库发送任意sql语句 ,返回是否有结果集
addBatch(String sql) 把多条sql语句放到一个批处理中。
executeBatch() 向数据库发送一批sql语句执行。

PreperedStatement是Statement的孩子,它的实例对象可以通过调用:

    PreperedStatement st = conn.preparedStatement()
    StiString sql="select * from users where name=? and password=?"";
    st=conn.preparedStatement(sql);
    st.setString(2,password);
    st.executeQuery();
  • Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。

  • 并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

  • ** 获取结果——ResultSet接口**
    Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

1.获取行
ResultSet提供了对结果集进行滚动的方法:

    next():移动到下一行
    Previous():移动到前一行
    absolute(int row):移动到指定行
    beforeFirst():移动resultSet的最前面。
    afterLast() :移动到resultSet的最后面。

2.获取值
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

  • 获取任意类型的数据
      getObject(int index)
      getObject(string columnName)
  • 获取指定类型的数据,例如:
      getString(int index)
      getString(String columnName)
SQL类型 JDBC对应方法 返回类型
bit(1),bit(n) getBoolean,getBytes() Boolean,byte[]
tinyint getByte() Byte
smallint getShort() Short
int getInt Int
bigint getLong() Long
char,varchar,longvarchar getString String
text(clob) blob getClob(),getblob() Clob,blob
date getDate() java.sql.Date
time getTime() java.sql.Time
timestamp getTimestamp java.sql.Timestamp