JDBC编程

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值