导航:首页 > 编程语言 > javaoracle大字段方式写入

javaoracle大字段方式写入

发布时间:2021-10-25 10:38:17

『壹』 java中如何将大于10000的字符串,插入oracle数据库中的blob类型字段中

不要用blob,用clob类型。先插入一个empty_clob(),然后用Statement myStmt = conn.createStatement();
ResultSet clobResultSet=myStmt.executeQuery("SELECT "+strCLOBColName
+" FROM "+strTable
+" WHERE "+ strIdColName +" ='" + strIdValue+ "' FOR UPDATE ");
CLOB myClob = (oracle.sql.CLOB)clobResultSet.getClob(strCLOBColName);
myClob.putString(1,strBuff);
myStmt.execute("COMMIT");
clobResultSet.close();
myStmt.close();
conn.setAutoCommit(true);

『贰』 oracle 中存储大量文字信息用什么字段,java后台怎么实现,请举例。谢谢。

在oracle中存储大量的文字应该是用CLOB字段来存储。这种类型在用java将数据存进数据库中时比较简单,直接将String类型的文本写入就可以了。但是在从数据库中读取CLOB类型的数据到java中时比较麻烦,因为你是拿不到数据的,只能拿到这个字段的一个隐式指针,然后还要通过输入流来拿到。

『叁』 如何用Java和oracle实现BLOB字段的字符串读取

Java能够调用Oracle的存储过程,反之Oracle也能用Java来开发外部存储过程,这样Java和oracle的相互界限就已经不明确了。Oracle实现BLOB字段的字符串读取也就非常容易了。

当然关系型数据库最好做自己应该做的事情而不是大包大揽做所有的非数据库应该做的事情。

--开发Java类

以上代码均在PL/SQL developer中开发并调试通过,Java和Oracle实现BLOB字段的字符串读取很有意思。

『肆』 Oracle怎样处理大文本字段

Oracle

CHAR 定长字符串,最长2000字节
NCHAR 定长字符串,存储的数据为 NLS字符
VARCHAR2 变长字符串,最长4000字节
NVARCHAR2 变长字符串,存储的数据为 NLS字符

LONG 最大存储2G字符数据 不推荐使用(改用CLOB)
CLOB Oracle 9i 及以前,最大4G字符数据
Oracle10g 最大4G*数据库块大小的字符数据
NCLOB 基本同CLOB,就是存储的数据为NLS

『伍』 关于JAVA~~~~ 如何将图片等大对象存入ORACLE中~~求详解!(代码)

