Oracle 12c 实现自增列有两种新方式
1,使用增强default关键字引入序列值
create table table_name(
col1 varchar2(255) default '前缀' || [ ‘username’.] ' seq_name'.'nextval',
col1 number(10) default ‘username’.' seq_name'.'nextval',
)
注: number的增量可能会引起中心偏移,可以考虑反转(b树反转)
2,12c版本的自增列语法(表中只能有一列自增长,并且为整数类型)
create table table_name(
col1 number (10) generated by default on null as identity (start with 初始值 increment by 步长 max value 最大值 minvalue 最小值 cache 30 【order】)
)
create table table_name(
col1 number (10) generated always as identity (start with 初始值 increment by 步长 max value 最大值 minvalue 最小值 order)
)
类似mysql的自增列,强制让你符合主键,不能改
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
Oracle 自增列是利用序列做到的。自增列会自动加上非空约束;
表删除的时候,序列不会马上删除,这是因为删除的表会进入回收站,要关联删除需要加purge;
* generated always as identity 可以 delete ,不能显示insert ,不能update;
*generated by default on null as identity 会自动将null值插入序列中的值,增删改都可以,相比generated always as identity 更加灵活,但是列的唯一性不能保证。
受自增列的启发,可以自己创建序列,指定为表列二点默认值。
系统自建序列的属性不能更改,可以在创建自增列的时候手动修改,否则较小cache会造成性能问题。
Like this:CREATE TABLE test4(id NUMBER GENERATED BY DEFAULT AS IDENTITY(START WITH 100
INCREMENT BY 10 cache 100));
其他用户如果要向带有自增列表中插入数据的话,那么需要序列权限
select *
from T1
[OFFSET ? ROWS]
FETCH [ next|first]
[ ? | ? percent ] rows [ only | with ties ]
获取数据库 jar 包 例如:object14.jar
拷贝文件到webroot目录下
使用 buildpath 功能加载 jar 包
class.forname("oracle.jdbc.driver.oracleDriver");
Connection *** = DriverManager.getConnection("jdbc:oracle:thin:@IPaddress:port:数据库名","账户","密码")
*** . close();
由connection 对象创建
cratestatment()
创建一个statement 对象来将sql语句发送到数据库。
cratestatment(int resultSetType,int resultSetConcurrency)
创建一个statement对象,该对象将生成具有给定类型和并发性的 resultSet对象。
cratestatment(int resultSetType,int resultSetConcurrency,int resultSetHoldability)
创建一个statement对象,该对象将生成具有给定类型、并发性和可保存性的 resultSet对象。
preparedStatement (String sq1)
创建一个PreparedStatement 对象来将参数化的SQL 语句发送到数据库。
preparedStatement (String sq1, int resultSetType, int resul tSetConcurrency)
创建一个PreparedStatement对象,该对象将生成具有给定类型和并发性的ResultSet 对象。
preparedStatement (String sq1, int resultSetType, int resul tSetConcurrency, int resultSetHoldability)
创建一个PreparedStatement对象,该对象将生成具有给定类型、并发性和可保存性的ResultSet对象
set数据类型(int parameter Index, 数据类型var)
参数设定:
setInt (int parameterIndex, int x)
set0bject (int parameterIndex, object x)
execute(String sql)
执行给定的sql语句,该语句可能返回多个结果
executeUpdate(String sql)
执行给定sql语句,该语句可能为 insert、update 或delete 语句,或者不返回任何内容的sql语句(如sqkDDl语句。)
executeQuery(String sql)
执行给定的sql语句,该语句返回单个resultSet对象。
ResultSetMetaData是可用于获取关于ResultSet对象中列的类型和属性信息的对象
使用Resul tSet. getMetaData()获取
getColumnCount ()
返回此ResultSet 对象中的列数。
getColumnName (int column)
获取指定列的名称。
resultSetType - 以下ResultSet 常量之一:
【1003】ResultSet .Type_forward_only 或
【1004】ResultSet .Type_scroll_insensitive 或
【1005】ResultSet . Type_scroll_sensitive
resultSetConcurrency - 以下ResultSet 常量之一:
【1007】ResultSet .concur_read_only 或
【1008】ResultSet .concur_updateble
resultSetHoldability - 以下ResultSet 常量之一:
【1】ResultSet . hold_cursors_over_commit 或
【2】ResultSet .close_cursors_at_comiit
TYPE_ FORWARD_ ONLY
该常量指示光标只能向前移动的ResultSet 对象的类型。
TYPE_ SCROLL_ INSENSITIVE
该常量指示可滚动但通常不受ResultSet底层数据更改影响的ResultSet对象的类型。
TYPE_ SCROLL_ SENSITIVE
该常量指示可滚动并且通常受ResultSet底层数据更改影响的ResultSet对象的类型。
CONCUR_ READ_ 0NLY
该常量指示不可以更新的ResultSet 对象的并发模式。
CONCUR_ UPDATABIE
该常量指示可以更新的Resultset对象的并发模式。
H0LD_ CURSORS_ 0VER_ COMMIT
该常量指示提交当前事务时,具有此可保存性的打开的ResultSset对象将保持开放。
CLOSE_ CURSORS_ AT_ COMMIT
该常量指示提交当前事务时,具有此可保存性的打开的ResultSet对象将被关闭。
absolute(int row) 将光标移动到此ResultSet 对象的给定行编号。
afterLast() 将光标移动到此ResultSet对象的末尾,正好位于最后一行之后。
beforeFirst () 将光标移动到此ResultSet对象的开头,正好位于第一行之前。
first () 将光标移动到此ResultSet对象的第一行。
last() 将光标移动到此ResultSet对象的最后-行。
next () 将光标从当前位置向前移一行。
previous () 将光标移动到此ResultSet 对象的上一行。
relative(int rows) 按相对行数(或正或负)移动光标。
isAfterLast () 获取光标是否位于此Resu1tset对象的最后一行之后。
isBef oreFirst () 获取光标是否位于此ResultSet对象的第一行之前。
isClosed() 获取此ResultSet对象是否已关闭。
isFirst () 获取光标是否位于此ResultSet对象的第一行。
isLast() 获取光标是否位于此ResultSet对象的最后- -行。
getRow() 获取当前行编号。
getObject(int columnIndex)
以Java编程语言中 object 的形式获取此 ResultSet 对象的当前行中指定列的值。
getObject(String columnLabel)
以Java编程语言中 object 的形式获取此 ResultSet 对象的当前行中指定列的值。
getString(int columnIndex)
以Java编程语言中 String的形式获取此 ResultSet 对象的当前行中指定列的值。
getString(int columnIndex)
以Java编程语言中 String的形式获取此 ResultSet 对象的当前行中指定列的值。
get****(int columnIndex)
get****(String columLabel)
--伪列rownum
select sco.*, rownum 行数 from grade sco
--伪列 rownum 分页 (带子查询的是12c以前的写法)
select *
from(select sco.stuid,
sco.gid,
sco.grade,
sco.subject,
rownum rn
from grade sco
order by stuid
) t
where t.rn >3
and t.rn <7
--12c offset fetch 分页
select * from grade order by stuid
offset 3 rows
fetch first row only
--跳过前3行的两条
select * from grade order by stuid
offset 3 rows
fetch next 2 row only
--ties是把下一个分区相同的值都显示出来,比如成绩单中的排名,有相同的排名,把那些相同的也显示出来
select * from grade order by stuid
offset 3 rows
fetch next 2 row with ties