根据json数据生成建表脚本的解决方案

3 篇文章 0 订阅
3 篇文章 0 订阅

开发中,经常需要调用各种接口,而大部分接口都以json格式返回数据。
前段时间,有个需求,需要将json数据保存进数据库,而根据json数据建立相应的数据库表是个很耗体力的工作,所以决定开发一个小工具 ,可以根据json数据自动生成建表脚本。
该工具使用Newtonsoft.Json序列化工具解析json数据,再逐字段生成SQL脚本。下面是工具的主体代码。

using Newtonsoft.Json.Linq;
using System;
using System.Windows.Forms;

namespace YLTool
{
    public partial class frmCreateSqlFromJson : Form
    {
        private string sepMark = " ";

        public frmCreateSqlFromJson()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                JObject jo = JObject.Parse(textBox1.Text);
                string sql = @"CREATE TABLE NND(" + Environment.NewLine;
                sql = sql + @"NND_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 'NND_id',";
                foreach (var j in jo)
                {
                    if ("Integer".Equals(j.Value.Type.ToString()))
                    {
                        if (j.Key.Contains("is_") || j.Key.Contains("type"))
                        {
                            sql = sql + j.Key + sepMark + @"tinyint(4) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
                        }
                        else
                        {
                            sql = sql + j.Key + sepMark + @"mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT" + sepMark + "'" + j.Value + "'," + Environment.NewLine;
                        }
                    }
                    else if ("String".Equals(j.Value.Type.ToString()))
                    {
                        decimal tempDecimal = 0;
                        DateTime dt = new DateTime();
                        if (decimal.TryParse(j.Value.ToString(), out tempDecimal))
                        {
                            sql = sql + j.Key + sepMark + @"decimal(11,2) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
                            continue;
                        }
                        if (DateTime.TryParse(j.Value.ToString(), out dt))
                        {
                            sql = sql + j.Key + sepMark + @"datetime NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
                            continue;
                        }
                        else
                        {
                            sql = sql + j.Key + sepMark + @"varchar(50) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
                            continue;
                        }
                    }
                }
                sql = sql + @"PRIMARY KEY (NND_id)" + Environment.NewLine;
                sql = sql + ")";
                textBox2.Text = sql;
            }
            catch (Exception ex)
            {
                textBox2.Text = "出错啦!~~~~~~~~~~~~~~" + Environment.NewLine + ex.Message;
            }
        }
    }
}

本工具暂时生成的是mysql的建库脚本,也只支持varchar等很少的类型。工具的画面如下图所示。
这里写图片描述

后面计划,丰富工具这持的类型,丰富支持的数据库系统,待续。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值