1、视图(View)创建使用,视图(View)实际上是一张或者多张表上的预定义查询,这些表称为基表。从视图中查询信息与从表中查询信息的方法完全相同。只需要简单的SELECTFROM即可。
2、OR REPLACE:如果视图已经存在,则替换旧视图。
3、FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
4、NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
5、 WITH READ ONLY:默认可以通过视图对基表执行增删改 *** 作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert *** 作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改 *** 作。现实开发中,基本上不通过视图对表中的数据进行增删改 *** 作。
视图具有以下优点:可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表。可以将复杂的查询保存为视图。可以对最终用户屏蔽一定的复杂性。 限制某个视图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性。从多张基表中按一定的业务逻辑抽出用户关心的部分,形成一张虚拟表。
在oracle中可以使用bolb字段类型进行二进制流的存储Java代码:
Oracle中插入并显示(用BLOB类型)
要在oracle里面存入 用 blob类型
首先在数据库里建立:
--连接到管理员
conn sys/tbsoft as sysdba;
--为scott用户授权
grant create any directory to scott;
--回到scott用户
conn scott/tiger;
--创建存储的表
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
--创建存储的目录
CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\picture';
--在c:下自己建一个叫picture的文件夹
CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS
F_LOB BFILE;--文件类型
B_LOB BLOB;
BEGIN
iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;
--插入空的blob
F_LOB:= BFILENAME ('IMAGES', FILENAME);
--获取指定目录下的文件
DBMS_LOBFILEOPEN(F_LOB, DBMS_LOBFILE_READONLY);
--以只读的方式打开文件
DBMS_LOBLOADFROMFILE (B_LOB, F_LOB,DBMS_LOBGETLENGTH (F_LOB));
--传递对象
DBMS_LOBFILECLOSE (F_LOB);
--关闭原始文件
COMMIT;
END;
/
--在C:\picture下放一张1gif
--将该存入表
call IMG_INSERT('1','1gif');
然后创建一个web项目 连接数据库后 创建一个BlobDAO类 用来取出表中的blob类型
Java代码 收藏代码
public class BlobDAO {
private static final BlobDAO instance = new BlobDAO();
private Connection conn = null;
private BlobDAO() {
}
public static BlobDAO getInstance() {
return instance;
}
private void initConn() {
conn = DBAccessgetInstance()getConn();
}
public byte[] getImage(String imgname) {
BufferedInputStream ins;//取得BLOB的IO流
byte[] bt = null;
initConn();
Blob bo = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select T_IMAGE from IMAGE_LOB where t_id=";
try {
ps = connprepareStatement(sql);
pssetString(1, imgname);
rs = psexecuteQuery();
if (rsnext()) {
bo = rsgetBlob("T_IMAGE");
try {
ins = new BufferedInputStream(bogetBinaryStream());
int bufferSize = (int) bolength();//取得BLOB的长度
bt = new byte[bufferSize];
try {
insread(bt, 0, bufferSize);
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
//建立字节缓存
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} finally {
try {
rsclose();
psclose();
connclose();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
return bt;
}
}
在action里面调用getImage()方法并显示在页面上
Java代码 收藏代码
public ActionForward execute(ActionMapping mapping, ActionForm form,
>1 建立一个新表,并规定其字段和字段长度
2 写控制文件,依照新表格式写好源数据文件
3 !退出,通过控制文件将源数据导入新表
OK
现在不方便截图,只能这么简单的描述了。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)