driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:oracle
Statement构造器:Statement();
一.JDBC访问数据库的基本步骤(Statement):
1->.加载JDBC驱动:
Class.forName("oracle.jdbc.driver.OracleDriver");
2->创建数据库的连接Connection:
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle","scott","tiger");
3->创建Statement对象:
Statement stmt=conn.createStatement();
4->执行SQL语句,返回ResultSet的对象:
ResultSet rs=stmt.executeQuery("select * from emp");
int linesize=stmt.executeUpdate("insert into emp values()");
5->查看rs中的记录:
while(rs.next()){
rs.getString(1);
}
6->.依次关闭ResultSet,Statement和Connection对象
其中:ResultSet对象的方法:
1->.getXXX(int i)
i表示数据表中按照从左到右的顺序排列的序列号
例:rs.getInt(1);
2->.getXXX(String "列名")
例:rs.getint("empno");
"XXX"可以为:Int、Float、Double、String、Date...
*******************************************************
PreparedStatement构造器:PreparedStatement(String sql);
二.JDBC访问数据库的基本步骤(PreparedStatement):
1->.加载JDBC驱动:
Class.forName("oracle.jdbc.driver.OracleDriver");
2->创建数据库的连接Connection:
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle","scott","tiger");
3->创建PreparedStatement对象:
PreparedStatement pstmt=conn.praparedStatement("select * from emp where empno=? and ename=?");
其中:?表示占位符,还可以为insert,update和delete;
4->设置“?”的值:
pstmt.setInt(1,7788);
pstmt.setString(2,"SMITH");
5->执行SQL语句,返回ResultSet的对象:
ResultSet rs=stmt.executeQuery();
int linesize=stmt.executeUpdate();
6->查看rs中的记录:
while(rs.next()){
rs.getString(1);
}
7->.依次关闭ResultSet,PreparedStatement和Connection对象
其中:PraparedStatement对象的方法:
setXXX(int i,XXX x);
i为sql中占位符的序号数,x为占位符的类型
例:pstmt.setInt(1,7788);
"XXX"可以为:Int、Float、Double、String、Date、BinaryStream...
***********************************************************
三.可滚动和可更新的结果集:
1->.对于Statement,创建如下:
Statement stmt=conn.createStatement(type,concurrency);
2->.对于PreparedStatement,创建如下:
PreparedStatement pstmt=comm.PreparedStatement(sql,type,concurrency);
其中:type可以取:ResultSet.TYPE_SCROLL_INSENSITIVE和ResultSet.TYPE_SCROLL_SENSITIVE
concurrency可以取:ResultSet.CONCUR_READ_ONLY和ResultSet.CONCUR_UPDATBLE
可以使用ResultSet的first()/last()/beforeFirst()/afterLast()/relative()/absolute()等方法。
其中:使用可更新的结果集来更新数据库,不能使用“select * from 表名”方式的SQL语句,可使用一下方式:
1.select 表名.* from 表名;
2.select 列名1,列名2,... from 表名;
********************************************************
CallableStatement的构造器:CallableStatement(String sql);
四.调用存储过程:
1->.加载JDBC驱动:
Class.forName("oracle.jdbc.driver.OracleDriver");
2->创建数据库的连接Connection:
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle","scott","tiger");
3->创建CallableStatement对象:
CallableStatement cstmt=conn.preparedCall("{call 存储过程名(?,?,?)}");
4->设置“?”的值
对IN类型 对OUT类型
cstmt.setXXX(1,XXX); cstmt.registerOutparameter(1,Types.XXX);
cstmt.setXXX(2,XXX); cstmt.registerOutparameter(2,Types.XXX);
cstmt.setXXX(3,XXX); cstmt.registerOutparameter(3,Types.XXX);
5->执行SQL
cstmt.execute();
如果是OUT类型,可以看到输出的值,用System.out.println(cstmt.getXXX(n)); //n为“?”对应的值
6->.依次关闭ResultSet,CallableStatement和Connection对象
*****************************************************************************
create table students_list(
s_id number primary key,
s_name varchar2(20) not null,
s_pic BLOB, BLOB类型是二进制类型,可以放置图片
s_text CLOB CLOB类型是大文本类型,可以放置字符超过255的文本
);
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,password);
存储图片和大文本的步骤:
PreparedStatement pstmt=conn.prepareStatement("insert into students_list(1,'name',?,?)");
File f1=new File("文件名.jpg");
InputStream is=new FileInputStream(f1);
pstmt.setBinaryStream(1, is, (int)f1.length());
File f2=new File("文件名.txt");
Reader reader=new FileReader(f2);
pstmt.setCharacterStream(2,reader,(int)f2.length());
pstmt.executeUpdate();
读取图片和大文本的步骤:
PreparedStatement pstmt=conn.prepareStatement("select * from students_list where s_id=1");
ResultSet rs=pstmt.executeQuery();
File f1=new File("文件名.jpg");
OutputStream os=new FileOutputStream(f);
File f2=new File("文件名.txt");
Writer writer=new FileWriter(f2);
rs.next();
InputStream is=rs.getBinaryStream(3);
Reader reader=rs.getCharacterStream(4);
int len=0;
byte[] b=new byte[4*1024];
while((len=is.read(b))!=-1){
os.write(b,0,len);
}
int len1=0;
char[] c=new char[1024];
while((len1=reader.read(c))>0){
writer.write(c,0,len1);
}
更新图片和大文本的步骤:
//先要查出此类型的文件
PreparedStatement pstmt=conn.prepareStatement("select * from students_list where s_id=1");
ResultSet rs=pstmt.executeQuery();
File f1=new File("文件名.jpg");
InputStream is=new FileInputStream(f);
File f2=new File("文件名.txt");
Reader reader=new FileReader(f2);
rs.next();
BLOB blob=(BLOB)rs.getBlob(3);
OutputSteam os=blob.getBinaryOutputStream();
CLOB clob=(CLOB)rs.getClob(4);
Writer writer=clob.getCharacterOutputStream();
int len=0;
byte[] b=new byte[4*1024];
while((len=is.read(b))!=-1){
os.write(b,0,len);
}
int len1=0;
char[] c=new char[1024];
while((len1=reader.read(c))>0){
writer.write(c,0,len1);
}
//进行修改
pstmt=conn.prepareStatement("update students_list set s_pic=?,s_text=? where id=1");
pstmt.setBlob(1.blob);
pstmt.setClob(2,clob);
pstmt.executeUpdate();
2651

被折叠的 条评论
为什么被折叠?



