关于数据库和FOR循环问题(ASP)

关于数据库和FOR循环问题(ASP),第1张

pose=user("pose")

pose=split(pose,"|")

for i=0 to ubound(pose)

StrPicName=pose(i)&"gif"

responsewrite("<img src='" & StrPicName & "'>")

next

注意,

1此处用user作字段容易引起错误,因它是关键字,最好改个别的字段名

2responsewrite ""&pose(i)&"" 是不可能输出的

我: 哎,小花,面试去了吗?有问到Java 8 的新特性吗?

小花: Hey,Morty,多亏了你之前跟我详细讲解了Java8 的时间日期API,可让我显摆了一把。不过面试官说Java8的新特性可不止这一个,还有其他几个更重要的特性,比如 Stream API ,那究竟是什么神奇的特性呢?

我: Stream啊,是一个功能强大的新特性呢。简单来说, 是为了增强容器对元素的 *** 作能力而提供给开发者的 。它们都被放在了 javautilstream包 下。

而且,如果你知道Java8 的 Lambda表达式 ,那配合起来使用, 可以非常便捷地 *** 作大批量集合对象。

小花: 天呐,这感觉咋这么牛叉嘞!以前我要是想处理一个List集合基本都是for循环,要么就是增强for循环。那这么说这个Stream完全可以替代for循环了?

我: 对了,你一提到for循环,这里就不得不说上一说。像我们以前通过for循环来处理集合对象比如List的时候, 属于命令式编程 ,这个很好理解,简单的说就是我们 每一句指令的含义都非常清晰,一句指令,一条 *** 作,一一对应。 而使用Stream API代替for循环,成为 函数式编程 ,我们 通过简洁的语法,来调用一系列函数式语句 ,使其完成多步 *** 作,这样不仅可以极大地精简代码,同时也不会因为过多的执行步骤导致无法及时有效地发现bug,从而极大地简化了编程。

小花: 真厉害,那你快说一说这个Stream到底该咋用呢?

我: 先别着急,在介绍用法之前,我们先来说说Stream, 流的概念

说起来这个概念还是来自于一些其他的函数式编程语言。你可以将流想象成一个车间的流水线。这个流水线上,可以给产品进行 筛选、加工、再包装 。它 本身不具备存储功能 ,因此也 不属于数据结构

刚刚提到流水线的加工 *** 作,但是Stream不同,它无法修改数据源,比如,Stream的filter *** 作会产生一个不包含过滤元素的新的Stream,而不是从source中删除它们。另外, 所有的Stream *** 作必须以Lambda表达式作为参数

值得注意的是, Stream *** 作实际上是增强for循环的函数编程变式,没有元素下标的访问方式。

还有就是, 流可以转换成数组或者List ,流的 *** 作也分为三类,分别是:Intermediate、Terminal、short-circuiting ,其中Intermidiate *** 作永远是惰性的。

小花: 这三个类型的 *** 作分别都是什么意思呢?惰性又是代表什么意思呢?

我:Intermediate代表“中间的”,它表示流的中间 *** 作,它的作用主要是打开流,做某种程度的映射、过滤,然后返回一个新的流,交给下一个 *** 作继续处理 。脑海中要时刻想象流水线上的 *** 作。这类 *** 作是惰性的,什么意思呢?就是说 在程序调用的时候,其实这类 *** 作并没有真正的执行,只有在程序真正运行到这个位置的时候,才会执行,这就是惰性

小花: 哦,有点意思,那另外两个呢?

我: Terminal的意思是“最终的”,它的概念与Intermediate相对, 是表示流 *** 作的最后一项。一个流只能有一个Terminal *** 作,同时,Terminal *** 作的执行,才会真正开始流的遍历,并产生一个最终结果。

short-circuiting表示“短回路” *** 作。这个我们后面再慢慢体会。

小花: 来说说常规 *** 作吧。

我: 恩,首先,是创建流。

如果你手里有一个数组或者是List集合,可以参考这样的写法:

小花: 很简单嘛,那拿到这个流之后我们能做哪些事情呢?

