本文介绍: 不同的sql窗口相当于不同的事务,而事务是有隔离级别的,必须等该事务提交之后,其他事务才能查询到,在没有提交事务前,该表会被锁住(出现红色闪电,事务的提交和回滚会进行解锁),操作同一条记录会产生冲突(行级锁)用户建在表空间上,表建在用户上,编程的时候关注用户既可,一个表空间可建多个用户,用户在Object的Users中可以看到,可用该用户登录plsql(需要登录权限)(2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节。(1)CLOB : 存储字符,最大可以存 4 个 G。
一 创建表空间(创建数据文件)
创建表空间同时会创建一个数据文件(下面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 个字节
2. 数值型
NUMBER(5,2) 最大可以存的数为 999.99
3. 日期型
(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:oracleproduct10.2.0db_1jdbclib,取出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;//地址id
private String housernumber;//门牌号
private String watermeter;//水表编号
private Date adddate;//增加日期
private Long ownertypeid;//业主类型
}
/*业主的数据访问类*/
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 {//增删改不涉及结果集故设为null
BaseDao.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 {//增删改不涉及结果集故设为null
BaseDao.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 {//增删改不涉及结果集故设为null
BaseDao.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);
}
}
六 数据导出与导入
-
整库的导入导出(需要dba的权限)
- 导出:整库的导出会形成一个文件,服务器的命令行输入(需要有dba权限的账号密码,full=y表示全部的意思y是yes)exp system/password full=y 不指定文件名时导出文件名为EXPDAT.DMP(纯二进制oracle自己的文件)
- 导入:若对象存在则自动跳过,命令行输入IMP system/qwer1234 full=y(实质上是执行了一串的create语句),不指定名则找默认文件
- 指定导出文件名:exp system/qwer1234 full=y file=water.dmp
- 导入指定文件:imp system/itcast full=y file=water.dmp
-
用户导入导出
-
按表导入导出
七 关于重复提交事务的问题
不同的sql窗口相当于不同的事务,而事务是有隔离级别的,必须等该事务提交之后,其他事务才能查询到,在没有提交事务前,该表会被锁住(出现红色闪电,事务的提交和回滚会进行解锁),操作同一条记录会产生冲突(行级锁)
原文地址:https://blog.csdn.net/zhlyxx/article/details/134696351
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35278.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。