Java 无法访问try块外部的字符串变量
我的java代码是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
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)是一种更安全的检查方法。