【问题标题】:Unexpected SQL select exception意外的 SQL 选择异常
【发布时间】:2013-04-28 02:24:53
【问题描述】:

实际上我是 java 和 SQL 的新手,所以也许这是一个愚蠢的问题,请提前抱歉。我不习惯在一些论坛或smth上写东西。我更喜欢立即寻找答案。无论如何,现在我很无助,因为我不知道要寻找什么,所以我在任何地方都找不到它,所以我发现这种方式更好。

所以我有几个问题,我将它们分开以便更好地理解。

    if (stmt.execute(
                        "SELECT * FROM products where ID=" + removeName)) {
                    rs = stmt.getResultSet();
    if (!rs.next()) {
                       m = "ID not found.";
                        return m;
                   }

1.(谢谢 MARC B)在这段代码中,如果我在我的字段中输入一些文本(不是数字),它会抛出这个异常: SQLException: Unknown column 'blabla' in 'where clause' 即使在我的数据库的 ID 设置为字符串,并且到处都是字符串。

2.(解决了我的大脑打开了一段时间)我正在学校做我的项目,它是仓库系统,有一个收银员正在下订单。他正在将产品添加到订单列表中,然后当订单列表完成时(收银员不再添加 - 单击订单),它应该从仓库数据库中删除该产品。我想问一下(再次抱歉,我尝试用一​​些 actionListeners 或数组或其他东西来解决它,但正如我所说我不是那么熟练)是否有可能保存订单列表中的数据(Id,数量)(到一些变量或某处)以便稍后从数据库中删除它?我虽然将它保存到数组中会很好,但是每个按钮单击添加它应该增加数组的索引,但我不知道如何增加 i(可能是 actionListeners)或者可能是一些更好的方法。谢谢你的一切。

while (rs.next()) {
                String entry = rs.getString(1);
                String entry1 = rs.getString(2);
                int entry2 = rs.getInt(3);
//check if there are enough products in warehouse
                if(quantity>entry2){
                   m+="There are not enough product(s) with ID: "+entry1+"\nin the warehouse.\n";
                   return m;
                }
//add to the order list
                m += "Product name: " + entry + "\n"
                        + "ID: " + entry1 + "\n"
                            + "Quantity: " + quantity + "\n" + "\n";
            }

在 entry1 和 entry2 初始化后通过添加到 while 循环中来编辑代码:

a.add(new Product(entry1, entry2));

虽然它被声明为 ArrayList:

ArrayList<Product> a=new ArrayList<>();

类产品看起来像这样:

    public class Product {
public String name, ID;
public int quantity;

public Product(String ID, int quantity){
this.ID=ID;
this.quantity=quantity;}


public Product(String name, String ID, int quantity){
this.name=name;
this.ID=ID;
this.quantity=quantity;}

public String getID(){
      return ID;}


public int getQuantity(){
      return quantity;}


}

希望编辑会有所帮助。 也许这是一个太大的问题,也许它应该以某种方式分开,但正如我所说,我不是在使用论坛来询问,只是为了寻找每一个答案,我将不胜感激(也感谢批评我的帖子)。再次抱歉,非常感谢!

【问题讨论】:

    标签: java mysql exception select actionlistener


    【解决方案1】:

    基本 SQL:

    SELECT ...
    FROM sometable
    WHERE somefield=somevalue, otherfield='othervalue'
    

    上述查询中的somevalue 没有被引用,因此它将被解析/解释为对表中FIELD 的引用。相比之下,带有单引号 (') 的 'othervalue' 被解释为字符串。

    【讨论】:

    • 是的,但它必须被解释为对字段的引用,因为我的程序正在数据库中查找 ID 与字段中输入的值相同的产品。无论如何,谢谢你,如果我说的有误,请告诉我。
    • 所以?如果您将字符串插入到 sql 查询中并且未引用该字符串,则数据库引擎会将其解释为字段名称。 where product_type=toy 将使数据库引擎在您的表中查找名为“toy”的字段。但是如果你这样做where product_type='toy',数据库引擎会扫描表,看看表中任何记录的 product_type 字段中是否出现“toy”一词。
    • 现在我明白了,非常感谢!
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 2013-06-26
    • 2017-10-18
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多