“字段列表”中的未知列“PROGRAMMEDescription”

Posted

技术标签:

【中文标题】“字段列表”中的未知列“PROGRAMMEDescription”【英文标题】:Unknown column 'PROGRAMMEDescription' in 'field list' 【发布时间】:2020-07-08 10:06:29 【问题描述】:

我正在尝试编写一个对数据库进行查询的 servlet,但是当它运行时,我得到了这个错误:

java.sql.SQLSyntaxErrorException:

代码:

response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String requestType= request.getParameter("requestType");
if (requestType == null) 
    createDynPage(response, "Μη έγκυρος τύπος ερωτήματος");


if (requestType.equalsIgnoreCase("insert")) 
    String descr = request.getParameter("descr");
    String mins = request.getParameter("mins");
    String sms = request.getParameter("sms");
    String mb = request.getParameter("mb");
    String pagio = request.getParameter("pagio");
    String minstoall = request.getParameter("minstoall");
    String costpermin = request.getParameter("costpermin");
    String costpersms= request.getParameter("costpersms");
    String costpermb = request.getParameter("costpermb");
    int m = Integer.parseInt(mins);
    int s = Integer.parseInt(sms);
    int d = Integer.parseInt(mb);
    float fc=Float.parseFloat(pagio);
    int mta = Integer.parseInt(minstoall);
    float cpm=Float.parseFloat(costpermin);
    float cps=Float.parseFloat(costpersms);
    float cpmb=Float.parseFloat(costpermb);
    
    try 
        Connection con = datasource.getConnection();
        
        Statement stmt = con.createStatement();
        StringBuilder x = new StringBuilder();
       
        String insertStmt = "INSERT INTO CUSTOMERS (PROGRAMMEDescription, PROGRAMMESpeechTime, PROGRAMMESMSNumber, PROGRAMMEData, PROGRAMMEFixedCost, PROGRAMMESpeechTimeToAll, PROGRAMMECostPerMinute, PROGRAMMECostPerSMS, PROGRAMMECostPerMB)" +
                " VALUES (";
        insertStmt += "'" + descr + "',";
        insertStmt +=  m + ",";
        insertStmt +=  s + ",";
        insertStmt +=  d + ",";
        insertStmt +=  fc + ",";
        insertStmt +=  mta + ",";
        insertStmt +=  cpm + ",";
        insertStmt +=  cps + ",";
        insertStmt +=  cpmb + ")";
        
        stmt.executeUpdate(insertStmt);
        createDynPage(response, "Το πρόγραμμα δημιουργήθηκε επιτυχώς!");
        stmt.close();
    
        con.close();
        
     catch(SQLException sqle) 
        sqle.printStackTrace();
    
    
 else 
    createDynPage(response, "The request type parameter must be insert");

桌子:

从代码和表格都可以看出,PROGRAMMEDescription列是正常存在的。我不明白为什么Java认为它没有。有什么想法吗?

【问题讨论】:

您是否检查过您正在连接到正确的数据库并使用正确的架构? (此外,连接字符串以创建INSERT非常 不好的做法。您从根本上容易受到SQL 注入攻击和由' 等字符串引起的简单纯文本错误的攻击。我强烈建议您查看参数化查询/准备好的语句。) 另外,您的图像中没有任何内容可以显示表名。您确定表名CUSTOMERS 正确吗?由于 - 每一列都被命名为 PROGRAMME*,如果你应该插入到 PROGRAMME 表中,我不会感到惊讶...... 噢,我一直在尝试将查询插入错误的表中!我将 CUSTOMERS 更改为 PROGRAM 并且它起作用了。它就在我眼前,我没有看到。感谢您指出! 【参考方案1】:

我想可能是因为该字段不在数据库中!或许你应该得到这次执行的sql语句,在数据库中执行一次,判断该字段是否存在于数据库中!

【讨论】:

以上是关于“字段列表”中的未知列“PROGRAMMEDescription”的主要内容,如果未能解决你的问题,请参考以下文章

“字段列表”中的未知列“PROGRAMMEDescription”

1054,字段列表中的未知列“索引”

字段列表中的未知列续集

SailsJS/MySQL:“字段列表”中的未知列“NaN”

OperationalError:(1054,“'字段列表'中的未知列'example.example_field'”)

错误代码:1054。“字段列表”中的未知列