小腳本實(shí)現(xiàn)自動生成數(shù)據(jù)庫數(shù)據(jù)

emm... 差不多就是先拿到navicat中數(shù)據(jù)庫表的CREATE語句培慌,然后生成對應(yīng)的INSERT語句覆劈。用于日常開發(fā)中生成一些簡單的數(shù)據(jù)使用追城。幾萬條數(shù)據(jù)一般還是沒問題的。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>根據(jù)navicat的create語句隨機(jī)生成insert語句</title>
    <script type="text/javascript">
        
        function generateInsertClums() {
            // 獲取文本內(nèi)容
            var createStr=document.getElementById('getCreateStr').value;
            var colum = document.getElementById('insertNum').value;

        // 分析處理create語句
            var tableName = createStr.substring(createStr.indexOf('`')+1, createStr.indexOf('`', createStr.indexOf('`')+1));

            // 獲取需要分析的字符范圍
            var startIndex = createStr.indexOf('(');
            var lastIndex = createStr.lastIndexOf(')');


            // 遍歷獲取名字/類型鍵值對
            var resultMapper = {};
            var tagIsLeft = true;
            var leftPos = -1;
            var rightPos = -1;
            var clomName = 'fuck';
            for(var i = startIndex; i < lastIndex; i++) {
                // 獲取key
                if (createStr[i]=='`') {
                    if (tagIsLeft) {
                        if (createStr[i-1] != ' ' || createStr[i-2] !=' ') {
                            continue;
                        }
                        leftPos = i;
                        tagIsLeft = false;
                    } else {
                        rightPos = i;
                        tagIsLeft = true;
                    }

                    if (tagIsLeft) {
                        clomName = createStr.substring(leftPos+1, rightPos);
                        // 獲取type,此時leftPos為左開始點(diǎn)厘熟,rogitPos為右結(jié)束點(diǎn),然后思路為獲取結(jié)束點(diǎn)后第一個空格和第二個空格之間的內(nèi)容
                        var spaceLeft = rightPos+1;
                        var spaceRight = createStr.indexOf(' ', spaceLeft+1);

                        // 將數(shù)據(jù)加入mapper
                        resultMapper[clomName] = createStr.substring(spaceLeft+1, spaceRight);
                    }
                }
            }
            // return resultMapper;

            // for(var i = 0; i < colum; i ++) {
            //  document.getElementById('insertResult').value += getInsertCloms(resultMapper, tableName)+"\r\n";
            // }
            document.getElementById('insertResult').value += getInsertCloms(resultMapper, tableName, colum)+"\r\n";

        }

        function getInsertCloms(resultMapper,tableName, insertNum) {
            var insertStr = "INSERT INTO " + tableName;


            var paraStr = getInsertParaStr(resultMapper);
            // var valStr = getInsertValStr(resultMapper);
            var valStr = "";
            
            // console.log(valStr);


            for(var i = 0; i < insertNum; i++) {
                valStr+=getInsertValStr(resultMapper);
                valStr+="\r\n,";
            }
            valStr=valStr.substring(0,valStr.length-1);
            insertStr += " "+paraStr+" VALUES "+valStr+";";

            return insertStr;
        }

        // 獲取insert語句的字段值(除去主鍵id)
        function getInsertParaStr(resultMapper) {
            var paraStr = "(";
            // 遍歷resultMapper生成參數(shù)數(shù)據(jù)
            for(var i in resultMapper) {
                if (i=="id") {
                    continue;
                }
                paraStr+=i+",";
            }
            paraStr=paraStr.substring(0,paraStr.length-1);
            paraStr+=")";
            return paraStr;
        }

        // 獲取insert語句的隨機(jī)value值(除去主鍵id)
        function getInsertValStr(resultMapper) {
            var valStr = "(";
            // 遍歷resulet生成模板數(shù)據(jù)
            for(var i in resultMapper) {
                if (i=="id") {
                    continue;
                }
                // 在此處添加新的數(shù)據(jù)類型

                // console.log(resultMapper[i]);
                if (resultMapper[i].indexOf('int')>-1) {
                    // console.log(getRandomIntVal(5, 0));
                    if (i=="state" || i=="enabled" || i=="meter_type") {
                        valStr+=0;
                    } else {
                        valStr+=getRandomIntVal(5, 0);
                    }
                } else
                if(resultMapper[i].indexOf('varchar')>-1) {
                    // console.log(getRandomStringVal(12));
                    if (i.indexOf('name')>-1) {
                        valStr+="'"+getRandomChineseVal(5)+"'";
                    } else {
                        valStr+="'"+getRandomStringVal(5)+"'";
                    }
                    
                } else
                if (resultMapper[i].indexOf('date')>-1) {
                    // console.log(getRandomDateVal("yyyy-MM-dd"));
                    valStr+="'"+getRandomDateVal("yyyy-MM-dd")+"'";
                } else
                if (resultMapper[i].indexOf('decimal')>-1) {
                    // console.log(getRandomIntVal(5, 2));
                    valStr+=getRandomIntVal(5, 2);
                } else {
                    return "ERROR!!!!!!";
                }
                valStr+=",";
            }
            valStr=valStr.substring(0,valStr.length-1);
            valStr+=")";

            return valStr;
        }

        // 獲取特定位數(shù)的int值
        function getRandomIntVal(bit, pot) {
            var power = 1;
            for(var i = 0; i < bit; i++) {
                power *= 10;
            }
            power = Math.random()*power;
            return power.toFixed(pot);
        }


        function getRandomStringVal(bit) {
            bit = bit || 5;
          var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; 
          var maxPos = $chars.length;
          var pwd = '';
          for (i = 0; i < bit; i++) {
            pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
          }
          return pwd;
        }

        function getRandomChineseVal(bit) {
            bit = bit || 5;
          var $chars = '上海轉(zhuǎn)運(yùn)中心蕪湖杭州武漢洛陽海鹽東莞青島千島湖順豐圓通韻達(dá)中通天天快遞';
          var maxPos = $chars.length;
          var pwd = '';
          for (i = 0; i < bit; i++) {
            pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
          }
          return pwd;
        }

        function getRandomDateVal(dateFormat) {
            // 產(chǎn)生隨機(jī)整數(shù)包含上限值與下限值
            // function random(lower, upper) {
            //  return Math.floor(Math.random() * (upper - lower+1)) + lower;
            // }
            var year = Math.ceil(Math.floor(Math.random() * (2019 - 2018+1)) + 2018);
            var month = Math.ceil(Math.floor(Math.random() * (12 - 1+1)) + 1);
            var day = Math.ceil(Math.floor(Math.random() * (28 - 1+1)) + 1);
            if (dateFormat == "yyyy-MM-dd") {
                return year+"-"+month+"-"+day;
            }
            if (dateFormat == "yyyy-MM") {
                return year+"-"+month;
            }
        }
    </script>
