|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。初级|数据|数据范例JDBC2.0引进了对应于SQL_99的很多新对象,这些新对象有BLOB,CLOB,ARRAY,REF,布局化范例,DISTINCT范例和LOCATOR.
JDBC3.0增添了Boolean和Datalink对象
拔出这些初级数据范例到数据库中的次要手腕是利用PreparedStatement对象,读取次要是ResultSet对象.上面先容怎样在数据库中读取和写进初级数据范例
1:BLOB和CLOB
BLOB:二进制年夜对象(BinaryLargeOBject)即一个字节序列(比方说一个mp3文件能够存储为一个BLOB)
CLOB:一个对VARCHAR或相似的列来讲太长的字符串.
来自数据库的BLOB和CLOB数据能够经由过程java.sql.Blob和java.sql.clob对象来操纵.
ResultSet和PreparedStatement对象供应的处置这两种数据的办法以下
ResultSet:PreparedStatement
BlobgetBlob(int)voidsetBlob(int,Blob)//第一个参数是PreparedStatement中的占位符的索引,以下不异
BlobgetBlob(string)voidsetClob(int,Clob)
ClobgetClob(int)
ClobgetClob(String)
利用PreparedStatement.setBlob(int,Blob)我们能够用BLOB数据来设置筹办语句中的占位符,而且能够经由过程实行SQL语句把这些数据写进到另外一个表中
如:
Stringsql="selectblob_colfromblob_tablewhereid=?"//blob_colum,id为blob_table这个表的列名
PreparedStatementps=connection.prepareStatement(sql);
ps.setInt(1,1);
ResultSetrset=ps.executeQuery();
Blobblob=null;
if(rset.next())
{
blob=rset.getBlob(1);
}
上叙中blob只是持有一个指向数据库中这些二进制数据的援用.其实不持有实践二进制数据,然儿女码可使用这个不异的援用把这些二进制数据写进到别的的一个表中:
sql="insertintoblob_table_2values(?)";
ps=connection.prepareStatement(sql);
ps.setBlob(1,blob);
ps.executeUpdate();
jdbc2.0中的BLOB和CLOB托言供应了一种从数据库中猎取数据或写数据到数据库的手腕,这个手腕是经由过程从数据库中取得一个流(输出大概输入)对象.并从该流中读取数据或写进.
例:
OutputStreamout=null;
BufferedInputStreamin=null;
Filefile=newFile("****");
ReslutSetrset=statement.executeQuery(sql);//从查询语句中获得一个了局集
if(rset.next())
{
Blobblob=rset.getBlob(1);
out=((oracle.sql.Blob)blob).getBinaryOutputStream();//jdbc2.0不撑持写数据到blob,因而我们用Oracle的扩大
intbufferSize==((oracle.sql.Blob)blob).getBufferSize();
in=newBufferedInputStream(newfileInputStream(file),bufferSize);
byte[]b=newbyte[bufferSize];
intcount=in.read(b,0,bufferSize);
//入手下手存储数据到数据库中
while(cout!=-1)
{
out.write(b,o,count);
cout=in.read(b,o,bufferSize);
}
//数据写完
out.close();
in.close();
connection.commit();//提交改动
........
}
相似的,我们能够从blob中失掉一个输出流,把blob数据写进到文件中往
InputStreamin=blob.getBinaryStream();
intbufferSize=((oracle.sql.Blob)blob).getBufferSize();
2:布局化数据范例
布局化数据范例相似于一个java对象.以下,我们用SQL界说一个People范例
CREATEORREPLACETYPEPeopleASOBJECT(NAMEVARCHAR,AGEINT);//Oracle数据库..
如今能够在任何中央利用利用PEOPLE该数据范例
如
CREATETABLESAMPLES(SA_IDNUMBER,CURSONPeople,SAMPLEBLOB);
如今我们可使用setObject()和getObject()来利用这些数据范例
ResultSet:PreparedStatement
ObjectgetObject(int)voidgetObject(int,Object)
ObjectgetObject(string)
..........
例:publicclassPeopleimplementsSQLData,Serializable
{
......
}
Mapmap=connection.getTypeMap();
map.put("people",People.class);//People这个类必需在后面创立,t它必需为表中的每一个列含有一个成员变量
Stringsql="INSERTINTOSAMPLE(SA_ID,CURSON)VALUES(?,?)";
Peoplepeople=newPeople();
ps=connection.prepareStatement(sql);
ps.setInt(1,1);
ps.setObject(2,people);
intresult=ps.executeUpdate();
我们也能够从数据库中获得这个People对象
Stringsql="SELECT*FROMSAMPLEWHERESA_ID=1";
ps=connection.prepareStatement(sql);
ResultSetrset=ps.executeQuery();
if(rset.next())
{
Peoplepeople=(People)rset.getObject(2);
}
3:Distinct范例
Distinct范例象一个内建范例的别号,我们能够如许界说这个范例
CREATETYPEBIRTHDATEASDATE
因为这个新范例只是一个指向某个已有内建范例的别号,以是我们可使用getDate()和setDate()的办法;
4:机关范例
Array和Refobject(援用对象)
ResultSetPrepareStatement
ArraygetArray(int)voidsetArray(int,Array)
ArraygetArray(String)
RefgetRef(int)voidsetRef(int,Ref)
RefgetRef(String)
Array办法能够经由过程制订行索引和列索引来存取行值和列值.该Array对象还能够把数组做为一个ResultSet来前往.(ResultSet只是存取一组行中的那些列值的手腕)
下面我们界说了一个People自界说范例和SAMPLE表.假如实行一个前往People列的查询,可使用getRef()的办法,我们将会失掉一个指向该列中的谁人Prople对象的援用
5:DataLink
JDBC3.0的一个新功效,DataLink对象描叙内部地存取到数据库上的数据
DataLink值利用setURL()和getURL()来处置
ResultSetPrepareStatement
URLgetURL(int)voidsetURL(int,URL)
URLgetURL(String)
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。 |
|