插入图片/文本(blob /clob)到oracle数据库(引用http://www.java-asp.net/java/200512/t_48888.html)
我们在写OA的时候经常遇到的问题就是员工图片档案的储存问题,解决这个问题有两个方法,
1.jsP/html页面里面读取web服务器上的图片,也就是把图片放到(上传)到web 服务器上,然后用html 语句读取:

<img src=" 绝对或相对路径 " border="0" />

2.就是上传到数据库里面(oracle).关于oracle 数据库,它支持blob, 和clob, 分别对应着图片和文本(长字符串)操作

由于性能原因,我们还是要采用第二种方法,而且存到数据库里面比较容易管理,是吧?

首先,我们要解决上传问题,这里采用普遍使用的apache commons 组件里面的FileUpload class.

具体步骤如:

DiskFileUpload dfu=new DiskFileUpload();

dfu.setSizeMax(100000000);

dfu.setSizeThreshold(100000);

dfu.setRepositoryPath("f:\\public");

try{

List fileItems=dfu.parseRequest(request);

Iterator i=fileItems.iterator();

while(i.hasNext()){

FileItem fi=(FileItem)i.next();

if(!fi.isFormField()){

name=fi.getName();

size=fi.getSize();

if((name==null||name.equals(""))&&size==0)

continue;

}

name=fi.getName();

size=fi.getSize();

(InputStream)is=fi.getInputStream();

}

上面的代码是web服务器接受上传的代码,参考文件已经在我上篇写的上传文本文件里给出,今天,终于想明白了:

dfu.setRepositoryPath("f:\\public"); 的意思

原来是转义字符也就是说\n\t等而要打印反斜杠要用\\,其实这个问题原先已经知道,可是由于经验没有写过图片上传处理什么的,觉得很高深,也很可怕,哈哈,心里有点畏惧.看来基础的东西,那怕一点点小细节也很重要,接着还有下面的java IO 问题.刚才读core java 的时候突然发现在讲io的时候特意提醒了这个问题,可是我没有注意!

通过上面的代码已经实现文件上传了.然后,我们要实现JDBC数据源链接,目的是要把数据插入到oracle.

Context ctx=new InitialContext();

DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");

conn=ds.getConnection();

conn.setAutoCommit(false);

关于要import java.sql.* javax.sql.* java.naming.* 不再详细叙述了

接着根据很有用的一篇文章的提示,插入blob类型一定要先1.插入一个空的

String insert=" insert into uploadpicture "+

" values(?, empty_blob()) " ;

2.然后找到这个blob的oracle 里面的游标:

String findCursor=" select content "+

" from uploadpicture "+

" where name=? for update ";

注意这个for update(注意!!!必须加for update,这将锁定该行,直至该行被修改完毕,保证不产生并发冲突。这里还是难以理解,先记下来吧)

3.然后再修改

String update=" update uploadpicture "+

" set content=? "+

" where name=? ";

这里的问号是为PreparedStatement参数处理而写的!

写这个程序用到了oracle.sql.BLOB class ,这个类是用来操作BLOB数据类型的

当我们通过ResultSet 对象得到

blob=(BLOB)rs.getBlob(1);

的时候我不知道如何处理了,Blob 是什么?String, int ,long? 我现在也不明白!估计CSDN上的人也不明白,否则我发个帖子半天没有人回答,也许是很烂,也许是太简单了,大家不屑一顾,看来我还要继续追赶!

不发牢骚了,回到程序里(总觉得自己的发散思维很强,看来写程序的时候不能这样,多亏java 是纯面向对象语言,如果是过程就麻烦了)

我们如何处理这个blob 呢?回答是,不管它是什么,直接写入 BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());

这里是建立了缓冲写如blob 的流(注意getBinaryOutputStream()已经不被赞成使用了,一定有更优秀的方法替代!),说到流,我到现在还有点晕,类很多,不知道究竟用哪个好!

基础的东西非常重要,这曾经是我的口头禅,这里用到了流的读入写和写入,有些流是从文件或其它位置上读取字节(如, FileInputStream),有写流是把字节组合成有用的数据(如, DataInputStream).我们读取数字的时候,需要首先建议一个FileInpuStream, 然后, 再把该类的对象传递给DataInputStream

FileInputStream fin=new FileInputStream(“emp.dat”);

DataInputStream din=new DataInputStream(fin);//把fin传递给din

double s=din.readDouble();

默认情况下,流是没有缓冲的, 如果使用缓冲就是

DataInputStream din=new DataInputStream(

new BufferedInputStream(new FileINputStream(“emp.dat”)));

有了这点理解也很管用,

BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());

就是建立一个缓冲写的对象到blob.注意这里的out1 不是out,否则程序运行的时候不能打印了temp 数据了!

已经准备好如何写了, 可是如何读呢?

BufferedInputStream in=new BufferedInputStream(is);

在我们上传的时候 (InputStream)is=fi.getInputStream();

读取图片为输入的流.保存为is 对象,然后就用到这里了,准备好了读和写了,我们开始干活:

int c;

while((c=in.read())!=-1) {out1.write(c);}

in.close();

out1.close();

通过缓冲一个个读数据,然后一个个写数据.-1 为文件的末尾,

最后当读写完成后我们要关闭读写对象!

程序分析就是这样,以后还要对此问题进行研究,最后还要注意,

<%@ page contentType="image/jpeg;charset=GBK"%>

不是

<%@ page contentType="text/html;charset=GBK"%>

否则是以文字显示图片---乱码.

这里研究了上传图片到oralce 里面的程序,关于显示还要麻烦一点,借助资料我实现了,明天再研究一下.

//插入上传图片到数据库
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="oracle.sql.*"%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>getPicture.jsp</title>
</head>

<body>

<%
request.setCharacterEncoding("GBK");

String name=null;
long size=0;

Connection conn=null;
String insert=" insert into uploadpicture "+
" values(?, empty_blob()) " ;

String findCursor=" select content "+
" from uploadpicture "+
" where name=? for update ";

String update=" update uploadpicture "+
" set content=? "+
" where name=? ";
BLOB blob=null;
InputStream is=null;

DiskFileUpload dfu=new DiskFileUpload();
dfu.setSizeMax(100000000);
dfu.setSizeThreshold(100000);
dfu.setRepositoryPath("f:\\public");

