我们之前用的mysql图形化工具sqlyog小海豚,一个小油桶就是一个数据库,我们看到很多数据库(一个应用就会建立一个数据库)。oracle数据库是一个全局数据库。整个数据库就是一个数据库。
实例就是后台进程。你可以装一个oracle,但是你可以装多个实例,每个实例都有实例名,你连接这个实例名就是访问这个oracle,你连接那个实例名就是访问那个oracle。他就是吧oracle从磁盘当中读取到内存中,形成一股进程,每个进程之间是不会互相干预的,类似于你装了多个oracle。我们一般整个数据库装一个实例,很少会涉及到多实例的情况。
数据文件:就是存储数据的文件。oracle是通过表空间去管理这些数据文件。
表空间:就是一个或者多个数据文件的逻辑名称。一个数据文件有物理名称,比如adc.dbf,oracle中我们不会去直接操作dbf,而是操作表空间,表空间是对应着一个或多个数据文件。
表空间相当于mysql的一个库???
表空间就是吧oracle划分为很多区域,每个区域就是一个表空间,表空间下面有很多单位,表空间下面分为段,段下面分为区,区里面分为数据块,数据块里面分为磁盘块。
简而言之就是一个oracle数据库里面分为表空间,表空间下面分为段,段下面分为区,区里面分为数据块,数据块里面分为磁盘块。比如中国--》省--》市-->镇--》村。
用户:mysql的用户一登录就可以看到所有的数据库。oracle正好跟她相反,一个数据库下面有很多用户,在用户下面建立很多表,表是建立在用户上面的。
mysql和oracle的对应关系:
整个root用户下面的数据库就对应着一个oracle数据库。
oracle的用户对应着mysql数据库的概念。
用户、数据文件、表空间之间的关系。
实例之间是互不干扰的,用户有2个,LHB(李洪博),LSZ(李时珍)。
表空间与用户是一对多关系。实例和表空间和用户都是一对多的关系。
oracle不建议安装到本机,安装比较麻烦,卸载更加麻烦。oracle装到虚拟机上,在虚拟机上安装一个操作系统,然后把oracle安装到该操作系统上。这个操作系统是windows server 2003,服务器版的操作系统,不是win7的。oracle服务器大都数都是装在服务器版操作系统,或者Linux操作系统,或者windows服务器版系统。
找到后缀vmx结尾的,双击它就可以挂载到VMware里面去了。
“我已移动虚拟机” //表示打开后的虚拟的网卡的mac地址不变,如果复制本地的,同时开机在一个vmnet可能造成冲突。
“我已复制虚拟机” //表示打开后的虚拟机的网卡的物理地址是新生成的,建议不懂的就选这个。
“取消” //取消打开虚拟机
报错提示:
无法连接虚拟设备ide1:0,因为主机上没有相应的设备,您要在每次开启虚拟设备时都尝试连接此虚拟设备吗?
这是因为没设置使用镜像文件。
选择虚拟机,再点击左侧页面编辑虚拟机设置。
选择CD/DVD(IDE) 将使用物理驱动器的选项改为下方的使用ISO映像文件,如图:
报错提示:
键盘挂钩超时值未设置为VMware Workstation建议的值
在安装数据库之前先配置网络,配置网络的本的是是使用本地计算机和windows server 2003处于一个局域网之内。
本地连接是物理网卡,vmware开头的是虚拟网卡。虚拟我网卡是专门连接虚拟机的网卡,虚拟机安装成功之后,会自动创建vmnet1网卡和vmnet8网卡。虚拟网卡我们是可以增加的。
Vmware提供了三种网络工作模式,分别是:(1)Bridged(桥接模式);(2)NAT(网络地址转换模式);(3)Host-Only(仅主机模式)
桥接模式:你创建的虚拟机(虚拟机上的操作系统)和物理机(本地计算机)是处于同一局域网之下,能和该局域网下面的其它PC机相互通信,前提是必须要有外部的网络环境(本地计算机必须有网)。
仅主机模式:Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只能与主机相互通讯。
NAT模式:虚拟机操作系统和本地计算机操作系统共享一个ip地址,你本地的计算机可以打开网页,你的虚拟机操作系统也可以打开网页,有个弊端就是你本地计算机无法与虚拟机操作系统进行网络连接,但是都可以上网。
我们一般选择仅主机模式;
VMware 中选择菜单“编辑”--“虚拟网络编辑器”
设置为仅主机方式,并设定子网 IP 为 192.168.80.0 (子网ip也可以不改)
添加完之后,看一下虚拟网卡添加成功没有。把网络和internet打开。看到了vmnet2,右键属性,选择internet协议版本4,再点击属性,给你自动分配了ip地址,最后一个不是1就行,在255之内就可以了。这里改成了6.
右键点击虚拟操作系统,选择“设置”菜单项,弹出以下窗口
因为我们的虚拟网卡是80网段,所以windows server 2003里面的操作系统也要改为80的。这样就可以在同一个局域网上进行通信了。
ip地址改为10 ,不能是之前的6,6的话就会发生冲突了。一个网络的ip地址是不能重叠的。
网络都设置好了,里面虚拟机操作系统是 80.10,本地计算机操作系统是80.6,然后我们ping一下,本地计算机是否能与虚拟机上操作系统是否能联通。
注意:高版本的windows serve的关闭防火墙,要不ping不通的。
直接将ORACLE 安装包解压拷贝到虚拟机的系统中,直接安装到虚拟机系统的C盘中。
双击setup进行安装
数据库口令的密码进行设置,口令用于超级管理员用户。
找到instantclient_12_1 目录,
找到PLSQL+Developer10.0.3.1701文件夹 并进行安装。
注意事项:安装目录不能有中文和空格,否则连接不上
一路next即可,安装成功之后,桌面上看到一个圆桐。双击它,需要输入破解版的东西。
注解玩之后,看到这个界面
(2)配置客户端路径
在弹出的登陆窗口中,点取消,Tools->>Preferences
配置 oracle Home (insantclient 解压的路径)、 OCI Library(instantclient 目录下的oci.dll 文件))
就是根据ORCL10这个名称,去找192.168.80.10这个服务的orcl实例。
(6)中文编码设置
1.业主类型表(T_OWNERTYPE)
创建表空间,是我们做所有工作的第一步,因为你做的任何操作,都要找一个存储区域。创建表空间,实际上是创建数据文件。你创建表空间就是起一个名字,与此同时会产生一个数据文件,他们之间会自动产生对应关系。
先有表空间,再有用户。
create tablespace waterboss
datafile 'c:\waterboss.dbf'
size 100m
autoextend on
next 10m
先有表空间,再有用户,然后才能建表。(用户是建在表空间上的,表是建立在用户上的)
create user wateruser
identified by itcast
default tablespace waterboss
grant dba to wateruser
oracle数据库创建表的前提,你先创建表空间,用户并为用户赋予权限,这些只需要创建一次即可,然后再去创建表。
语法:
CREATE TABLE 表名称(
字段名 类型(长度) primary key,
字段名 类型(长度),
.......
);
mysql数值型分的很细,int,long,double,float啥的,oracle就一个number,大小是用长度来表示。
ALTER TABLE 表名称 ADD(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)
--追加字段
ALTER TABLE T_OWNERS ADD
(
REMARK VARCHAR2(20),
OUTDATE DATE
)
ALTER TABLE 表名称 MODIFY(列名 1 类型 [DEFAULT 默认值],列名 1 类型
[DEFAULT 默认值]...)
--修改字段
ALTER TABLE T_OWNERS MODIFY
(
REMARK CHAR(20),
OUTDATE TIMESTAMP
)
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE
--删除一个字段
ALTER TABLE 表名称 DROP COLUMN 列名
--删除多个字段
ALTER TABLE 表名称 DROP (列名 1,列名 2...)
--删除字段
ALTER TABLE T_OWNERS DROP COLUMN REMARK
DROP TABLE 表名称
注意:
1.sql语句一般都大写,但是不区分大小写。
2.类似一般不会修改的,基本上都是子啊需求确定后创建表字段和类型。
在columns中我们看到数字123是number类型,abc是字符串类型,dat是日期类型。
mysql数据库事务不用自己操作,人家封装好的,oracle的话需要进行commit提交。
语法:
INSERT INTO 表名[(列名 1,列名 2,...)]VALUES(值 1,值 2,...)
insert into T_OWNERS VALUES (1,' 张三丰',1,'2-2','5678',sysdate,1);
insert into T_OWNERS VALUES (2,'赵大侃',1,'2-3','9876',sysdate,1);
commit;
语法:
UPDATE 表名 SET 列名 1=值 1,列名 2=值 2,....WHERE 修改条件;
update T_OWNERS set adddate=adddate-3 where id=1;
commit;
DELETE FROM 表名 WHERE 删除条件;
delete from T_OWNERS where id=2;
commit;
TRUNCATE TABLE 表名称
在下图目录中可以找到驱动包 ORACLE 的 JDBC 驱动包,拷贝到工程即可使用
创建 java 工程 waterboss,建立 lib 文件夹,将 ojdbc.jar 拷贝到此文件夹,然后 add build path
我们通常编写 BaseDao 负责加载驱动,获取数据库连接,关闭资源,代码如下:
package cn.itcast.waterboss.dao;
import java.sql.SQLException;
/**
* 基本数据访问类
*
* @author Administrator
*/
public class BaseDao {
//加载驱动
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
*
* @return
* @throws SQLException
*/
public static java.sql.Connection getConnection() throws
SQLException {
return java.sql.DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.80.10:1521:orcl",
"wateruser", "itcast");
}
/**
* 关闭资源
*
* @param rs
* @param stmt
* @param conn
*/
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();
}
}
}
}
1.创建实体类
/**
* 业主实体类
* @author Administrator
*
*/
public class Owners {
private Long id;//编号
private String name;//业主名称
private Long addressid;//地址编号
private String housenumber;//门牌号
private String watermeter;//水表编号
private Date adddate;//登记日期
private Long ownertypeid;//业主类型 ID
//省略get,set方法
}
import cn.itcast.waterboss.entity.Owners;
/**
* 业主数据访问类
*
* @author Administrator
*/
public class OwnersDao {
/**
* 新增业主
*
* @param owners
*/
public static void add(Owners owners) {
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
try {
conn = BaseDao.getConnection();
//有几列就添加几个问号???
stmt = conn.prepareStatement("insert into T_OWNERS
values( ?, ?,?,?,?,?,?)");
stmt.setLong(1, owners.getId());
stmt.setString(2, owners.getName());
stmt.setLong(3, owners.getAddressid());
stmt.setString(4, owners.getHousenumber());
stmt.setString(5, owners.getWatermeter());
stmt.setDate(6, new
java.sql.Date(owners.getAdddate().getTime()));
stmt.setLong(7, owners.getOwnertypeid());
stmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.closeAll(null, stmt, conn);
}
}
/**
* 修改业主
*
* @param owners
*/
public static void update(Owners owners) {
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
try {
conn = BaseDao.getConnection();
stmt = conn.prepareStatement("update T_OWNERS set
name = ?, addressid =?,housenumber =?,"
+ "watermeter=?,adddate=?, ownertypeid=? where
id =?");
stmt.setString(1, owners.getName());
stmt.setLong(2, owners.getAddressid());
stmt.setString(3, owners.getHousenumber());
stmt.setString(4, owners.getWatermeter());
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 {
BaseDao.closeAll(null, stmt, conn);
}
}
/**
* 删除业主
*
* @param owners
*/
public static void delete(Long id) {
java.sql.Connection conn = null;
java.sql.PreparedStatement stmt = null;
try {
conn = BaseDao.getConnection();
stmt = conn.prepareStatement("delete from T_OWNERS where
id = ? ");
stmt.setLong(1, id);
stmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.closeAll(null, stmt, conn);
}
}
}
整库导出命令(整库导出有2种方式,一种是默认的文件名EXPDAT.DMP,一种是指定的文件file=文件名)
exp system/itcast full=y
exp system/itcast file=文件名 full=y
imp system/itcast full=y file=water.dmp
按用户导出:
按用户导出实际上就是加了owner =用户名这个参数。就可以吧指定下的用户所有的表都导成一个文件里面。
exp system/itcast owner=wateruser file=wateruser.dmp
按表导出:
按表导出就是添加tables参数,注意,我们的表是属于某个用户下的,exp后面需要跟着用户的身份来登录。而不是用system,用system,你是找不到这2个表的,t_account和a_area的。也就是根据用户来找表
exp wateruser/itcast file=a.dmp tables=t_account,a_area