java
  • sql
  • oracle
  • jdbc
  • sql-update
  • 2016-04-03 50 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(); 
    
    相关问题