try{
List fileItems=dfu.parseRequest(request);
Iterator i=fileItems.iterator();

while(i.hasNext()){
FileItem fi=(FileItem)i.next();
if(!fi.isFormField()){
name=fi.getName();
size=fi.getSize();
if((name==null||name.equals(""))&&size==0)
continue;
}
name=fi.getName();
size=fi.getSize();
is=fi.getInputStream();

}

Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
conn=ds.getConnection();
conn.setAutoCommit(false);

//step 1
PreparedStatement ps=conn.prepareStatement(insert);
ps.setString(1, name);
int a=ps.executeUpdate();
if(a>0)
out.println("insert success!"+"<br>");

//step 2
ps=conn.prepareStatement(findCursor);
ps.setString(1, name);
ResultSet rs=ps.executeQuery();
while(rs.next())
{
blob=(BLOB)rs.getBlob(1);

out.println("find cursor success!"+"<br>");
out.println("cursor :"+blob+"<br>");
//step 3
ps=conn.prepareStatement(update);
ps.setBlob(1, blob);
ps.setString(2, name);
ps.executeUpdate();
ps.close();
BufferedOutputStream out1 =new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in=new BufferedInputStream(is);
int c;
while((c=in.read())!=-1) {out1.write(c);}
in.close();
out1.close();
out.println("update success!"+"<br>");}
conn.commit();
}

catch(SQLException se)
{se.printStackTrace();}
catch(FileUploadException fue)
{fue.printStackTrace();}
%>

</body>

</html>

//显示数据库里面的图片

<%@ page contentType="image/jpeg;charset=GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.io.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="javax.imageio.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.awt.image.*"%>

<html>

<head>
<meta http-equiv="Content-Type" content="image/jpeg; charset=GBK">
<title>showDBImage.jsp</title>
</head>

<body>
<%
String showImage=" select * "+
" from uploadpicture "+
" where name=´TXC with snow.JPG´ " ;
Connection conn=null;
BufferedInputStream inputImage=null;

try{
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("jdbc/asdbCoreDS");
conn=ds.getConnection();
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(showImage);
while(rs.next())
{
oracle.sql.BLOB blob=(oracle.sql.BLOB)rs.getBlob("content");
inputImage =new BufferedInputStream(blob.getBinaryStream());
/*String name=rs.getString(1);
String content=rs.getString(2);
out.println(name+"<br>");*/}

BufferedImage image=null;
image=ImageIO.read(inputImage);

ServletOutputStream sos=response.getOutputStream();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(sos);
encoder.encode(image);
inputImage.close();
conn.commit();

}
catch(SQLException se)
{se.printStackTrace();
conn.rollback(); }
catch(IOException ie)
{ie.printStackTrace();}
%>

</body>

</html>

『陆』 java程序oracle写的sql取出是大写列名,如何让mysql取出也是大写

有三种方式
1.创建表时设置:
CREATE TABLE T1(
A VARCHAR(10) BINARY
);

2、使用alter修改:
ALTER TABLE `专T1` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;

3、mysql table editor中直接勾选属BINARY项。

『柒』 java 处理 oracle clob类型 字段

如果使用Oracle的话,直接将Clob字段读取为String;也就是下面这一行:
clob = (oracle.sql.CLOB) rs.getObject(1);
可以直接写成
String str = rs.getString(1);

『捌』 java 大字符串转为二进制流存入CLOB字段 JDBC方法

dbField.getFieldValue().toString().getBytes();
上面这个值有吗?取到了吗?
下面是我以前一个项目的

InputStream pic = new FileInputStream(dto.get(i).getLibPic());

sql = "INSERT INTO piclib (name,pic,sign,remark) VALUES (?,?,?,?)";

pstmt = con.prepareStatement(sql);
pstmt.setString(1, dto.get(i).getName());
pstmt.setBinaryStream(2,pic,(int)dto.get(i).getLibPic().length());

『玖』 oracle数据库的大字段怎么在JAVA里面获取到

将COLOB类型,转换成String类型

『拾』 java将string插入到类型为clob的ORACLE库中

1:首先:写个连接数据库的类,里面有返回mysq, oracle连接的方法

