Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问try块外部的字符串变量_Java_Mongodb - Fatal编程技术网

Java 无法访问try块外部的字符串变量

Java 无法访问try块外部的字符串变量,java,mongodb,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("log

我的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
的值为空。当我宣布它为

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

它给出了正确的日期,但不可访问外部捕获。如果(d==“”),我无法验证条件
。任何帮助

您可以在块外访问变量d。但是代码中还有其他问题。您对字符串使用了错误的比较运算符。在字符串比较中使用等于,而不是==。下面是代码中的问题:

if (d == "")
        d=(String) searchDate.next().get("login_date");
将其更改为:

if ("".equals(d))
另一个逻辑问题是在代码中:

if (d == "")
        d=(String) searchDate.next().get("login_date");
您的
searchDate
方法可能返回null,因此变量
d
将设置为null。但您的d空检查比较实际上是错误的:

if (d == "")
应该是

if (d == NULL)

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

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

再次尝试代码块,确保注释掉了
System.out…
语句(如现在所示)-这应该可以工作

编辑
正如Juned所建议的,您还应该更改检查空字符串的方式


if(d==“”)
替换为
if(d.length()==0)
if(d.equals(“”)
由于已在try-catch块外部声明变量“d”,因此不可能无法访问块外部的变量“d”。您能否尝试在块外打印d的值,并让我们知道您得到的确切错误/异常消息。看起来您假设变量“d”在外部无法访问,详细的问题或异常消息将有助于为您的查询提供非常具体的解决方案。

尝试将字符串初始化为
string d=null
首先使用
“”。等于(d)
或更好的
d。length()==0
!d是一个字符串使用
“”。等于(d)
它有什么帮助,OP说不可访问的外部捕获@newidiot如果变量是在catch块内定义的,那么它在catch块外将不可用。变量的作用域在try/catch块内。@DevZer0您能告诉我OP代码中的哪个变量是在catch块内定义的吗@Newidiot OP说他们使用了
String d=(String)searchDate.next().get(“login_date”)在try/catch块中定义。@DevZer0,OP实际上在try/catch之前声明了d。第二行只是输入错误。如果d为null,则d.length(…)和d.equals(…)都将引发异常。“.equals(d)是一种更安全的检查方法。