无法访问try块之外的String变量

时间:2013-07-29 06:48:32

标签: java mongodb

我的java代码是

String d="";
BasicDBObject dateq = null;
try {
    con.selectDB("test", "logData");

    dateq = new BasicDBObject("user_name", txtu);

    DBCursor searchDate = con.coll.find(dateq);
    //System.out.println(" "+ searchDate.next().get("login_date"));

    d=(String) searchDate.next().get("login_date");
    System.out.println("ddddddddddd"+d);
} catch (Exception e) {
    System.out.println("First time login");
}
System.out.println("login date" );
if (d == "") {
      BasicDBObject log = new BasicDBObject();
      log.put("user_name", txtu);
在上面的代码中,

d的值为null。当我宣布它为

String d=(String) searchDate.next().get("login_date"); 

它提供了正确的日期,但在catch之外无法访问。我无法验证条件if(d=="")。任何帮助

4 个答案:

答案 0 :(得分:0)

你也应该可以在街区外找到变量d。你的代码中还有其他问题。您使用错误的比较运算符作为字符串。使用equals进行字符串比较而不是==。这是代码中的问题:

if (d == "")

将其更改为:

if ("".equals(d))

另一个合乎逻辑的问题是你的代码:

        d=(String) searchDate.next().get("login_date");

您的searchDate方法可能会返回null,因此您的变量d将设置为null。但是你的空检查比较实际上是错误的:

if (d == "")

应该是

if (d == NULL)

答案 1 :(得分:0)

当您使用String d = "";尝试代码时,语句System.out.println(" "+ searchDate.next().get("login_date"));是否已注释?

如果它没有被注释掉,那么你会调用next()两次,这将消耗第一个(有效)条目,当代码可能会留下null进行第二次调用试图设置d

再次尝试代码块,确保System.out ...语句被注释掉(现在显示) - 这应该有效。

EDIT
正如Juned所建议的那样,你也应该改变你检查字符串的方式。

if (d == null || "".equals(d))

答案 2 :(得分:0)

if (d == "")替换为if (d.length()==0)if (d.equals(""))

答案 3 :(得分:0)

由于您已在try catch块之外声明了变量“d”,因此无法访问块外的变量“d”。您是否可以尝试在块外打印d的值,并告诉我们您获得的确切错误/异常消息。看起来您假设变量“d”无法在外部访问,详细的问题或异常消息将有助于为您的查询提供非常具体的解决方案。

相关问题