`
energykey
  • 浏览: 598180 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

换一种思路,循环插入数据库是否必要?

阅读更多
今天BOSS要我对网站所有的会员发一条消息,原来的系统是通过后台对每个会员发【每次只能选择一个或者多个,但不能选择全部】,前台根据消息表message_info里的user_id字段查询出对应该会员的消息。

本系统采用SSH+MYSQL
message_info数据结构如下
--------------  -------------------------------  -------
ID            bigint(20)       
TITLE         varchar(255)
CONTENT       text         
USER_ID       bigint(20)                   
PUBER_ID      bigint(20)               
CREATED_TIME  datetime  

前台查询语句如下:[这是翻译后的SQL,本是HQL]
select * from message_info where userId=${user.id} order by id desc

思路一:“写一个循环插入语句,在数据库里运行”
    由于我对MYSQL不是很熟,所以我花了1个小时去研究该怎样写SQL,但最终还是放弃了。大概思路就是建立一个存储过程然后里面加一个循环。

思路二:“在程序中for循环Insert语句”
    这个实现起来相对简单一些,不过需要改代码,服务器需要重启。

吃过饭后,坐在电脑前休息了一会,突然想到,网站现在只有上千的会员,但要是以后上万甚至上十万难道 还要继续这样循环插入么?一个是速度慢,影响服务器性能甚至可能直接导致服务器崩溃。第二个,这么多数据插到数据库里,有什么坏处地球人都应该知道吧。
于是我马上想到从SQL语句下手,方案如下:
SQL语句更改为:
select * from message_info where userId=${user.id} or userId=0 order by id desc

//userId=0用于表示所有userId,id是标识列,这里的0也可以用其他负数代替

插入语句:
INSERT INTO message_info
(title,content,user_id,puber_id,created_time)
VALUES('测试所有',
'三大随碟附送大时代<br><br>更多详情请点击<A target=_blank href=http://www.wibowibo.com/space.do?m=index&id=10>http://www.wibowibo.com/space.do?m=index&id=10</a> ',
0,
1,
now())

这样我只更改了前台的HQL【由于使用了自定义标签,所以服务器不需要重启】,数据库里只插入了一条信息,这样就解决BOSS交给我的问题,而不用再去写什么循环插入语句了~


总结:在我们编写循环插入语句的时候,最好先问一下自己,这样做是不是必要的?这样做是不是最适合的?作为程序员,实现一个功能有很多种方式,也许没有最好的方式,但一定有一个是最适合的,“退一步,海阔天空”。
程序员是脑力劳动者,所以当你在不断的重复同样的工作时,你就该想想,有什么方法可以替代这些无聊的步骤,作为程序员,就应该让自己变得“懒”点。

第一次写东东,表达能力有限,欢迎高手指点。
3
0
分享到:
评论

相关推荐

    Excel在Gridview显示与插入数据库

    标题中的“Excel在GridView显示与插入数据库”是一个关于使用ASP.NET技术处理Excel数据并与数据库交互的主题。GridView控件是ASP.NET Web Forms中的一个强大组件,常用于显示和操作表格数据。我们将深入探讨如何将...

    循环写入数据库例子

    循环写入数据库是一种常见的编程任务,特别是在处理大量数据时。在这个例子中,我们使用了编程软件LABVIEW来实现这一功能。LABVIEW是一款由美国国家仪器(National Instruments)公司开发的图形化编程环境,它以其...

    循环向数据库添加数据

    以下是一个典型的PL/SQL循环插入数据的示例: ```sql DECLARE l_id NUMBER := 0; BEGIN WHILE (l_id ) LOOP INSERT INTO test (id, name) VALUES (seq_test.NEXTVAL, '天使'); l_id := l_id + 1; END LOOP; ...

    C#.NET中如何批量插入大量数据到数据库中

    批量插入数据库时,有几种方法可以提高效率: 1. **使用SQL事务**:将多个插入操作封装在一个事务中,可以减少与数据库的交互次数,提高性能。在C#.NET中,可以使用`SqlConnection`的`BeginTransaction`、`Commit`...

    SQl Server 中的循环 跨数据库导数据为例

    在SQL Server中,循环是一种控制流结构,常用于执行重复性的任务,比如处理大量数据或在多个表之间进行操作。本篇文章将深入探讨如何利用循环实现跨数据库的数据导入,为数据库管理和数据分析提供实用技巧。 首先,...

    存储过程(循环插入数据)

    总的来说,使用存储过程和FOR LOOP循环在Oracle数据库中批量插入数据是一种高效的方法。然而,考虑到不同工具的兼容性,选择合适的执行环境和调整代码结构都是保证程序顺利运行的关键。对于开发和调试过程,推荐使用...

    几种数据库的大数据批量插入

    今天,我们将讨论几种数据库的大数据批量插入,包括 Oracle 和 SqlServer。 首先,让我们来看一下 IBatcherProvider 接口。这个接口是用于实现批量插入的插件服务接口,它提供了一个用于批量处理数据的方法。该方法...

    读取txt插入到本地数据库

    5. **执行SQL命令**:在循环中执行INSERT命令,将每行数据插入数据库。 ```csharp cmd.ExecuteNonQuery(); ``` 6. **关闭连接**:确保在操作完成后关闭数据库连接,释放资源。 ```csharp conn.Close(); ``` ...

    Delphi批量插入数据库数据..rar

    在IT领域,Delphi是一种基于Object Pascal编程语言的集成开发环境(IDE),广泛用于构建桌面应用程序,特别是与数据库交互的应用。本压缩包“Delphi批量插入数据库数据”可能包含了一个或多个示例代码,用于演示如何...

    详解C#把DataTable中数据一次插入数据库的方法

    整体而言,本篇文章详细地阐述了C#中将DataTable数据批量插入数据库的一种有效方法。通过合理利用SqlBulkCopy类,能够大幅提高大量数据的插入效率,特别适用于需要处理成千上万条记录的场景。而对于那些没有SQL ...

    批量插入数据到Oracle数据库Demo

    3. **FORALL**:在收集了大量数据后,可以使用FORALL语句一次性将它们插入到数据库中,避免了循环中的单次插入,提高了性能。 4. **绑定变量**:在Oracle中,绑定变量可以用来提高查询性能,减少解析次数。在批量...

    sql下三种批量插入数据的方法

    第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...

    MSSQL 循环插入语句

    本文档介绍了一种利用存储过程实现循环插入数据的方法,并且通过两个自定义函数`Get_StrArrayStrOfIndex`和`Get_StrArrayLength`来支持这一功能。此方法适用于需要根据动态生成的数据列表进行批量插入的场景。 ####...

    将excal批量数据插入到postgresql数据库(目前实现字符串拼接的方式)

    在本教程中,我们将聚焦于如何将Excel数据批量导入到PostgreSQL数据库,特别关注一种常见的方法——通过字符串拼接的方式。PostgreSQL是一个功能强大的开源关系型数据库管理系统,而Excel则是广泛使用的电子表格工具...

    c# 操作excel(c#实现excel数据读出并插入到数据库)

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用和.NET框架相关项目时。本主题聚焦于如何利用C#操作Excel文件,并将其中的数据读取出来,然后插入到数据库中。这对于数据迁移、数据分析或者报表...

    Android批量插入数据到SQLite数据库的方法

    `SQLiteStatement`是推荐的替代`InsertHelper`的方法,它提供了一种更高效的方式来执行预编译的SQL语句。首先,你需要创建一个`SQLiteStatement`对象,然后使用`bindXXX()`方法绑定参数,最后调用`executeInsert()`...

    kettle另一种简单的循环方式

    本文将深入探讨如何利用Kettle实现一种简单的循环方式,特别是在从Oracle源表分页读取数据并写入Oracle目标表的应用场景中。 首先,我们需要理解Kettle的工作原理。Kettle通过Job和Transformation两个主要组件来...

    mybatis 批量将list数据插入到数据库的实现

    MyBatis是一种基于Java的持久层框架,它提供了一种简单易用的方式来与数据库进行交互。在实际开发中,我们经常需要将大量数据批量插入到数据库中,MyBatis提供了多种方式来实现这一功能。本文将主要介绍MyBatis批量...

    oracle数据库中批量插入问题

    1. **使用SQL*Loader工具**:这是一种批处理工具,可以从外部文件中批量加载数据到Oracle表中。它支持多种数据格式,并能够处理复杂的转换规则。 2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口...

    java批量插入Oracle数据方法

    Java批量插入Oracle数据是一种高效的数据处理策略,尤其是在大数据量场景下。通过合理设计代码结构,利用`PreparedStatement`的批处理功能,可以显著提升数据插入的速度和系统的整体性能。在实践中,还需注意细节如...

Global site tag (gtag.js) - Google Analytics