标签:精确 有一个 仅主机模式 独立 dbf code primary size erb
1.oracle简介 1.oracle :ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品 2.oracle特点: 1)支持多用户、大事务量的事务处理 2)数据安全性和完整性控制 3)支持分布式数据处理 4)可移植性 3.oracle体系结构: 1)数据库: Oracle数据库是数据的物理存储,和其它数据库不一样,这里的数据库是一个操作系统。只有一个库。可以看作是 Oracle 就只有一个大数据库。 2)实例: 一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例 3)数据文件:数据文件是数据库的物理存储单位。 4)表空间: 表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。用于管理数据文件 5)用户: 用户是在表空间下建立的。用户登陆后只能看到和操作自己的表,ORACLE的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户 总结:Oracle只有一个数据库,数据库下可以有多个实例,实例之间相互独立。实例下面可有多个表空间,表空间对应多个数据文件。 在开发中每个程序会对应地创建一个用户,每个用户都是建立在表空间下,用户操作数据库时,实际操作的是表空间下对应的数据文件 2.软件的安装 1.window 2003安装:在本机上解压后直接挂载到虚拟机中 2.创建虚拟网卡(仅主机模式),设置网络适配器,设置本地操作系统虚拟网卡ip 3.安装Oracle数据库 4.sqlplus远程连接Oracle 5.PLSQL Developer远程连接可视化工具软件的安装 3.表空间的创建: create tablespace waterboss //waterboss为表空间名称 datafile ‘c:\waterboss.dbf‘ //指定表空间的数据文件 size 100m //数据文件所占空间大小 autoextend on //是否可扩展空间 next 10m //每次扩展的大小 删除表空间: drop tablespace 表空间名 4.用户的创建: create user wateruser //wateruser为用户名 identified by itcast //设置用户密码 default tablespace waterboss //指定默认的表空间 用户的赋权: grant dba to wateruser //dba为最高权限,默认情况下不能使用自己创建的用户登录 删除用户 drop user 用户名 登录时如果输入错误密码次数过多,用户将被锁住,可通过如下方式解锁 alter user 用户名 identified by 密码 account unlock 5.表的创建、修改与删除(与MySQL类似) CREATE TABLE 表名称( 字段名 类型(长度) primary key, 字段名 类型(长度), ....... ); Oracle表中数据类型: 字符型 char:固定长度的字符类型,最多存储2000个字节 varchar2:可变长度的字符类型,最多存储 4000 个字节 LONG:大文本类型。最大可以存储 2 个 G 数值型 NUMBER 例如: NUMBER(5) 最大可以存的数为 99999 默认长度18 NUMBER(5,2) 最大可以存的数为 999.99 日期型 DATE:日期时间型,精确到秒 TIMESTAMP:精确到秒的小数点后 9 位 二进制型 CLOB : 存储字符,最大可以存 4 个 G BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G Oracle中对于字段的约束同MySQL: primary key not null unique 6.表的增、删、改:(与MySQL类似) 创建表: create table 表名( 字段名 类型 约束, 字段名 类型 约束, 字段名 类型 约束, 字段名 类型 约束 ); 删除表: drop table 表名 修改表: alter table 表名称 add(列名 类型,列名 类型); alter table 表名称 modify(列名 类型,列名 类型); alter table 表名称 add(列名 类型,列名 类型); alter table 表名称 rename column 原列名 to 新列名 alter table 表名称 drop 列名 7.表数据的增删改: 添加:insert into t_owners values (?,?,?,?,?,?,?) 修改:update t_owners set name=?,addressid=?,housenumber=?,watermeter=?,adddate=?,ownertypeid=? where id=? 删除:delete from t_owners where id=? commit的使用: 进行增删改时,需要使用 commit; 查询不需要commit 8.jdbc连接oracle实现增删改(DbUtils+c3p0连接池) 传统方式: 1.注册驱动(Class.forName("...")) 2.DriveManage获取连接,需要传入路径,用户名,密码 3.获取执行对象(PreparedStatement) 4.设置参数 5.执行sql语句 采用c3p0连接池结合dbutils工具类: c3p0连接池配置文件: <named-config name="oracle"> <property name="driverClass">oracle.jdbc.driver.OracleDriver</property> //指定驱动的位置 <property name="jdbcUrl">jdbc:oracle:thin:@192.168.80.10:1521:orcl</property> //连接的路径,指定了协议,IP,端口,实例 <property name="user">wateruser</property> //登录Oracle的用户名 <property name="password">itheima</property> //登录的密码 <property name="initialPoolSize">5</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </named-config> JdbcUtils工具类: private static final ComboPooledDataSource dataSource=new ComboPooledDataSource("oracle"); //可以通过配置中的name属性来加载配置文件创建连接池 增删改查步骤: 1、创建QueryRunner对象; 2、调用update方法或者query方法;
Oracle查询 1.单表查询,同MySQL查询 1)select * from 表名 where name=‘...‘ //oracle中字符串只能使用‘‘ 2)select * from 表明 where like name like ‘%刘%‘ //%表示一个或多个字符,_表示一个字符,否定用not like 3)and or >= <= > < between and 和MySQL一样 4)select * from 表名 where name is null //查找空的值,否定:is not null 5)select distinct name from 表名 //得到的结果为去重后的记录 6)select * from 表名 order by usernum desc //按照usernum逆序排序,asc为顺序 2伪列 //系统会为每一个表生成的列,默认情况下不显示 1)rowid:表中的每一行在数据文件中都有一个物理地址,ROWID 伪列返回的就是该行的物理地址。使用 ROWID 可以快速的定位表中的某一行。 2)rownum:在查询的结果集中,ROWNUM 为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。 3.聚合函数 1)求和 sum select sum(usenum) from t_account where year=‘2012‘ 2)求平均值 avg 3)最大值 max 最小值 min 4)个数 count 4.分组 group by //如果是分组查询,select后面只能有聚合函数或者用于分组的字段。 select areaid,sum(money) from t_account group by areaid 5.分组后条件查询having :对结果进行筛选 2.多表查询 内连接:select * from 表1,表2 ... where ... 外连接: select * from 表1 left join 表2 on ... //左外连接 select * from 表1 right join 表2 on ... //右外连接 外连接在Oracle中的语法: select * from t1,t2 where t1.id=t2.tiid(+) select * from t1,t2 where t1.id(+)=t2.tiid 3.子查询 //子查询中,如果是一条记录,作为结果相当于一个具体的值,可放再查询条件,结果中 分为单行子查询和多行子查询: //单行子查询返回一条记录,多行子查询返回多条记录 如放在> = 等的后面只能是单行子查询 如放在in any all 后面可以是多行子查询 1)where子查询 //就是将查询结果作为另一个查询的条件 select * from T_ACCOUNT where year=‘2012‘ and month=‘01‘ and usenum> ( select avg(usenum) from T_ACCOUNT where year=‘2012‘ and month=‘01‘ ) 2)from 子查询 //将查询结果作为被查询的表再查询 3)select 子查询 //将查询结果作为另一个查询的结果,此子查询只能是单行子查询 4.分页 1)采用伪列和子查询实现分页 select * from (select rownum r,t.* from T_account)where r>10 and r<=20 2)基于排序的分页 select * from (select rownum r,t.* from (select * from t_account order by usenum) t)where r>10 and r<=20 伪列中rownum的生成原理:每生成一条记录,就生成一个rownum, 所以select rownum,t.* from t_account t order by usenum ,这条语句先生成rownum ,再排序,所以最终的表中rownum为乱序 mysql的分页: select * from table limit 3,5; //表示从第三条开始(从零开始数),查询五条 5函数 数值函数: 四舍五入:ROUND(数值,保留小数位数); 数值截取:TRUNC(数值,保留小数位数); ROUND(100.567,2)=100.57 TRUNC(100.567,2)=100.56 日期函数: ADD_MONTHS(日期,值) :增加指定的月 last_day(sysdate) :求所在月的最后一天 tranc(sysdate,‘mm‘) :日期截取,丢掉月份后面的数据 转换函数: select TO_CHAR(1024) from dual :数字转字符串 //其中dual为伪表,用于测试,其中只有一个x的值 to_number(‘100‘) :字符串转数字 to_char(日期,‘yyyy-mm-dd‘) :将日期类型转换成字符串类型 //分钟,用mi表示 to_date(字符串,‘yyyy-mm-dd‘):将字符串类型转换成日期类型; 注意:在mysql中如果添加日期数据,就以字符串的形式添加即可(会自动转化为日期数据),但是在oracle中不行; insert into t_owners values(to_date(‘2018-7-18‘,‘yyyy-mm-dd‘)) 其它函数: 空值处理函数: nvl(maxnum,0) //如果maxnum不为空显示值,为空显示零 nvl2(检测的值,如果不为 null 的值,如果为 null 的值) decode(条件,值 1,翻译值 1,值 2,翻译值 2,...值 n,翻译值 n,缺省值) :【功能】根据条件返回相应值 case //可通过这个函数实现行列转换,使用在select后面 when 条件1 then 条件1成立返回值 when 条件2 then 条件2成立返回值 when 条件3 then 条件3成立返回值 ... else 缺省值 end; //必须要end关键字, 例如: select name,(case when ownertypeid= 1 then ‘居民‘ when ownertypeid= 2 then ‘行政事业‘ when ownertypeid= 3 then ‘商业‘ end ) from T_OWNERS 三种排名方式: rank 相同的值排名相同,排名跳跃 SELECT rank() OVER (ORDER BY USENUM desc) 排名,t.* FROM T_ACCOUNT t; 下面类似 dense_rank 相同的值排名相同,排名连续 row_number 返回连续的排名,无论值是否相等 集合运算: UNION ALL(并集),返回各个查询的所有记录,包括重复记录。 UNION(并集),返回各个查询的所有记录,不包括重复记录。 INTERSECT(交集),返回两个查询共有的记录。 MINUS(差集),返回第一个查询检索出的记录减去第二个查询检索出的记录之 后剩余的记录。 如:select * from t_owners where id<=7 union select * from t_owners where id>=5 分组和排序后面的字段可有多个: select * from t_account group by year,month //year 和 month 均相同才分为一组 order by year,month; //先按year排序,再按月份排序
标签:精确 有一个 仅主机模式 独立 dbf code primary size erb
原文地址:https://www.cnblogs.com/liuxuelin/p/10004161.html