日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql批量加逗号_批量插入数据到数据库的方式

發布時間:2025/3/15 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql批量加逗号_批量插入数据到数据库的方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

出于性能的考慮。用Insert語句一條一條的插入大量數據到數據庫肯定不是最好的選擇。指不定還會把數據庫搞死了。

前幾天,用戶提了需求,要求寫Job實現,每天清空一個Table,然后將新發過來的數據Insert到數據庫中。想著一條條Insert有點遜。于是就去查了批量插入數據的方法。看到可以用OracleBuckCopy進行批量操作(一臉驚喜), 但是我想要清空表成功之后,就執行批量插入數據,如果都成功就commit,否則就rollback. 然后我就死在了這,因為OracleBuckCopy中的writeToServer不能和清空數據庫共享一個Transaction. 必須是單獨的Transaction.?那要是我清空了數據庫,然后還插入失敗了,空空如也的數據庫豈不是會讓我死的很難看。。

So,我就想,反正數據量不是那么大。那我就Low一點算了,一條一條Insert得了,反正沒人看得見(手上的系統不止一個,事情還一起來,在忙忙人海中迷茫)。噠噠噠,屁顛顛的去改了代碼,三下五除二,搞定(簡直不要太高興),帥不過三秒。發現當數據超過296條,就會死翹翹啦,一直說達到了游標最大數(ORA-01000?什么鬼?游標?)。我沒用游標啊,就一個Delete和N個Insert語句啊?(一臉狗帶像)。。網上一搜,說什么數據庫默認游標300,可能系統占幾個,所以就只能插入296條數據。不知是個啥么子原理。要去改游標數,改成多少呢?數據量不定啊,萬一以后外部系統的數據過大,我設置的游標豈不是不夠用?

What?

who am I?

where am I?

what is the purpose?

發現自己越走越遠,于是準備洗心革面,從頭來過。

OK,在一個事務中,實現清空表,然后批量插入數據。

鑒于自己不能徒手寫1000行代碼(活該單身),于是在網上搜搜搜,終于,讓我看到了一個讓我心動的代碼。借鑒部分代碼,測試后,性能幫幫噠。自己的功能也實現了。

So, 小小記錄一下,萬一以后就又有用了呢。

一,使用參數數組的方式,批量Insert數據 ,速度快,但是代碼中定義參數稍顯麻煩。同時,要么全部成功Insert數據庫,如果失敗全部都Insert失敗。

我在代碼中使用這種方法,是因為要做到,清空表和Insert成功都成功,則Commit,否則,回滾所有的操作。

A part of my code, just as a conference.

//設置一個連接字符串,最好放到Config文件中,以便在不懂環境中測試的時候好修改;//

OracleConnection conn= newOraceConnection(connectStr);

OracleCommand commad= newOracleCommand();//這個參數需要指定每次批量Insert的記錄數

command.ArraryBindCount =recordsCount;//在這個SQL語句中,用到了參數,參數我們很熟悉,但是這個參數在傳值的時候,用到的是數組,而不是單個的值。

command.CommandText = "insert into student values(:stuId,:stuName,:sex)";

conn.Open();//下面定義幾個數組,分別是三個字段,數組的長度由參數決定

int[] sutId = new int[recordsCount];string[] stuName = new string[recordsCount];string[] sex = new string[recordsCount];//為了傳遞參數,不可避免的要使用參數,下面會連續定義三個參數

OracleParameter stuIdParam = new OracleParameter("stuId",OracleType.Int32);

stuIdParam.Direction=ParameterDirection.Input;

stuIdParam.Value=stuId;

command.Parameters.Add(stuIdParam);

OracleParameter stuNameParam= new OracleParameter("stuName",OracleType.VarChar2);

stuNameParam.Direction=ParameterDirection.Input;

stuNameParam.Value=stuName;

command.Parameters.Add(stuNameParam);

OracleParameter sexParam= new OracleParameter("sex",OracleType.VarChar2);

sexParam.Direction=ParameterDirection.Input;

sexParam.Value=sex;

command.Parameters.Add(sexParam);//在下面的循環中,先把數組定義好,而不是如往常那樣直接生成SQL

for(int i = 0; int

{

stuId[i]= if;

stuName[i]=i.ToString();

sex[i]=i.ToString();

}//這個調用將把參數數組傳入SQL,同時寫入數據庫

command.ExecuteNonQuery();

View Code

二, 用OracleBuckCopy,批量插入數據到數據庫。但是要注意,只能在版本為11及以上數據庫才可以用。如果代碼中和服務器中的Oracle.DataAccess.dll版本不同,可以在配置文件中設置即可。

publicKeyToken= "89B483F429C47342"

culture= "neutral" />

oldVersion= "2.112.1.0"

newVersion= "2.112.1.2"/>

public voidBulkToDB(DataTable dt)

{using (OracleBulkCopy bcp = newOracleBulkCopy(con,OracleBulkCopyOptions.UseInternalTransaction))

{

bcp.BatchSize= 400;

bcp.BulkCopyTimeout= 1000;

bcp.DestinationTableName= "";try{

bcp.WriteToServer(dt);

}catch(Exception ex)

{throw newException(ex.ToString());

}finally{

bcp.Close();

con.Close();

}

}

}

View Code

三。用SQL Loder批量插入數據,感興趣的自己去研究,看到很多人寫過這個,自己動手用用就OK了,可以點擊這里看別人總結的。

小小總結一下,備查。

總結

以上是生活随笔為你收集整理的mysql批量加逗号_批量插入数据到数据库的方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。