public Connection getConn(String flag){
Connection con=null;
try
{
if(flag.equals("1"))
{
Class.forName(“.jdbc.driver.OracleDriver”);
con = DriverManager.getConnection(“jdbc:oracle:thin:@IP:1521:数据库名字”,"name","password");
}
if(flag.equals("2"))
{
Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/数据库名?user=用户名&password=密码&useUnicode=true&characterEncoding=GBK");
}

}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}

2:执行插入操作

public void setData() {
conn = new Conn();
try {
String sqlfrom = "select p.id,p.content from table p order by p.id ";
String sqlinsert = "insert into table values(?,?)";
con = conn.getConn("2");
stmt = con.createStatement(); //从mysql取出大字段
rs = stmt.executeQuery(sqlfrom);
con = conn.getConn("1");
PreparedStatement pstmt = con.prepareStatement(sqlinsert); //向oracle中插入大字段
int i = 0;
while (rs.next()) {
pstmt.setInt(1, rs.getInt(1));
pstmt.setClob(2, oracle.sql.CLOB.empty_lob());
pstmt.executeUpdate(); //插入时将大字段设为空
this.updateOne(con,rs.getInt(1),rs.getString(2)); // 这里调用然后更新这个大字段
}

rs.close(); //关闭相关连接
pstmt.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
try
{
con.rollback();
} catch (Exception e1) {
System.out.println("回滚出现异常!");
e1.printStackTrace();
}
}
}
3:该方法实现对应大字段记录的更新
public void updateOne(Connection con,int id, String content) {
String str = "select t.content from table t where t.id=" + id+ " for update";
try {
// 注意:存取操作开始前,必须用setAutoCommit(false)取消自动提交,否则Oracle将抛出“读取违反顺序”的错误。
con.setAutoCommit(false);
stmt = con.createStatement();
ResultSet rs_clob = stmt.executeQuery(str);
while ( rs_clob .next()) {
/* 取出clob数据*/
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs_clob .getClob(1);
/* 向clob中写入数据*/
clob.putString(1, content);
}
stmt.close();
con.commit();
con.setAutoCommit(true);
con.close();
} catch (Exception e) {
e.printStackTrace();
try
{
con.rollback();
} catch (Exception e1) {
System.out.println("回滚出现异常!");
e1.printStackTrace();
}
}
}

现在就完成了一行记录的更新。

4:读clob字段以String 的形式返回(当然也可以将读到的内容写入文件,大家改一下就可以了)
/**
* 读clob字段
* @param con
* @param id
* @return
*/
public String readClob(Connection con,int id)
{
String content="";
try
{
con.setAutoCommit(false);
stmt=con.createStatement();
ResultSet rs_clob=stmt.executeQuery("select t.content from table t where t.id="+id);
oracle.sql.CLOB contents=null;
while (rs_clob.next())
{ // 取出CLOB对象
contents= (oracle.sql.CLOB) rs_clob.getClob(1);
}
BufferedReader a = new BufferedReader(contents.getCharacterStream()); //以字符流的方式读入BufferedReader
String str = "";
while ((str = a.readLine()) != null) {
content = content.concat(str); //最后以String的形式得到
}
con.commit();
/*
BufferedWriter out = new BufferedWriter(new FileWriter("e:/test.txt"));
out.write(content); //写入文件
out.close(); */
con.setAutoCommit(true);
con.close();
}catch(Exception e)
{
System.out.println("出现异常");
e.printStackTrace();
try
{
con.rollback();
}
catch (Exception e1)
{
System.out.println("回滚出现异常!");
e1.printStackTrace();
}
}
return content;
}

阅读全文

与javaoracle大字段方式写入相关的资料

热点内容
六脚芯片如何编程 浏览:778
微信视频画文件 浏览:672
类似idoo2的网站 浏览:704
全民农场车怎么升级 浏览:198
冰封侠演员表 浏览:277
新妈妈韩国电影穿红色衣服女的是哪个 浏览:628
linux数据库用哪个 浏览:750
c盘注册文件放哪里 浏览:426
下载到平板上面的文件找不到了 浏览:842
成龙电影在线 浏览:777
好看手机电影网 浏览:426
四级打真军电影 浏览:370
pdf器转换后的文件保存在哪里 浏览:909
穿越民国写小说养家 浏览:790
韩国女钢琴老师和男孩 浏览:138
申请id代码什么意思啊 浏览:483
韩国小孩子和大人电影 浏览:472
台湾电影中字未删减版 浏览:996
庆余年无删节版全文下载 浏览:536
衰鬼撬墙脚女主角 浏览:671

友情链接