用于检查查询的MySQL查询在JDBC中不起作用

用于检查查询的MySQL查询在JDBC中不起作用,mysql,jdbc,Mysql,Jdbc,我对JDBC的查询有一个问题checkdata是查询,它不工作 String checkData=“从库存中选择*,其中pdesc=“+pdesc+”和bid=“+bid+”和数量>0”; ResultSet rs=语句.executeQuery(检查数据); 国际单项体育联合会(国际单项体育联合会){ String purchaseData=“插入采购(puid、cid、bid、pdesc、pwhen)值(“+(puidCount+1)+”、“+cid+”、“+bid+”、“+pdesc+”、

我对JDBC的查询有一个问题
checkdata
是查询,它不工作

String checkData=“从库存中选择*,其中pdesc=“+pdesc+”和bid=“+bid+”和数量>0”;
ResultSet rs=语句.executeQuery(检查数据);
国际单项体育联合会(国际单项体育联合会){
String purchaseData=“插入采购(puid、cid、bid、pdesc、pwhen)值(“+(puidCount+1)+”、“+cid+”、“+bid+”、“+pdesc+”、“+pwhen+”)”);
insertQueryPurchases(语句、purchaseData);
}
但它在MySQL中工作

select *
from stock
where pdesc='FoodHorse brand olive oil 1L' and bid=1 and quantity>0;
这是桌子

CREATE TABLE stock
( 
    bid             int             NOT NULL,
    pdesc           varchar(500)    NOT NULL,
    quantity        int             NOT NULL,
    PRIMARY KEY (bid, pdesc)
);
    

正如@Barbaros Ozhan提到的,建议使用PreparedStatement来避免JDBC中的参数问题。要知道确切的问题,请分享您的错误堆栈

这里是您案例的准备声明的参考代码

String checkdata = "SELECT * FROM jpa_jbd.stock where pdesc=? and bid=? and quantity > ?";
   PreparedStatement ps = conn.prepareStatement(SELECT_SQL);
   ps.setString(1, pdesc);
   ps.setInt(2, bid);
   ps.setInt(3, quantity);
                
   ResultSet rs = ps.executeQuery();
                
   if(isStockEmpty(rs)) {
        String purchaseData = "INSERT INTO purchases(puid, cid, bid, pdesc, pwhen) VLAUES (?,?,?,?,?)";
        insertQueryPurchases(psforinserQuery, purchaseData);
    } 

首先,通过检查PreparedStatements来消除针对注入漏洞的字符串关联。谢谢,我正在搜索这些术语。我们没有在课堂上学习它们。没有引用pdesc将pdesc=“+pdesc+”更改为pdesc=”“+pdesc+””。此参数是字符串,必须引用。您也在MySQL示例中使用了它,非常感谢。很抱歉,我不知道错误堆栈是什么,但解决方案解决了问题。再次感谢你。