首页 > 开发 > 综合 > 正文

这里是将一个csv的表导入到数据库中,用lua解析

2024-07-21 02:51:26
字体:
来源:转载
供稿:网友
PRint(os.date())--dofile("C:/Program Files (x86)/Lua/lua_script/sql_str.lua") local ss = "tblTreasureInfo"local file = "I:/PlanJ_SS/SS_Server/dbcsv/ssdbGame/" .. ss ..".csv"local sql_del = "delete from "..sslocal result_ = "QA已导好表,执行文件  " .. ss .."  成功!!!!"local Zi_duan = {}local sql_Str = nil function getTpl0(tname)     -- 获取表各个字段		local t = {}	table.insert(t, Zi_duan)    for k, v in ipairs(t) do        if k == 1 then            return t[k]    --返回一个table        end    endend--以上的功能,可以打印第一条数据的字段function LoadCSV(filePath)    -- Load File        local file = assert(io.open(filePath, 'r'))        local content = file:read("*all")        file:close()    -- Read Word One By One        local c         = content -- content        local p         = 0       -- content check pos        local w         = ""      -- content check word        local w_next    = ""      -- content check word(next one)        local x         = 1       -- content table x        local y         = 1       -- content table y                local opt       = {}      -- output table              opt[y]    = {}              opt[y][x] = ""        local in_quote  = false   -- quote mode        while true do            p      = p + 1            w      = string.sub(c,p  ,p  )            w_next = string.sub(c,p+1,p+1)            if w == ',' then                if in_quote then                    opt[y][x] = opt[y][x]..w                else                    x = x + 1                    opt[y][x] = ""                end            elseif w == '"' then                if in_quote then                    if w_next == '"' then                        opt[y][x] = opt[y][x]..w                        p = p + 1                    else                        in_quote = false                    end                else                    in_quote = true                end            elseif w == '/n' then                if in_quote then                    opt[y][x] = opt[y][x]..w                else                    y = y + 1                    x = 1                    opt[y] = {}                    opt[y][x] = ""                end            elseif w == "" or w == nil then                opt[y][x] = nil                break            else                opt[y][x] = opt[y][x]..w            end        end    -- Return Table        return optend    local csvData = LoadCSV(file)    for k,v in pairs(csvData) do		--local result = table.concat(v)		--print(result)		if k == 1 then			for k2,v2 in pairs(v) do				if k == 1 then 					--print(k.."===="..k2.."---》"..v2)					table.insert(Zi_duan, v2)				end			end			table.remove(csvData, 1)			break;					else		end    end						--[[    for k,v in pairs(csvData) do							for k2,v2 in pairs(v) do									table.insert(t_tt[k], v2)												end     end	--]]function createInsertSql(tname, tpl)   --插入一个文件名和一个table    local tpl0 = getTpl0(tname)     -- 获取表各个字段    local ret = {}                  -- 插入记录sql     table.insert(ret, string.format("insert into `%s`(", tname))    for k, v in pairs(tpl0) do        if k > 1 then            table.insert(ret, ",")        end        table.insert(ret, "`")        table.insert(ret, v)		table.insert(ret, "`")    end	table.insert(ret, ") values ")	local result = table.concat(ret)    -- 最终的sql语句	--insert into `tpl_pack`(`packId`,`itemId`,``group``,`num`,`rate`,`rateType`) values 	print(result)		    for k, v in pairs(tpl) do         --解析一个table		if k <= (#tpl-1) then        if k > 1 then            table.insert(ret, ",")        end        table.insert(ret, "(")        for k2, v2 in pairs(v) do            if k2 > 1 then                table.insert(ret, ",")            end            if v2 == "nil_1" then                table.insert(ret, "'")				table.insert(ret, "'")							elseif type(v2) == "string" then				table.insert(ret, string.format("'%s'", v2))            else				table.insert(ret, "'")                table.insert(ret, v2)				table.insert(ret, "'")            end        end        table.insert(ret, ")")		end    end    table.insert(ret, ";")     local result = table.concat(ret)    -- 最终的sql语句		sql_Str = result    print(result)	--print(result_)    --print()endcreateInsertSql(ss, csvData)   --这里写上路径和文件名--执行数据库require"luasql.MySQL"   --创建环境对象   env=luasql.mysql()    --连接数据库   --conn=env:connect("wuxinchang","root","root","127.0.0.1",3306)    --设置数据库的编码格式   conn=env:connect("ssdbGame","derek","derek123","192.168.3.236",3306)    --设置数据库的编码格式   --conn:execute"SET NAMES UTF8"   --执行数据库操作conn:execute"SET NAMES GB2312"   --执行数据库操作        status,errorString = conn:execute(sql_del)      status,errorString = conn:execute(sql_Str)      if errorString == nil then  	print(result_)    return 1;  else      print(status,errorString )  end     conn:close()--关闭数据库连接   env:close()--关闭数据库环境  --dofile("C:/Program Files (x86)/Lua/lua_script/sql_str.lua") 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表