mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON
好消息,
程序员专用早餐机。和掌柜说 ideaam,可以节省20元。 点击链接 或復·制这段描述¥k3MbbVKccMU¥后到淘♂寳♀
或者 淘宝扫码 支持下同行哈
----------------------------------------------------------------------------------------------------------------------------
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
using (testEntities entity = new testEntities())
{
var tableName = "test2";
var json = "{\"name\":\"hello\", \"age\":1, \"createtime\":\"2012-04-23T18:25:43.511Z\", object:{\"column1\":\"test\", \"column2\":\"test\"}}";
var jsonEntity = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(json); var tableList = entity.Database.SqlQuery<MysqlTableSchema>("show tables").ToListAsync();
tableList.Wait(); var isExistsTable = tableList.Result.Where(r => r.tables_in_test.ToLower() == tableName.ToLower()).Count() > 0;
if (!isExistsTable)
{
entity.Database.ExecuteSqlCommand("CREATE TABLE `" + tableName + "` (`id` INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`));");
} CreateColumns(tableName, jsonEntity);
}
} private static void CreateColumns(string tableName, JObject jsonEntity, string columPrefix = "")
{
using (testEntities entity = new testEntities())
{
var columList = entity.Database.SqlQuery<MysqlColumSchema>("DESCRIBE " + tableName).ToListAsync();
columList.Wait();
foreach (var item in jsonEntity.Properties())
{
var columName = string.IsNullOrEmpty(columPrefix) ? item.Name.ToLower() : columPrefix + "_" + item.Name.ToLower();
var isExists = columList.Result.Where(e => e.field.ToLower().Equals(columName)).ToList().Count() > 0;
if (!isExists)
{
var mysqlType = "";
var index = "";
switch (item.Value.Type)
{
case Newtonsoft.Json.Linq.JTokenType.Object:
CreateColumns(tableName, item.Value.ToObject<JObject>(), columPrefix = item.Name.ToLower());
continue;
case Newtonsoft.Json.Linq.JTokenType.Boolean:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");";
break;
case Newtonsoft.Json.Linq.JTokenType.Bytes:
break;
case Newtonsoft.Json.Linq.JTokenType.Comment:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Date:
mysqlType = "datetime NULL DEFAULT CURRENT_TIMESTAMP";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Float:
mysqlType = "decimal(6,2) NULL DEFAULT '0.00'";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Guid:
mysqlType = "nvarchar(45) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Integer:
mysqlType = "int(11) NULL";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.String:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Uri:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
default:
mysqlType = "nvarchar(2000) ";
break;
}
entity.Database.ExecuteSqlCommand("alter table " + tableName + " add column " +columName+ " " + mysqlType + ";" + index);
}
}
}
} public class MysqlTableSchema
{
public string tables_in_test { get; set; }
} public class MysqlColumSchema
{
public string field { get; set; }
public string type { get; set; }
public string key { get; set; }
public string Null { get; set; }
public string Extra { get; set; }
} }
mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON的更多相关文章
- SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询
SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...
- SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列
.请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ------------------- ...
- MySQL动态添删改列字段
动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...
- 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)
一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...
- MySQL数据表中有自增长主键时如何插入数据
原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值 ...
- oracle 如何在表中有数据的情况下,修改表字段的类型或者增加表字段的长度
场景:项目中某张表的字段长度不够用了,现在要增加其长度 分两种情况: 1.表中没有数据的情况,直接一条sql语句就能解决 alter table 表名 modify(字段名 字 ...
- WPF datagrid 动态增加列
DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...
- MySQL修改表一次添加多个列(字段)和索引
MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetai ...
- mysql批量生成修改表和列注释语句
当我们在一个数据库修改完备注后,需要将其导致另一个服务器上的数据库中,需要生成批量执行语句,方便操作,注意用change 或modified 进行列的属性修改时,没有写全的话会造成其它属性的丢失,如 ...
随机推荐
- [ 中危 ] dp意见反馈处存储型XSS
XSS平台架设攻击代码,有很多,如我是在http://xss.fbisb.com上架设的. 在 xxx.dianping.com系统意见反馈处插入xss代码提交,而后等待后台管理员点击,可打到其COO ...
- swap
添加交换分区 SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理 ...
- 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。
说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上 [Operatio ...
- 负载均衡---ribbon
Ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用. 上一篇简单讲解了eureka的使用,这一篇文章基于上一篇的基础上,讲一下springcloud的另一个重要的组 ...
- 在UnrealEngine中用Custom节点实现毛玻璃的效果
本人在论坛上找到了一篇实现毛玻璃效果的文章:https://forums.unrealengine.com/showthread.php?70143-So-Blurred-glass-material ...
- elementUI Tree 树形控件--官方文档
一.基础用法基础的树形结构展示,props相当于一个对实体类对像 <template> <el-tree :data="data" :props="de ...
- python基础一 ------linux某目录下批量的为特定文件加入可执行权限
需求: 一个文件夹中有个文件,要求对特定的文件加入可执行权限 某文件系统目录下有一系列文件: quicksort graph.py heap.java install.sh ...
- [转]OpenVPN官网的HOWTO
因为墙的原因,打不开.特此转一下: HOWTO Introduction OpenVPN is a full-featured SSL VPN which implements OSI layer 2 ...
- [BZOJ1814]Formula 1
Description: 一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数 Hint: \(n,m<=12\) Solution: 插头dp模板题,注意要讨论多种 ...
- HDU5518 : John's Fences
求出平面图的对偶图,那么需要选择一些环,使得这些环可以异或出所有环. 对于两个不同的区域,需要用一个代价最小的环把它们区分开,这对应最小割. 那么求出对偶图的最小割树,所有树边之和就是把所有区域都区分 ...