</head>
<body>
    create語句:
    <textarea   name="getCreateStr" id="getCreateStr" rows="4" cols="100"></textarea>
    <br>
    生成數(shù)據(jù)條數(shù):
    <input type="text" name="insertNum" id = "insertNum"></input>
    <button type="submit" onclick="generateInsertClums()">生成按鈕</button>
    <br>
    <textarea   name="insertResult" id="insertResult" rows="10" cols="100"></textarea>


    <p>
                    &nbsp;科技與信息中心-產(chǎn)品一部-轉(zhuǎn)運(yùn)中心智能化部-季兆倫?&nbsp;
    </p>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屎媳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌论巍,老刑警劉巖烛谊,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘉汰,居然都是意外死亡丹禀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門鞋怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來双泪,“玉大人,你說我怎么就攤上這事密似”好” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵残腌,是天一觀的道長村斟。 經(jīng)常有香客問我,道長抛猫,這世上最難降的妖魔是什么蟆盹? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮邑滨,結(jié)果婚禮上日缨,老公的妹妹穿的比我還像新娘。我一直安慰自己掖看,他們只是感情好匣距,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布面哥。 她就那樣靜靜地躺著,像睡著了一般毅待。 火紅的嫁衣襯著肌膚如雪尚卫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天尸红,我揣著相機(jī)與錄音吱涉,去河邊找鬼。 笑死外里,一個胖子當(dāng)著我的面吹牛怎爵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盅蝗,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鳖链,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了墩莫?” 一聲冷哼從身側(cè)響起芙委,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狂秦,沒想到半個月后灌侣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裂问,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年侧啼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堪簿。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡慨菱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戴甩,到底是詐尸還是另有隱情,我是刑警寧澤闪彼,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布甜孤,位于F島的核電站,受9級特大地震影響畏腕,放射性物質(zhì)發(fā)生泄漏缴川。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一描馅、第九天 我趴在偏房一處隱蔽的房頂上張望把夸。 院中可真熱鬧,春花似錦铭污、人聲如沸恋日。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岂膳。三九已至誓竿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谈截,已是汗流浹背筷屡。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留簸喂,地道東北人毙死。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像喻鳄,于是被迫代替她去往敵國和親扼倘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時诽表,會觸發(fā)此異常唉锌。 O...
    我想起個好名字閱讀 5,176評論 0 9
  • 導(dǎo)語: 數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫.請不要被「數(shù)據(jù)庫」三個字所迷惑竿奏,數(shù)據(jù)...
    Han_105a閱讀 620評論 0 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,790評論 0 11
  • 一泛啸、數(shù)據(jù)庫概述 什么是數(shù)據(jù)庫數(shù)據(jù)庫就是存儲數(shù)據(jù)的倉庫绿语,其本質(zhì)是一個文件系統(tǒng),數(shù)據(jù)按照特定的格式將數(shù)據(jù)存儲起來候址,用戶...
    圣賢與無賴閱讀 3,847評論 0 4
  • 1.MySQL數(shù)據(jù)庫 2.SQL語句 第一節(jié)課 ###1(MySQL數(shù)據(jù)庫)數(shù)據(jù)庫概念.avi 5...
    碼了個農(nóng)啵閱讀 1,194評論 1 16