$sql = " CREATE TABLE IF NOT EXISTS `$table_name` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int (11) DEFAULT NULL COMMENT 'user_id',
`url` VARCHAR (255) DEFAULT '' COMMENT '地址',
`params` text (0) DEFAULT '' ,
`response` text (0) DEFAULT '' ,
`created_at` VARCHAR (45) NOT NULL COMMENT '时间',
`type` VARCHAR (45) NOT NULL COMMENT '类型',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表';";
Db::execute($sql);
-
TP5创建动态数据表
2019-10-05 02:24:39$sql = " CREATE TABLE IF NOT EXISTS `$table_name` ( ...) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表';"; Db::execute($sql); 转载于:https://www.cnblogs.com/ali1012/p/10637047.html转载于:https://www.cnblogs.com/ali1012/p/10637047.html
-
Yii Active Record 动态数据表
2014-06-04 20:11:06AR class:数据表AR class property:数据表的一列AR 实例:数据表的一条数据 所以对于常用的数据库操作(CRUD)可以转化成一种面向对象的数据操作形式。 实现一个AR类的的最简代码如下: class Post extends ...Active Record(AR)是一种流行的 对象-关系映射(ORM)技术,其映射关系为
- AR class:数据表
- AR class property:数据表的一列
- AR 实例:数据表的一条数据
所以对于常用的数据库操作(CRUD)可以转化成一种面向对象的数据操作形式。
实现一个AR类的的最简代码如下:
class Post extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return 'tbl_post'; } }
只需重载数据表方法tableName,返回数据表名字即可。
但是现在的问题是,如果数据表的名字不确定,是否可以在插入或者查询时动态的分配数据表的名字。例如,如果对业务中的log流水做查询的工作,我们知道,一般写log时都是每天一张表,例如tbl_log_20140601, tbl_log_20140602, ...。因此没有办法把每天定义成一个AR class。
解决方法如下:
/* * Usage: * $result = Log::model()->setDate("20140603")->findAll(); */ class Log extends CActiveRecord { private $_date; public static function model($className=__CLASS__) { return parent::model($className); } public function tableName() { return "tbl_log_". $this->getDate(); } public function setDate($date){ $this->_date = $date; $this->refreshMetaData(); return $this; } public function getDate(){ if($this->_date === NULL){ $this->setDate("20140601"); } return $this->_date; } }
其使用方法为:
$result = Log::model()->setDate("20140603")->findAll();
在执行Log::model()时,Yii框架会初始化当前的instance,因此会立刻调用tableName(),并且形成一些中间数据(metaData),因此在setDate以后需要调用 refreshMetaData() 来刷新当前已经形成的中间数据。
简要做个笔记,希望对大家有帮助。
-
springboot+shardingsphere+druid的动态数据表创建demo搭建
2019-12-12 14:32:43项目需要给不同的用户分不同的表记录数据,因此需要使用分库分表的中间件进行多数据源查询,本项目使用beetlsql,因此需要手动创建表。 为什么选择shardingsphere不选择mycat mycat无代码侵入性,但需要提前配置好...背景
项目需要给不同的用户分不同的表记录数据,因此需要使用分库分表的中间件进行多数据源查询,本项目使用beetlsql,因此需要手动创建表。
为什么选择shardingsphere不选择mycat
mycat无代码侵入性,但需要提前配置好相关配置,与需求不符。
具体使用
pom配置
<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>3.0.0}</version> </dependency>
使用shardingsphere3.0.0版本
application.properties配置
#可配置多数据源,本demo只使用单数据源 #sharding.jdbc.datasource.names=ds0,ds1 sharding.jdbc.datasource.names=ds sharding.jdbc.datasource.ds.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds.driver-class-name=com.mysql.jdbc.Driver sharding.jdbc.datasource.ds.url=jdbc:mysql://localhost:3306/ds?useSSL=false&characterEncoding=utf-8 sharding.jdbc.datasource.ds.username=root sharding.jdbc.datasource.ds.password=123456 #下方是多数据源ds0配置,本demo不使用 #sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource #sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver #sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0?useSSL=false&characterEncoding=utf-8 #sharding.jdbc.datasource.ds0.username=root #sharding.jdbc.datasource.ds0.password=123456 #下方是多数据源ds1配置,本demo不使用 #sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource #sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver #sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1?useSSL=false&characterEncoding=utf-8 #sharding.jdbc.datasource.ds1.username=root #sharding.jdbc.datasource.ds1.password=123456 #sharding.jdbc.sharding.tables.order.actual-data-nodes=ds$->{0..1}.order$->{0..1} #sharding.jdbc.sharding.tables.order.actual-data-nodes=ds.order$->{0..1} sharding.jdbc.sharding.tables.order.dynamic=true sharding.jdbc.sharding.tables.order.table-strategy.standard.sharding-column=user_id sharding.jdbc.sharding.tables.order.table-strategy.standard.precise-algorithm-class-name=com.per.algorithm.ModuleSharingTableAlgorithm #sharding.jdbc.sharding.tables.order.table-strategy.standard.sharding-column=user_id #sharding.jdbc.sharding.tables.order.table-strategy.standard.precise-algorithm-class-name=com.per.algorithm.ModuleSharingTableAlgorithm #sharding.jdbc.sharding.tables.order.table-strategy.inline.sharding-column=user_id #sharding.jdbc.sharding.tables.order.table-strategy.inline.algorithm-expression=order$->{user_id % 2} sharding.jdbc.sharding.tables.order.key-generator-column-name=order_id #sharding.jdbc.sharding.tables.order.key-generator-type=SNOWFLAKE sharding.jdbc.sharding.tables.order.key-generator-class-name=io.shardingsphere.core.keygen.DefaultKeyGenerator #sharding.jdbc.sharding.tables.order_item.actual-data-nodes=ds$->{0..1}.order_item$->{0..1} sharding.jdbc.sharding.tables.order_item.actual-data-nodes=ds.order_item$->{0..1} sharding.jdbc.sharding.tables.order_item.table-strategy.inline.sharding-column=order_id sharding.jdbc.sharding.tables.order_item.table-strategy.inline.algorithm-expression=order_item$->{order_id % 2} sharding.jdbc.sharding.tables.order_item.key-generator.column=order_item_id sharding.jdbc.sharding.tables.order_item.key-generator.type=SNOWFLAKE sharding.jdbc.sharding.binding-tables=order,order_item sharding.jdbc.sharding.broadcast-tables=config #sharding.jdbc.sharding.default-database-strategy.inline.sharding-column=user_id #sharding.jdbc.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2} #该处配置默认数据源 #sharding.jdbc.config.sharding.default-data-source-name=ds0 #sharding.jdbc.config.sharding.default-database-strategy.standard.sharding-column=user_id #sharding.jdbc.config.sharding.default-database-strategy.standard.precise-algorithm-class-name=com.per.algorithm.ModuleSharingTableAlgorithm sharding.jdbc.config.sharding.default-table-strategy.standard.sharding-column=user_id sharding.jdbc.config.sharding.default-table-strategy.standard.precise-algorithm-class-name=com.per.algorithm.ModuleSharingTableAlgorithm sharding.jdbc.config.props.sql.show=true
bean
@Data @Builder @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class Order implements Serializable { private static final long serialVersionUID = -21353099551913779L; @AutoID private Integer orderId; private Integer userId; private String name; }
@Data @Builder @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) public class OrderItem implements Serializable { private static final long serialVersionUID = -21343099551913779L; @AutoID private Integer orderId; private String item; private Integer userId; }
dao
@Repository public interface OrderDao extends BaseMapper<Order> { }
@Repository public interface OrderItemDao extends BaseMapper<OrderItem> { }
service
orderService:
@Service @RequiredArgsConstructor(onConstructor_ = {@Autowired}) @Slf4j public class OrderService { private final OrderDao orderDao; private final CreateTableUtil createTableUtil; public void addOrder(Integer userId, String name) { String tableName = "`order" + userId + "`"; String sql = "create table IF NOT EXISTS " + tableName + " (\n" + " `order_id` bigint(20) NOT NULL AUTO_INCREMENT,\n" + " `user_id` bigint(20) NOT NULL,\n" + " `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,\n" + " PRIMARY KEY (`order_id`) USING BTREE\n" + ") ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;"; try { createTableUtil.createTable(sql); } catch (SQLException e) { e.printStackTrace(); } Order order = Order.builder() .userId(userId) .name(name) .build(); orderDao.insertTemplate(order); } public Order getOrder(Integer orderId, Integer userId) { return orderDao.createLambdaQuery() .andEq(Order::getOrderId, orderId) .andEq(Order::getUserId, userId) .single(); }
建表的工具类
@Component @RequiredArgsConstructor(onConstructor_ = {@Autowired}) @Slf4j public class CreateTableUtil { private final DataSource dataSource; public void createTable(String sql) throws SQLException { Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement(); statement.executeUpdate(sql); statement.close(); connection.close(); } }
算法
需要实现相应的算法接口
public class ModuleSharingTableAlgorithm implements PreciseShardingAlgorithm<Integer> { public ModuleSharingTableAlgorithm() { } @Override public String doSharding(Collection<String> collection, PreciseShardingValue<Integer> preciseShardingValue) { System.out.println("进入分片算法"); for (String a : collection) { //该处可以查询到具体的数据源或表名 System.out.println(a); } //该方法可以查询到配置的列名 System.out.println("column = " + preciseShardingValue.getColumnName()); //该方法可以查询到逻辑表名 System.out.println("table = " + preciseShardingValue.getLogicTableName()); //该方法可以查询到列的数据 System.out.println("value = " + preciseShardingValue.getValue()); for (String each : collection) { //该处根据userId决定要进入的分表,然后返回表名 return each + preciseShardingValue.getValue(); } throw new UnsupportedOperationException(); } }
结语
该demo只是验证技术可行性,确定了可以通过动态创建表的方式进行分表,正式使用时需要进行对应的封装以及配置的修改,可引入配置中心进行配置管理等。
-
Oracle Jdeveloper 上传XML文件到动态数据表中
2012-03-10 22:01:01一、创建所需数据 CREATE TABLE "TEST" ( "ID" NUMBER NOT NULL ENABLE, "NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE, "AGE" NUMBER NOT NULL ENABLE, "DEPT" VARCHAR2(50 BYTE) NOT NULL ENABLE,一、创建所需数据
CREATE TABLE "TEST" ( "ID" NUMBER NOT NULL ENABLE, "NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE, "AGE" NUMBER NOT NULL ENABLE, "DEPT" VARCHAR2(50 BYTE) NOT NULL ENABLE, CONSTRAINT "TEST_PK" PRIMARY KEY ("ID") ENABLE )
要导入到数据库中的XML文件
<?xml version="1.0" encoding="UTF-8" ?> <list> <persons> <id>001</id> <name>张三</name> <age>34</age> <dept>销售部</dept> </persons> <persons> <id>002</id> <name>李四</name> <age>25</age> <dept>销售部</dept> </persons> <persons> <id>003</id> <name>小明</name> <age>30</age> <dept>销售部</dept> </persons> </list>
二、新建fusion web application-->ImpXML
基于test表建立VO对象 由于我们这里是要导入数据到表中,所以这个VO对象初始应该是没有数据的,因此需要在query中设置
where 1==0 查询条件,使初始行集为空。如下图:
三、新建jspx页-->test.jspx
拖动Input File、Panel Collection控件到页面上,拖动TestView1数据控件到Panel Collection控件里面。现在你的
test.jspx看起来应该是这样
四、编写后台bean响应Inpu File控件的ValueChangeListener
这个bean主要由两个函数组成。
public void getFile(ValueChangeEvent valueChangeEvent)
这个函数通过调用第二个函数
private void parseFile(InputStream file)
对xml文件进行解析后,对TestView1中的行集进行赋值。
这两个函数需要注意以下几点:
1、IOUtils.copy(file.getInputStream(), writer, "UTF-8")
这句要注意后面的编码方式要与XML文件的编码方式相对应,否则,解析出来的有可能是乱码。2、JXDocumentBuilderFactory factory =
(JXDocumentBuilderFactory)JXDocumentBuilderFactory.newInstance("oracle.xml.jaxp.JXDocumentBuilderFactory", ClassLoader.getSystemClassLoader());
由于我们主要利用oracle.xml.parser.v2、oracle.xml.jaxp两个库对XML文件进行解析,在这一步建立XML factory的时候,
由于在weblogic lib中也有这样的方法,为了避免冲突,可以采用全限定名称oracle.xml.jaxp.JXDocumentBuilderFactory,
或在weblogic.xml文件中指定库调用优先级的方式限定使用oracle库。这里采用的第一种方式。
3、赋值的时候要注意列名的大小写
五、设置控件属性
设置table控件的PartialTriggers为InputFile控件,Input File控件AutoSubmit属性为true
运行test.jspx,当我们选定xml文件后,它应该自动出现在下面的表里。如下图:
示例源代码下载
-
vue使用element el-table实现动态表头数据表、并滚动展示列表
2020-10-19 15:52:04#vue使用el-table,实现动态数据表、并滚动展示 ###tableLabel表头数据,支持条数、宽度设置 ###tableData存放所有数据, ###showList存放用于展示的数据, ###使用setInterval定时更新showList(删除第一条,末尾... -
EXCEL动态数据透视表
2019-06-06 13:43:04下面就给大家讲解利用excel做动态数据透视表。 原始数据源: 第一步:先做数据透视表 数据透视表的数据是到六月份 第二步:插入——表格——创建表确定 第三步:公式——名称管理器——编辑名称改为表格... -
laravel根据数据动态生成表头和表格数据
2019-08-23 17:08:41如下图,两个表的表头和数据一一对应,都为动态生成; 完成功能思想:1.找出数据中的存在的最长表头,即所有数据都为表头的子集表头 2.渲染数据时候,根据表头的字段进行帅选要显示的数据(用循环判断实现) 后端... -
vue+elementUI动态表头表数据循环遍历动态展示(表格中修改数据)
2020-04-09 17:09:42vue+element开发的表格,表头是不确定的,根据接口动态渲染,表数据也是根据动态的表头动态展示的 (如果动态表头不熟悉怎么操作,查看我的另外一篇文章) element 中的table表头动态渲染 <el-table-column v-for... -
使用 JdbcTemplate 动态创建表并添加数据 动态连表查询
2014-11-13 16:11:52前面已经说了一个动态的根据当前时间创建表和插入数据的示例,那么如何进行动态的查询呢? 我写了这样一个公共方法,仅供参考! 这里需要传递两个时间间隔参数,根据时间间隔判断相差的月数,然后从起始... -
oracle 动态查询表分区数据
2020-11-02 17:26:34oracle 动态查询表分区数据 需求说明 :将查询的表分区数据插入到现有表中 declare v_sql varchar2(100) := ‘’; --定义空sql begin select TO_CHAR(SYSDATE - 1, 'YYYYMMDD') into v_sql from dual; --给字符串sql... -
layui数据表格动态渲染表头
2020-09-17 18:02:35在项目中利用layui数据表格的时候遇见几次需要动态渲染表头的情况,查了些资料,总结了一下,总体都是讲数据表格渲染列的cols:[]这部分代码拿出来进行操作。 当需要对页面中表格进行切换时,对于不同表头需要根据一... -
UE4动态加载数据表
2018-09-28 14:36:59创建一个数据表 需要改成UTF-8编码 2.创建一个Actor .h UFUNCTION(BlueprintCallable, Category = "MySocket") TMap<int, FString> GetCsvContents(FString csvPath, int LieNum); .cpp #include ... -
mysql动态添加表及数据
2019-10-28 17:56:06mapper接口:如下图包含表明,及添加的数据 xml文件:这里的SQL又添加临时表和表数据。 -
【数据结构——树表的查找(动态查找表)】
2020-11-28 20:43:36【数据结构——树表的查找(动态查找表)】 目录【数据结构——树表的查找(动态查找表)】动态查找表(基于树的查找法)(一)二叉排序树1、定义2、查找算法3、插入算法4、创建算法5、删除算法(二)平衡二叉树1、... -
easyui如何动态加载表头及其数据
2016-01-11 09:54:01通过easyui动态的定义表头数据(从数据库拼接起来的),数据也是拼接,如何实现呢 -
在mybatis中动态创建数据表
2017-04-11 20:01:56工作需要,在Mybatis中动态创建数据表 <![CDATA[ CREATE TABLE ${tableName} ( id INT PRIMARY KEY AUTO_INCREMENT, project_id VARCHAR(20) NOT NULL, data VARCHAR(255), serial_number VARCHAR... -
ElementUI表格动态设置表头label数据
2020-09-05 11:41:37业务需求:需要使用Element组件库做一个table表头动态改变的数据table 文章目录分析问题解决问题结果展示 分析问题 我们使用Element的table,常用的方式是通过绑定需要的表格data数据,数据格式为对象数组。这时,... -
动态生成数据表
2008-05-05 10:49:00今天同事让我修改他以前写的动弹生成表以及字段的存储过程,因为以前只有3中选项类型,现在7种类型,所以要重新生成答案表。所以这个小任务就落在我身上了。。呵呵。 其实问题也简单了。因为他以前已经写了我只要加... -
动态数据结构——动态链表(malloc函数的使用)
2018-02-26 21:30:51即我们需要一个个地去开辟新节点,并且去输入节点的数据信息,然后建立起前后相连的关系。 下面我们开始尝试建立起一个动态链表: 1.结构体部分: struct weapon{ int price; int atk; struct weapon * next;... -
数据结构顺序表动态分配
2021-01-17 13:52:50数据结构动态分配 实现一些基本的功能:查找数据(按值和按位)、删除数据(通常按位)、插入元素(按位)、输出表的长度以及打印表。 1>定义结构体 定义数据时尽量有很高的可读性 对于引用符号&的... -
element-ui的table动态生成表头和数据,且表中数据可编辑
2018-11-10 20:58:22如果只是实现element的table表格数据可编辑请到:https://blog.csdn.net/zeng092210/article/details/91385673 ...3.去判断显示那个数据表 4.实现双击的时候在可编辑 // 双击修改 弹出input tableDbEdit(... -
JDBC 动态创建数据表 及 SQL预处理
2015-03-05 08:25:51这两天由于公司的需求,客户需要自定义数据表的字段,导致每张表的字段都不是固定的而且很难有一个通用的模板去维护,所以就使用JDBC动态去创建数据表,然后通过表的字段动态添加数据,数据的来源主要是用户提供的... -
mybatis向动态表名,动态属性表中插入数据,更新数据
2020-09-21 21:18:211、在向动态表中插入数据后,要返回主键id,需要建实体类。(若是不需要返回主键,则不需要建实体类) package com.lyf.entity public class InsertMao{ //主建 private int id; //表名 private String ...