【发布时间】:2020-03-10 17:36:11
【问题描述】:
我读过很多类似的问题,但没有适合我的解决方案。
我正在使用 jersey 为 CRUD 编写 RESTful API,因此我需要实现 SQL 语句来执行事务。但是对于每个事务,都会发生相同的错误,即程序说我的 SQL 语法错误。
我已经搜索了很多解决方案,但没有一个适合我,我没有发现我的 SQL 代码有任何问题
(其他 3 个操作包括创建、删除和更新显示熟悉的错误)
以下是我的 Java 阅读代码:
public HotelBean read(int hotelId, int roomId) {
List<RoomBean> lBean = new ArrayList<RoomBean>();
try {
Connection conn = DBFactory.connectDB().getConn();
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("SELECT T1.HOTEL_ID, HOTEL_NAME, ROOM_ID, ROOM_NAME, OCCUPANCY, VACANCY, TOTAL_ROOM FROM HPMSDB.ROOM_INFO T1 INNER JOIN HPMSDB.HOTEL_INFO T2 ON T1.HOTEL_ID=T2.HOTEL_ID" + " WHERE T2.HOTEL_ID =" + hotelId + "AND T2.ROOM_ID="+ roomId);
while (rs.next()) {
RoomBean roomBean = new RoomBean();
roomBean.setHotelId(rs.getInt(1));
roomBean.setHotelName(rs.getString(2));
roomBean.setRoomId(rs.getInt(3));
roomBean.setRoomName(rs.getString(4));
roomBean.setOccupancy(rs.getInt(5));
roomBean.setVancancy(rs.getInt(6));
roomBean.setTotalRoom(rs.getInt(7));
lBean.add(roomBean);
}
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
HotelBean hotelBean = new HotelBean();
hotelBean.setRoomBean(lBean);
return hotelBean;
}
以下是我的数据库:
CREATE DATABASE HPMSDB DEFAULT CHARACTER SET UTF8
DEFAULT COLLATE UTF8_GENERAL_CI;
DROP TABLE IF EXISTS HPMSDB.HOTEL_INFO;
CREATE TABLE HPMSDB.HOTEL_INFO (
HOTEL_ID INT NOT NULL,
HOTEL_NAME VARCHAR(64),
RESORT_MANAGE VARCHAR(64),
PRIMARY KEY(HOTEL_ID)
);
DROP TABLE IF EXISTS HPMSDB.ROOM_INFO;
CREATE TABLE HPMSDB.ROOM_INFO (
HOTEL_ID INT NOT NULL,
ROOM_ID INT NOT NULL,
ROOM_NAME VARCHAR(64) NOT NULL,
OCCUPANCY INT,
VACANCY INT,
TOTAL_ROOM INT,
PRIMARY KEY(HOTEL_ID, ROOM_ID)
);
以下是阅读的错误信息:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'T2.ROOM_ID=2' at line 1
以下是创建的错误信息:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE HOTEL_ID =2 AND ROOM_ID=1' at line 1
我真的很困惑,所有创建、更新、读取和删除都显示相同的错误。
感谢您的宝贵时间,祝您有美好的一天!
【问题讨论】:
-
你能改变 =" + hotelId + "AND To =" + hotelId + " AND 你需要在 id 和 "AND" 之间留一个间距
-
对于初学者 mysql sql server。它们是完全不同的 DBMS。但无论您使用哪个 DBMS,您的查询都存在可悲的缺陷。您正在构建一个字符串并执行它。这就是 sql 注入发生的方式,您的公司作为最新的数据泄露受害者出现在晚间新闻中。您需要使用参数化查询。
-
@ZacharyMcGee 感谢您的回复。但是我尝试了很多间距格式,它们都不适合我。
标签: java mysql sql sql-server rest