用于检查查询的MySQL查询在JDBC中不起作用
我对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+”、
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示例中使用了它,非常感谢。很抱歉,我不知道错误堆栈是什么,但解决方案解决了问题。再次感谢你。