2012-06-13 98 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