java
  • sql
  • oracle
  • jdbc
  • sql-update
  • 2016-04-03 52 views 2 likes 
    2

    我建立8個表的數據庫,我使用Java框架構建將執行以下功能的UI SQL表:嘗試更新使用Java

    插入,刪除,更新,搜索和選擇。

    除更新外,所有功能都可以正常工作。以下是更新的代碼:

    stmt_update = conn_update.createStatement(); 
        stmt_update.executeUpdate("UPDATE Conference SET C_NAME = '" + confname + "', C_YEAR = " + yr 
           + ", START_DATE = to_timestamp('" +stdate +"','yyyy-mm-dd HH24:MI:ss.FF1'), END_DATE = to_timestamp('" +enddate +"','yyyy-mm-dd HH24:MI:ss.FF1')," 
           + "COUNTRY = '"+country_update+"', CITY = '"+city_update+"', VENUE = '"+venue_update+"'," 
           + ", CONTACT_EMAIL = '"+c_email_update+"' where conference_id = '" + confid + "'"); 
    

    表結構爲:

    (
    Conference_ID varchar(10) NOT NULL, 
    C_Name varchar(20), 
    C_Year numeric(4,0), 
    Start_Date date, 
    End_Date date, 
    Country varchar(10), 
    City varchar(10), 
    Venue varchar(10), 
    Contact_Email varchar(10), 
    PRIMARY KEY(Conference_ID) 
    ); 
    

    錯誤是:

    ORA-01747:無效user.table.column,TABLE.COLUMN,或列 規格

    我以爲有事可做與日期輸入。

    任何建議都會有很大幫助。

    感謝。

    ----- 更新 -------------- 使用準備語句

    stmt_update = conn_update.prepareStatement("UPDATE Conference SET C_NAME = '" + confname + "', C_YEAR = " + yr 
            + ", START_DATE = to_timestamp('" +stdate +"','yyyy-mm-dd HH24:MI:ss.FF1'), END_DATE = to_timestamp('" +enddate +"','yyyy-mm-dd HH24:MI:ss.FF1')," 
            + "COUNTRY = '"+country_update+"', CITY = '"+city_update+"', VENUE = '"+venue_update+"'," 
            + ", CONTACT_EMAIL = '"+c_email_update+"' where conference_id = '" + confid + "'"); 
          stmt_update.executeUpdate("UPDATE Conference SET C_NAME = '" + confname + "', C_YEAR = " + yr 
            + ", START_DATE = to_timestamp('" +stdate +"','yyyy-mm-dd HH24:MI:ss.FF1'), END_DATE = to_timestamp('" +enddate +"','yyyy-mm-dd HH24:MI:ss.FF1')," 
            + "COUNTRY = '"+country_update+"', CITY = '"+city_update+"', VENUE = '"+venue_update+"'," 
            + ", CONTACT_EMAIL = '"+c_email_update+"' where conference_id = '" + confid + "'"); 
    

    仍然得到同樣的錯誤嘗試。

    錯誤

    ORA-01747:無效user.table.column,TABLE.COLUMN,或列 說明書

    +4

    打印生成的語句,並添加這個問題的結果。您也可以開放SQL注入。更好地使用'PreparedStatement'(如果你的錯誤消失了,我也不會感到驚訝)。 –

    +0

    如果您嘗試使用準備好的語句,請將其添加到問題中。最好修復準備好的語句,而不是糟糕的,不安全的SQL語句。 – RealSkeptic

    +0

    感謝您的輸入。顯然這是一個逗號造成的問題。 – shubhs9

    回答

    1
    stmt_update = conn_update.createStatement(); 
        stmt_update.executeUpdate("UPDATE Conference SET C_NAME = '" + confname + "', C_YEAR = " + yr 
           + ", START_DATE = to_timestamp('" +stdate +"','yyyy-mm-dd HH24:MI:ss.FF1'), END_DATE = to_timestamp('" +enddate +"','yyyy-mm-dd HH24:MI:ss.FF1')," 
           + "COUNTRY = '"+country_update+"', CITY = '"+city_update+"', VENUE = '"+venue_update+"'," 
           + ", CONTACT_EMAIL = '"+c_email_update+"' where conference_id = '" + confid + "'"); 
            __ Here one extra comma is exist. 
    

    這兩個逗號導致錯誤。

    所以,你的代碼應該是:

    stmt_update = conn_update.createStatement(); 
        stmt_update.executeUpdate("UPDATE Conference SET C_NAME = '" + confname + "', C_YEAR = " + yr + ", " 
           + "START_DATE = to_timestamp('" + stdate + "','yyyy-mm-dd HH24:MI:ss.FF1'), END_DATE = to_timestamp('" + enddate + "','yyyy-mm-dd HH24:MI:ss.FF1'), " 
           + "COUNTRY = '" + country_update + "', CITY = '"+city_update+"', VENUE = '"+ venue_update + "', " 
           + "CONTACT_EMAIL = '" + c_email_update + "' WHERE conference_id = '" + confid + "'"); 
    
    +0

    代碼工作得很好。萬分感謝。傻我。應該檢查逗號。 – shubhs9

    +0

    @ shubhs9:有些時候小錯別字殺我們的時間,需要一些人的觀點可以解決這個問題。很高興幫助你。乾杯。 – Arulkumar

    0

    這多大用處的:

    java.sql.PreparedStatement stm=your_conn_variable.prepareStatement("UPDATE table_name set field_name=?,seconde_field=? "); 
    // 
    stm.setString(1,your_value); 
    stm.setString(2,your_seconde_value); 
    stm.executeUpdate(); 
    //will not have to write all this lines and forget all ' , ; 
    

    這裏就像你的情況的一個例子:

    stmt_update = conn_update..prepareStatement("UPDATE Conference SET C_NAME = ?") 
    stmt_update.setString(1,confname); 
    stmt_update.executeUpdate(); 
    
    相關問題