“字段列表”中的未知列“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”
SailsJS/MySQL:“字段列表”中的未知列“NaN”
OperationalError:(1054,“'字段列表'中的未知列'example.example_field'”)