2012-06-13 70 views
0

我遇到了一个奇怪的情况。代码如下:Java奇怪的变量赋值查询

public static int add(String trcd, String tlcd, String dept, String doDate, 
        String doTime, String andConfirm, Teller admin) throws 
    Exception { 

try { 
    String table1 = "table1"; 
    String table2 = "table2"; 
    String trap = null; 
    String trtype = null; 

    String sql = "select * from " + table2; 

    DataSet dataset = DBOper.DBQuery("taUtil", sql); 

    if (dataset.isEmpty()) { 
    return -1; 
    } 
    else { 
    HashMap map = dataset.getRow(0); 
    trap = (String) map.get("aut_ap_code"); 
    trtype = (String) map.get("aut_type_code"); 
    //point 1 
    sql = "insert into " + table1 + " values("+trtype + "','" + doDate + "','" + doTime + "','N','Y')"; 

    DBOper.DBUpdate("taUtil", sql); 

    if (andConfirm.equals("Y")) { 
    //point 2 
    sql = "select * " + table1 +" where tr_create_date='" + doDate + "' and tr_create_time='" + doTime + "' and tr_stcd='Y'"; 
     //point 3 
     DataSet dataset2 = DBOper.DBQuery("taUtil", sql); 

     if (dataset2.isEmpty()) { 
     return -2; 
     } 
     else { 
     String trNo = null; 
     HashMap map2 = dataset2.getRow(0); 
     trNo = (String) map2.get("tr_no"); 
     confirm(admin, trNo, "N"); 
     } 
    } 
    return 0; 
    } 
} 
catch (Exception e) { 
    throw e; 
} 

}

的问题是:

第3点,它 始终打印“插入”,即以前的SQL值,而不是最新分配“选择”。

有谁知道为什么会这样? 感谢

+1

重现该问题的邮政编码和每个人都可以编译它拥有JDK –

+1

不想称你为骗子,但很难相信。你能重新编译这段代码,并确保你正在运行你在这里发布的内容吗? –

+2

在'sql =“插入到”+ ...'行,以''values ...'开头的字符串没有未转义的引号。代码如何编译? – nhahtdh

回答

1

您的赋值语句语法错误:

sql = "insert into " + table1 + " values(trtype + "','" + doDate + "','" + doTime + "','N','Y')"; 

尝试将其替换为:

sql = "insert into " + table1 + " values(" +trtype + "',' " + doDate + "','" + doTime + "','N','Y')"; 

我不知道你怎么连设法编译这个.. 。

编辑:如果此语法错误确实停止编译代码并且您的IDE(假设您正在使用它)执行旧版本的无法编译的类(发生在我身上的时候使用Eclipse),我认为它最终可能会做一些完全不可预测的事情,并可能解释这种奇怪的行为。

+0

@OpDeCirkel:你可能是对的,但我不关注。我知道他遇到的问题是,它总是打印“插入”而不是新分配的值,但是该行中没有语法错误?我看不到这些代码是如何编译的,以及它是否确实没有't和旧版本被执行,它可能会根据最后的版本做几乎任何事情,对吧? –

+0

@OpDeCirkel我不同意这个答案完全解释了这种现象+1 – EJP

+0

@OpDeCirkel很明显他不是EXECUT根据这个源代码,他正在执行一个较老版本的类,正如这张海报上面提到的那样。 – EJP