N長時間沒有來了.......
忙中偷閑,整理點代碼。
/**
* 復制單個文件
* @param oldPath String 原文件路徑 如:c:/fqf.txt
* @param newPath String 復制后路徑 如:f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath)
{
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在時
InputStream inStream = new FileInputStream(oldPath); //讀入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字節數 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("復制單個文件操作出錯");
e.printStackTrace();
}
}
//保存文件的方法
public String Savefiles(FormFile file,String path)
{
String fileName= file.getFileName();
String contentType = file.getContentType();
String size = (file.getFileSize() + " bytes");
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream stream = file.getInputStream();
OutputStream bos = new FileOutputStream(path+fileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
stream.close();
}
catch (IOException e) {
return e.getMessage();
}
return "1";
}
//生成15位的字符串
public String GenTradeId()
{
String tradeId = "";
RandomStrg.setCharset("a-zA-Z0-9");
RandomStrg.setLength("15");
try
{
RandomStrg.generateRandomObject();
tradeId=RandomStrg.getRandom();
}
catch (Exception e)
{
}
return tradeId;
}
/**
* 刪除字符串中的空格,至多只保留一個空格
*
* @String txt:輸入需要處理的字符串
* @return String :返回處理后的字符串
*
*/
public String deleteWhitespace(String txt){
if((txt!=null)&&(txt.trim().length()>1)){
}
else{
return "";
}
txt = txt.replaceAll("\n"," ").replaceAll("\t"," ");
String temp="";
try{
int flag =0,num=0;
char c = 'x';
StringBuffer sb = new StringBuffer("");
for(int x=0;x<txt.length();x++){
c = txt.charAt(x);
if((c==' ')&&(flag==0)){
sb.append(c);
flag =1;
}
else if((c!=' ')){
sb.append(c);
flag =0;
}
}
temp = sb.toString().trim();
}
catch(Exception e){
;
}
return temp;
}
摘要: 1.文本框焦點問題onBlur:當失去輸入焦點后產生該事件onFocus:當輸入獲得焦點后,產生該文件Onchange:當文字值改變時,產生該事件Onselect:當文字加亮后,產生該文件
<input type="text" value="郭強" onfocus="if(value=='郭強') {value=''}" onblur="if (value=='')... 閱讀全文
SQL語句中,IN、EXISTS、NOT IN、NOT EXISTS的效率較低,尤其是后兩種語句,當數據量較大時,更常給人一種死機般的感覺。本文提供一種使用連接的方法代替以上的四種語句,可大副提高SQL語句的運行效率。以NOT
IN為例,當數據量達到一萬時,效率可提高20倍,數據量越大,效率提高的幅度也就越大。
本文所舉的例子在Oracle 7.0下運行通過,但本文所推薦的方法在各種大型數據庫上皆適用。
為了能夠更好的說明問題,我們采用示例的方式來說明問題。下面,我們將創建一些數據庫表和數據,用于在舉例時使用。
下面的語句將創建我們示例中將使用的表,并分別在表1(TAB1)中存入10000條數據,表2(TAB2)中存入5000條數據。
SQL語句如下:
CREATE TABLE TAB1
(
COL1 VARCHAR(20) NOT NULL,
COL2 INTEGER,
PRIMARY KEY(COL1)
);
CREATE TABLE TAB2
(
COL1 VARCHAR(20) NOT NULL,
PRIMARY KEY(COL1)
);
CREATE TABLE TAB3
(
COL1 VARCHAR(20) NOT NULL,
PRIMARY KEY(COL1)
);
CREATE OR REPLACE TRIGGER T_TAB3 BEFORE INSERT ON TAB3 FOR EACH
ROW
DECLARE
NUM1 NUMBER;
BEGIN
NUM1:=1;
LOOP
EXIT WHEN NUM1>10000;
INSERT INTO TAB1 VALUES (NUM1,NUM1);
IF NUM1<=5000 THEN INSERT INTO TAB2 VALUES (NUM1);
END IF;
NUM1:=NUM1+1;
END LOOP;
END;
INSERT INTO TAB3 VALUES('1');
下面,我們將舉2個例子來具體說明使用連接替換IN、NOT IN、EXISTS、NOT EXISTS的方法。
讀取表1中第2列(COL2)數據的總和,且其第1列數據存在于表2的第1列中。
1. 使用IN的SQL語句:
SELECT SUM(COL2) FROM TAB1 WHERE COL1 IN(SELECT COL1 FROM TAB2)
2. 使用EXISTS的SQL語句:
SELECT SUM(COL2) FROM TAB1 WHERE EXISTS(SELECT * FROM TAB2 WHERE
TAB1.COL1=TAB2.COL1)
3. 使用連接的SQL語句:
SELECT SUM(A.COL2) FROM TAB1 A,TAB2 B
WHERE A.COL1=B.COL1
讀取表1中第2列(COL2)數據的總和,且其第1列數據不存在于表2的第1列中。
1. 使用NOT IN的SQL語句:
SELECT SUM(COL2) FROM TAB1 WHERE COL1 NOT IN(SELECT COL1 FROM TAB2)
2. 使用NOT EXISTS的SQL語句:
SELECT SUM(COL2) FROM TAB1 WHERE NOT EXISTS(SELECT * FROM TAB2 WHERE
TAB1.COL1=TAB2.COL1)
3. 使用外連接的SQL語句:
SELECT SUM(A.COL2) FROM TAB1 A,TAB2 B WHERE A.COL1=B.COL1(+) AND
B.COL1 IS NULL
下面介紹IN、NOT IN、EXIST、NOT EXIST在DELETE和UPDATE語句中的效率提高方法。
下面所舉的例子在Microsoft SQL Server
7.0下運行通過,但所推薦的方法在各種大型數據庫上皆適用。下面,我們將創建一些數據庫表和數據,用于舉例說明。我們將分別在表A(TA)中存入
10000條數據,表B(TB)中存入5000條數據。
SQL語句如下:
CREATE TABLE TA
(
CA INT
)
CREATE TABLE TB
(
CA INT
)
CREATE TABLE TC
(
CA INT
)
CREATE TRIGGER TRA ON TC
FOR INSERT
AS
DECLARE @MINT INT
BEGIN
SELECT @MINT=1
WHILE (@MINT<=5000)
BEGIN
INSERT INTO TA VALUES(@MINT)
INSERT INTO TB VALUES(@MINT)
SELECT @MINT=@MINT+1
END
WHILE (@MINT<=10000)
BEGIN
INSERT INTO TA VALUES(@MINT)
SELECT @MINT=@MINT+1
END
END
GO
INSERT INTO TC VALUES(1)
GO
刪除表A中表A和表B相同的數據
1. 用IN的SQL語句:
DELETE FROM TA WHERE TA.CA IN (SELECT CA FROM TB)
2. 用EXISTS的SQL語句:
DELETE FROM TA WHERE EXISTS (SELECT * FROM TB WHERE TB.CA=TA.CA)
3. 使用連接的SQL語句:
DELETE TA FROM TA,TB WHERE TA.CA=TB.CA
刪除表A中表A存在但表B中不存在的數據
1. 使用IN的SQL語句:
DELETE FROM TA WHERE TA.CA NOT IN (SELECT CA FROM TB)
2. 使用EXISTS的SQL語句:
DELETE FROM TA WHERE NOT EXISTS (SELECT CA FROM TB WHERE TB.CA=TA.CA)
3. 使用連接的SQL語句:
DELETE TA FROM TA LEFT OUTER JOIN TB ON TA.CA=TB.CA WHERE TB.CA
IS NULL
更新表A中表A和表B相同的數據
1. 使用IN的SQL語句:
UPDATE TA SET CA=CA+10000 WHERE CA IN (SELECT CA FROM TB)
2. 使用EXISTS的SQL語句:
UPDATE TA SET CA=CA+10000 WHERE EXISTS (SELECT CA FROM TB WHERE
TB.CA=TA.CA)
3. 使用連接的SQL語句:
UPDATE TA SET TA.CA=TA.CA+10000 FROM TA,TB WHERE TA.CA=TB.CA
更新表A中表A存在但表B中不存在的數據
1. 使用IN的SQL語句:
UPDATE TA SET CA=CA+10000 WHERE CA NOT IN (SELECT CA FROM TB)
2. 使用EXISTS的SQL語句:
UPDATE TA SET CA=CA+10000 WHERE NOT EXISTS (SELECT CA FROM TB WHERE
TB.CA=TA.CA)
3. 使用連接的SQL語句:
UPDATE TA SET TA.CA=TA.CA+10000 FROM TA LEFT OUTER JOIN TB ON TA.CA=TB.CA
WHERE TB.CA IS NULL