Oracle研学-基础操作

news/2024/2/21 3:43:13

学自B站黑马程序员笔记

一 创建表空间(创建数据文件)

创建表空间同时会创建一个数据文件(下面5行应该是一句话),表空间在PLSQL的Object的tablespace中可以看到

create tablespace waterboss      //创建表空间
datafile 'c:\waterboss.dbf'      //创建表空间对应的数据文件(给个地址)
size 100m                        //文件大小100m(先占地方)
autoextend on                    //开启自动拓展100m满了会自动扩充
next 10m;                        //一次拓展10m

二 创建用户

用户建在表空间上,表建在用户上,编程的时候关注用户既可,一个表空间可建多个用户,用户在Object的Users中可以看到,可用该用户登录plsql(需要登录权限)

create user wateruser            //创建用户(3行一句话)
identified by itcast             //创建密码(口令)
default tablespace waterboss;    //指定该用户默认属于哪个表空间grant dba to wateruser;          //赋予用户权限(dba角色权限)

三 数据类型

1. 字符型

(1)CHAR : 固定长度的字符类型,最多存储 2000 个字节

(2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节

(3)LONG : 大文本类型。最大可以存储 2 个 G

2. 数值型

NUMBER : 数值类型

例如:NUMBER(5) 最大可以存的数为 99999

NUMBER(5,2) 最大可以存的数为 999.99

3. 日期型

(1)DATE:日期时间型,精确到秒

(2)TIMESTAMP:精确到秒的小数点后 9 位

4. 二进制型(大数据类型)

(1)CLOB : 存储字符,最大可以存 4 个 G

(2)BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G

四 创建表

//创建业主表 于object的tables中可查看
CREATE TABLE T_OWNERS(
ID NUMBER PRIMARY KEY,            //主键
NAME VARCHAR2(30),                //业主名称
ADDRESSID NUMBER,                 //地址id
HOUSENUMBER VARCHAR2(30),         //门牌号
WATERMETER VARCHAR2(30),          //水表编号
ADDDATE DATE,                     //登记日期
OWNERTYPEID NUMBER                //业主类型id
)//修改表-追加字段
ALTER TABLE T_OWNERS ADD(REMARK VARCHAR2(20),OUTDATE DATE
)//修改表-修改字段类型
ALTER TABLE T_OWNERS MODIFY(REMARK CHAR(20),OUTDATE TIMESTAMP
)//修改表-修改字段名OUTDATE变为EXITDATE
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE//修改表-删除字段REMARK
ALTER TABLE T_OWNERS DROP COLUMN REMARK//插入语句,此刻处于事务状态需要进行事务的提交才能查询到
INSERT INTO T_OWNERTYPE (ID,NAME) VALUES (1,'居民');//插入当前系统时间sysdate会返回当前系统时间
insert into T_OWNERS VALUES(1,'邢道荣',1,'1-1','123456',sysdate,1);
commit;//可以通过语句进行commit事务提交//修改语句日期为三天前(支持对日期的运算)3代表3天(默认),年月会用函数
update T_OWNERS SET ADDDATE=ADDDATE-3 WHERE ID=1;//删除语句,TRUNCATE执行效率高于delete,当执行delete时数据并没有真正的删除,只是移动到了回滚段中,此时通过rollback可回滚,可能产生碎片且不释放空间
delete from T_OWNERS WHERE ID=1;//TRUNCATE删除表中数据不需要commit直接执行既可生效,不可回滚,truncate会销毁表之后重建表结构,效率更高
truncate table T_OWNERTYPE

五 建立jdbc链接

  进入oracle包中C:\oracle\product\10.2.0\db_1\jdbc\lib,取出ojdbc14.jar包部署到项目中,而后建立基本访问类

/*基本数据访问类:获取数据库链接,关闭资源*/
public class BaseDao {static{//静态代码块只执行一次,加载驱动try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}//获取数据库链接public static java.sql.Connection getConnection() throws SQLException {//thin表示瘦链接,即程序所在的pc上可以不装oracle的任何东西,胖链接需要在本地装oracle的东西return DriverManager.getConnection("jdbc:oracle:thin:@192.168.80.10:1521:orcl","wateruser","itcast");}//关闭结果集,执行对象,链接对象,不为空才有关闭的必要public static void closeAll(java.sql.ResultSet rs,java.sql.Statement stmt,java.sql.Connection conn){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}

3.建立实体类

public class Owners {private Long id;//编号private String name;//业主名称private Long address;//地址idprivate String housernumber;//门牌号private String watermeter;//水表编号private Date adddate;//增加日期private Long ownertypeid;//业主类型
}

4.编写增删改方法

/*业主的数据访问类*/
public class OwnersDao{//插入方法public static void add(Owners owners){//声明链接对象 预处理对象java.sql.Connection conn=null;java.sql.PreparedStatement stmt=null;try {conn=BaseDao.getConnection();//获取链接//几列就放几个问号(占位符下标从1开始)stmt=conn.prepareStatement("insert into t_owners values(?,?,?,?,?,?,?)");stmt.setLong(1,owners.getId());//设置第一个参数,业主编号stmt.setString(2,owners.getName());//业主名称stmt.setLong(3,owners.getAddress());//地址编号stmt.setString(4,owners.getHousernumber());//门牌号stmt.setString(5,owners.getWatermeter());//水表编号//要求传递sql的date类型,此时传递util的date类型所以报错//通过gettime方法转长整形,通过长整形构造sql的date类型,反过来一样stmt.setDate(6,new java.sql.Date(owners.getAdddate().getTime()));//增加日期stmt.setLong(7,owners.getOwnertypeid());//业主类型stmt.execute();//执行} catch (SQLException e) {e.printStackTrace();} finally {//增删改不涉及结果集故设为nullBaseDao.closeAll(null,stmt,conn);}}//修改方法public static void update(Owners owners){//声明链接对象 预处理对象java.sql.Connection conn=null;java.sql.PreparedStatement stmt=null;try {conn=BaseDao.getConnection();//获取链接//几列就放几个问号(占位符下标从1开始)stmt=conn.prepareStatement("update t_owners set name=?,addressid=?,"+"housenumber=?,watermeter=?,adddate=?,ownertypeid=? where id=?");stmt.setString(1,owners.getName());//业主名称stmt.setLong(2,owners.getAddress());//地址编号stmt.setString(3,owners.getHousernumber());//门牌号stmt.setString(4,owners.getWatermeter());//水表编号//要求传递sql的date类型,此时传递util的date类型所以报错//通过gettime方法转长整形,通过长整形构造sql的date类型,反过来一样stmt.setDate(5,new java.sql.Date(owners.getAdddate().getTime()));//增加日期stmt.setLong(6,owners.getOwnertypeid());//业主类型stmt.setLong(7,owners.getId());//设置第一个参数,业主编号stmt.execute();//执行} catch (SQLException e) {e.printStackTrace();} finally {//增删改不涉及结果集故设为nullBaseDao.closeAll(null,stmt,conn);}}//删除方法public static void delete(Long id){//声明链接对象 预处理对象java.sql.Connection conn=null;java.sql.PreparedStatement stmt=null;try {conn=BaseDao.getConnection();//获取链接//几列就放几个问号(占位符下标从1开始)stmt=conn.prepareStatement("delete from t_owners where id=?");stmt.setLong(1,id);//设置第一个参数,业主编号stmt.execute();//执行} catch (SQLException e) {e.printStackTrace();} finally {//增删改不涉及结果集故设为nullBaseDao.closeAll(null,stmt,conn);}}
}

5.测试

public class Test {public static void main(String[] args) {Owners owners=new Owners();owners.setId(3L);owners.setName("许攸");owners.setAddress(1L);owners.setHousernumber("3-2");owners.setWatermeter("96469");owners.setAdddate(new Date());owners.setOwnertypeid(1L);OwnersDao.add(owners);System.err.println("ok");}
}
public class Test2 {public static void main(String[] args) {Owners owners=new Owners();owners.setId(3L);owners.setName("许攸");owners.setAddress(1L);owners.setHousernumber("3-2");owners.setWatermeter("5555");owners.setAdddate(new Date());owners.setOwnertypeid(1L);OwnersDao.update(owners);System.err.println("ok");}
}
public class Test3 {public static void main(String[] args) {OwnersDao.delete(1L);}
}

六 数据导出与导入

  1. 整库的导入导出(需要dba的权限)
    1. 导出:整库的导出会形成一个文件,服务器的命令行输入(需要有dba权限的账号密码,full=y表示全部的意思y是yes)exp system/password full=y 不指定文件名时导出文件名为EXPDAT.DMP(纯二进制oracle自己的文件)
    2. 导入:若对象存在则自动跳过,命令行输入IMP system/qwer1234 full=y(实质上是执行了一串的create语句),不指定名则找默认文件
    3. 指定导出文件名:exp system/qwer1234 full=y file=water.dmp
    4. 导入指定文件:imp system/itcast full=y file=water.dmp
  2. 用户导入导出
    1. 按用户导出:exp system/qwer1234 owner=wateruser file=wateruser.dmp
    2. 按用户导入:imp system/qwer1234 file=wateruser.dmp fromuser=wateruser
  3. 按表导入导出
    1. 按表导出:exp wateruser/itcast file=a.dmp tables=t_owners,t_ownertype
    2. 按表导入:imp wateruser/itcast file=a.dmp tables=t_owners,t_ownertype
    3. 用tables参数指定需要导出的表,若有多个表用逗号分隔既可,若表在用户下则使用用户帐号和密码,用system找用户下的表是找不到的(需要打点调用)
    4. 可以通过tables指定表名进行导入(dmp中有多个表,我可以只取一个,整库导出也可以只导入一张表)

七 关于重复提交事务的问题

  不同的sql窗口相当于不同的事务,而事务是有隔离级别的,必须等该事务提交之后,其他事务才能查询到,在没有提交事务前,该表会被锁住(出现红色闪电,事务的提交和回滚会进行解锁),操作同一条记录会产生冲突(行级锁)


https://www.xjx100.cn/news/3118965.html

相关文章

前端纯js导入导出json配置文件

在做后台系统需求的时候,有个需求是需要把当前表单配置导出,在另一个配置项下,导入这些配置,相当于做了一下配置拷贝。通常我们导出下载一个文件,是先向后端发起请求,由后端处理数据后,再返回文…

37 - 数据库参数设置优化,失之毫厘差之千里

MySQL 是一个灵活性比较强的数据库系统,提供了很多可配置参数,便于我们根据应用和服务器硬件来做定制化数据库服务。如果现在让你回想,你可能觉得在开发的过程中很少去调整 MySQL 的配置参数,但我今天想说的是我们很有必要去深入了…

记一次mysql 3306端口映射到外网 frp

通过下面命令启动被访问机器的frp nohup ./frps -c ./frps.toml & 记一次mysql 3306端口映射到外网 坑 mysql本身没有配置远程访问 frp配置错误,没注意中文单引号和英文单引号的区别 mysql本身没有配置远程访问 问题 navacat 远程链接mysql 出现 Lost c…

IDEA专栏—重装IDEA的配置

文章目录 1、maven路径2、默认文件路径3、插件4、导包顺序5、快捷键6、调整配置插件 1、maven路径 2、默认文件路径 3、插件 4、导包顺序 import static all other imports <blank line> import java.* import javax.* <blank line> import all other imports <…

【华为交换】交换机聚合接口配置(Eth-trunk)

功能简介 Eth-Trunk又叫以太网链路聚合Eth-Trunk&#xff0c;它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路。达到增加链路带宽的目的。在实现增大带宽目的的同时&#xff0c;Eth-Trunk采用备份链路的机制&#xff0c;可以有效的提高设备之间链路的可靠性。每个聚合组…

华为智能手表独立导航,一呼即应轻松畅行

PetalMaps 手表独立导航&#xff0c;一声令下唤醒导航&#xff0c;打造了智慧的语音交互唤醒体验功能。导航时&#xff0c;语音播报、变道震动提醒功能&#xff0c;让您尽情体验腕上导航乐趣&#xff0c;同时又能安全抵达目的地。

运维笔记111

运维笔记 Navicat中查询指定字段名所在的表名tomcat设置JVM的初始堆内存修改catalina.sh文件修改完保存并关闭tomcat启动tomcat 查询数据库连接数查询是否存在死锁 Navicat中查询指定字段名所在的表名 SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME‘替换成你要…

vue实现el-tree操作后默认展开该节点和同级节点拖拽并进行前后端排序

问题一&#xff1a;实现el-tree 删除、添加、编辑后默认展开该节点 操作视频如下 el-tree节点操作后仍展开 节点代码 <template><el-treev-loading"loading"ref"tree"element-loading-text"加载中"highlight-current:data"treeD…