我: 那我们就来说说应用案例。首先是 映射 *** 作 。首先,假设我们有这样一个记录名字的集合生成的流:

流的map()函数可以将输入流中的每一个元素映射为输出流中的另一个元素。比如,如果希望将所有的元素变成大写,可以这样写:

小花: 哇,这样只需要一条语句就完成了整个循环 *** 作,还真是比传统的命令式编程简洁了不少呢,不过这样一来信息量也增大了,可读性倒是有所下降。

我: 的确是这样,封装的特点就是隐藏实现细节,从这一层面上来说的确是增加了程序的理解难度,不过瑕不掩瑜,它强大的功能还远不止这些。

我们再来看接下来的场景。如果你希望将两个List集合合并在一起,你会怎么做呢?

小花: 要是我,我就直接调用 addAll() 方法,将其中一个List追加到另一个List的末尾。

我: 那在如果我在合并的过程中还想加点 *** 作呢?

小花: 你想干嘛?

我: 考虑这样的场景,如果希望将两个集合合并在一起,并且在合并的时候顺便做一些处理,那应该怎么写呢?

可以看到,在合并的过程中,我还将所有的名字都变成了小写,这样一条语句就可以完成所有的 *** 作。

小花: 你先等会!还可以这么写?我好想有点感觉了。

我: 其实本来也不难,我们接着来讨论一下筛选 *** 作。流的filter()函数可以对集合中的元素进行筛选:

还有一个我个人比较常用的函数—— forEach() 它可以接收一个Lambda表达式,然后在每一个元素上执行该表达式 。但是也会有诸多不便,比如, 无法修改自己包含的本地变量值,也无法return 提前返回。

小花: 恩,是的呢,真是一把双刃剑,虽然好用,但是却需要更加细心才能熟练运用。

我: 恩,的确是这样,Java8 提供的这套Stream API还包含很多特别有意思的函数。比如聚合 *** 作的reduce,来感受一下:

还有limit返回Stream的前面的n个元素,skip扔掉前面n个元素:

还有排序 *** 作:

小花: 真是越看越感觉强大。

我: 这种流式API一旦运用熟练,甚至可以代替一部分数据库的 *** 作。如果想了解跟多的Stream的细节,你可以查看javautilstream包下的类库。剩下的,就是需要在不断的实践中多总结和运用了。

---专注IT职场经验、IT技术分享的灵魂写手---

---每天带你领略IT的魅力---

---期待与您陪伴!---

for(;;)FOR循环是这样的,第一个分号前面是定义一个变量如:$i=1两个分号中间是定义条件如:$i<10第二个分号后是方法如:$i++

for($i=1;$i<10;$i++){

echo $i++;

}

这样的话就是输出一到九

如果你要用FOR 来写你那个数据库查询显示语句的话应该写不出吧 ,你看看下面有没有高手写出来咯,我也是PHP菜鸟 呵呵

如果是根据ID查询的话还有可能我写写看

还有如果你只是查数据库中的记录的话最好不要用mysql_fetch_array

因为这样会查出很多东西,而你只是想要的是记录,它会带出你查出的直的索引什么的,速度慢用mysql_fetch_assoc好

应该是数据库创建的有问题,result=sqlite3_exec(db,"create table student(name,score)",NULL,NULL,NULL);中create table student(name,score)没有指明创建的字段是什么类型的,改为create table student(ID integer primary key autoincrement,name varchar(50),score integer) 最好加个主键字段ID。

另外后面跟着的

if(SQLITE_OK==result)

{

printf("create table fail\n");

return -1;

}

估计是弄错了,应该是 if(SQLITE_OK!=result)表示数据库创建不成功则退出,由于这个错误所以数据库没有创建成功就继续下面的程序,因为没有创建数据库后面的插入语句也就执行失败了。

以上就是关于关于数据库和FOR循环问题(ASP)全部的内容,包括:关于数据库和FOR循环问题(ASP)、处理集合还是只会for循环那你该了解了解Stream API了、php用for怎么循环输出数据库类容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10190202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存