前些日子折腾的在线拍照,由于只是更新blob字段,没有在本地保存照片,导致客户拍脑门想要的时候不能马上拿出来。没说的谁让顾客是上帝呢,做吧。使用线程池创建三个线程让自定一个线程目标共享(也就是把表里的记录分成n组同时执行导出)。程序很简单,一共四个类和一个ojdbc14.jar包。由于sql语句写错了造成多个线程对一个文件进行写操作,害的我查了半天。
首先定义分页对象也就是每个线程要处理的数据量(通过传入的总页数和总行数得到每页数量)
package com.main;
import java.util.ArrayList;
import java.util.List;
public class PageVO {
private String startRowNum;//返回查询的起始行
private String endRowNum;//返回查询的终止行
private int totalRows; // 数据查询总记录数
private int totalPages; // 分成页数
private int pageRows;//每页行数
public PageVO(){
}
public PageVO(int totalRows,int totalPages){
this.totalPages = totalPages;
this.totalRows = totalRows;
}
public PageVO(String startNum,String endNum){
  ......
前些日子折腾的在线拍照,由于只是更新blob字段,没有在本地保存照片,导致客户拍脑门想要的时候不能马上拿出来。没说的谁让顾客是上帝呢,做吧。使用线程池创建三个线程让自定一个线程目标共享(也就是把表里的记录分成n组同时执行导出)。程序很简单,一共四个类和一个ojdbc14.jar包。由于sql语句写错了造成多个线程对一个文件进行写操作,害的我查了半天。
首先定义分页对象也就是每个线程要处理的数据量(通过传入的总页数和总行数得到每页数量)
package com.main;
import java.util.ArrayList;
import java.util.List;
public class PageVO {
private String startRowNum;//返回查询的起始行
private String endRowNum;//返回查询的终止行
private int totalRows; // 数据查询总记录数
private int totalPages; // 分成页数
private int pageRows;//每页行数
public PageVO(){
}
public PageVO(int totalRows,int totalPages){
this.totalPages = totalPages;
this.totalRows = totalRows;
}
public PageVO(String startNum,String endNum){
  ......
1)从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上来讲thin还是更加方便,这也是thin比较常见的原因。
2)原理上来看,thin是纯java实现tcp/ip的c/s通讯;而oci方式,客户端通过native java method调用c library访问服务端,而这个c library就是oci(oracle called interface),因此这个oci总是需要随着oracle客户端安装(从oracle10.1.0开始,单独提供OCI Instant Client,不用再完整的安装client)
3)它们分别是不同的驱动类别,oci是二类驱动, thin是四类驱动,但它们在功能上并无差异。
4)虽然很多人说oci的速度快于thin,但找了半天没有找到相关的测试报告。 ......
Create [or replace] trigger [模式.]触发器名
Before| after |instead of insert|delete|(update of 列名)
{insert|delete|(update of 列名) }
On 表名|视图|模式名|数据库名
[for each row]
When 条件
PL/SQL块
说明:
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次(如一次update 会更新多条数据,但是只执行一次);
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
其中只有update 可以指定列名.
instead of 是在视图上定义的触发器,且只能在行级触发器里面使用.因为视图对表的增删改只能基于单表,使用较少.
On 表名|视图|模式名|数据库名 按照对象不同,又可分为模式触发器(模式名),数据库触发器(database) ......
字符类型:
CHAR(size):固定长度字符串,最大长度2000 bytes
VARCHAR2(size):可变长度的字符串,最大长度4000 bytes,可做索引的最大长度749
NCHAR(size):根据字符集而定的固定长度字符串,最大长度2000 bytes
NVARCHAR2(size):根据字符集而定的可变长度字符串,最大长度4000 byte
LONG:变长的字符串,最大长度限制是2GB
CLOB:最大长度4G
NCLOB:根据字符集而定的字符数据,最大长度4G
数值类型
NUMBER(p,s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126 ??
有效位:从左边第一个不为0的数算起的位数
S>0,精确到小数点右边s位,并四舍五入。然后检验有效位是否<=p
Eg:198.34 ànumber(6,1)à198.3,
198.34ànumber(3,1)àerror
S<0,精确到小数点左边s位,并四舍五入。然后检验有效位是否<=p+|s|
Eg:198.34ànumber(6,-1)à200
19834567.34ànumber(6,-1)àerror(有效位8>6+1)
S=0,number表示整数
Oracle 10g以 ......
字符类型:
CHAR(size):固定长度字符串,最大长度2000 bytes
VARCHAR2(size):可变长度的字符串,最大长度4000 bytes,可做索引的最大长度749
NCHAR(size):根据字符集而定的固定长度字符串,最大长度2000 bytes
NVARCHAR2(size):根据字符集而定的可变长度字符串,最大长度4000 byte
LONG:变长的字符串,最大长度限制是2GB
CLOB:最大长度4G
NCLOB:根据字符集而定的字符数据,最大长度4G
数值类型
NUMBER(p,s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126 ??
有效位:从左边第一个不为0的数算起的位数
S>0,精确到小数点右边s位,并四舍五入。然后检验有效位是否<=p
Eg:198.34 ànumber(6,1)à198.3,
198.34ànumber(3,1)àerror
S<0,精确到小数点左边s位,并四舍五入。然后检验有效位是否<=p+|s|
Eg:198.34ànumber(6,-1)à200
19834567.34ànumber(6,-1)àerror(有效位8>6+1)
S=0,number表示整数
Oracle 10g以 ......
字符类型:
CHAR(size):固定长度字符串,最大长度2000 bytes
VARCHAR2(size):可变长度的字符串,最大长度4000 bytes,可做索引的最大长度749
NCHAR(size):根据字符集而定的固定长度字符串,最大长度2000 bytes
NVARCHAR2(size):根据字符集而定的可变长度字符串,最大长度4000 byte
LONG:变长的字符串,最大长度限制是2GB
CLOB:最大长度4G
NCLOB:根据字符集而定的字符数据,最大长度4G
数值类型
NUMBER(p,s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126 ??
有效位:从左边第一个不为0的数算起的位数
S>0,精确到小数点右边s位,并四舍五入。然后检验有效位是否<=p
Eg:198.34 ànumber(6,1)à198.3,
198.34ànumber(3,1)àerror
S<0,精确到小数点左边s位,并四舍五入。然后检验有效位是否<=p+|s|
Eg:198.34ànumber(6,-1)à200
19834567.34ànumber(6,-1)àerror(有效位8>6+1)
S=0,number表示整数
Oracle 10g以 ......
1、su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面。
2、sqlplus /nolog 或sqlplus system/manager 或./sqlplus system/manager@ora9i;
3、SQL>connect / as sysdba ;(as sysoper)或
connect internal/oracle AS SYSDBA ;(scott/tiger)
conn sys/change_on_install as sysdba;
4、SQL>startup; 启动数据库实例
5、 查看当前的所有数据库: select * from v$database;
select name from v$database;
desc v$databases; 查看数据库结构字段
7、怎样查看哪些用户拥有SYSDBA、SYSOPER权限:
SQL>select * from V_$PWFILE_USERS;
Show user;查看当前数据库连接用户
8、进入test数据库:database test;
9、查看所有的数据库实例:select * from v$instance;
如:ora9i
10、查看当前库的所有数据表:
SQL> select TABLE_NAME from all_tables;
select * from all_tables;
SQL> select table_name from all_tables where table_name like ‘u’;
TABLE_NAME———————————————default_auditing_options ......
为防忘记,记录于下:
oracle 11gR2 : http://www.oracle.com/pls/db112/homepage,下载网址http://www.oracle.com/technology/documentation/database.html
oracle 11gR1 : http://www.oracle.com/pls/db111/homepage
oracle 10gR2 : http://www.oracle.com/pls/db102/homepage ......