【问题标题】:I want to use a variable outside a FOR loop in JAVA我想在 JAVA 的 FOR 循环外使用变量
【发布时间】:2017-02-07 09:51:27
【问题描述】:

我有一个字符串,我想将其用作查询中的参数。我的代码如下:

List<EventPayload> mylist=eventpojo.getEventPayload();

            for(EventPayload array : mylist)
            {
                System.out.println("Comment Text :"+array.getCommentText());
                System.out.println("Comment Type :"+array.getCommentType());
                System.out.println("Comment Id :"+array.getCommentId());
                System.out.println("Email id :"+array.getComment_email());
                String email1=array.getComment_email();
            }

            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jcg-JPA");
            EntityManager em = entityManagerFactory.createEntityManager();

            String email=em.createQuery("SELECT user_id FROM UserInfo WHERE email_id = "+email1).toString();

我想在查询的循环外使用String email1。如何实现这个??

【问题讨论】:

  • 好吧,你可能有多个email1s(每个循环迭代一个)。你想用哪一个?
  • 然后在 for 循环之外定义 email1,
  • @marstran:或者你可能根本没有。
  • 另外,您的代码容易受到 SQL 注入的攻击。您应该使用准备好的语句将变量放入查询中。
  • @FrankPuffer True :)

标签: java


【解决方案1】:

email1 位于 forloop 内,因此范围缩小到该段...

在外部声明,将变量的范围设置为也可以在外部访问...

List<EventPayload> mylist=eventpojo.getEventPayload();
String email1=null;  //HERE!!
for(EventPayload array : mylist)
{
    System.out.println("Comment Text :"+array.getCommentText());
    System.out.println("Comment Type :"+array.getCommentType());
    System.out.println("Comment Id :"+array.getCommentId());
    System.out.println("Email id :"+array.getComment_email());
    email1=array.getComment_email();
}

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jcg-JPA");
EntityManager em = entityManagerFactory.createEntityManager();

String email=em.createQuery("SELECT user_id FROM UserInfo WHERE email_id = "+email1).toString();

【讨论】:

  • 这样做只会在 SQL 中使用最后一封电子邮件
  • 我之前尝试过这个。在这样做之后,我在 email1=array.getComment_email(); 处收到重复变量的错误;循环内
  • email1=array.getComment_email();只是赋值不声明,所以没有dupl变量...
【解决方案2】:

简短回答:你不能

长答案/进一步的问题: 你想做什么?

为每个 EventPayload 触发一个 SQL -> 然后在循环中执行此操作

为一个不同的 EventPayload 触发 SQL -> 在列表中查找对象(或过滤列表)并针对该对象执行查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2014-08-05
    • 1970-01-01
    • 2018-09-28
    • 2017-02-17
    • 2016-05-06
    相关资源
    最近更新 更多