Java setString() 找不到了?
Java setString() can not find the?
我对编程还很陌生,但我正在为后台应用程序制作屏幕。此应用程序的目标是您可以 select 车站名称,当您按下检查状态时,将显示该车站储物柜的所有状态。但我遇到的问题是 setString 出于某种奇怪的原因无法正常工作。我已经尝试了几乎所有的方法,我也问过很多人是否能找到问题,即使是那些以 java 为工作的人,但他们也找不到。
我在这里唯一能看到的是?未被识别。
我首先尝试将 Amersfoort 直接输入 sql 代码并且成功了。
经过一些测试后,我尝试使用没有连接的普通查询,但没有成功。
之后,我试图在我的其余代码中找出可能的错误,但我找不到任何错误。
所以我的问题是我做错了什么?
(小免责声明我尝试了比这更多但我认为这是无关紧要的)
关于输出屏幕的一些解释:
Akkrum 是我在测试期间 selecting 但无关紧要,因为目前我没有使用它。
代码:
public void fetch() {
try {
databaseConnection();
String select = stationSelect.getSelectedItem().toString();
System.out.println(select);
String sql = "SELECT l.id, s.station_id, locker_number, locker_code, occupied FROM lockers l JOIN stations s ON l.station_id = s.id WHERE name = ?";
System.out.println(1+ ": "+ sql);
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "Amersfoort");
System.out.println(2+ ": " + sql);
resultSet = pstmt.executeQuery(sql);
System.out.println(3 + ": " + sql);
Table.setModel(DbUtils.resultSetToTableModel(resultSet));
} catch (Exception e) {
System.out.println(e);
JOptionPane.showMessageDialog(null, e);
}
}
输出:
阿克鲁姆
SELECT l.id, s.station_id, locker_number, locker_code, 已占用 FROM 储物柜 l JOIN 站 s ON l.station_id = s.id WHERE name = ?
SELECT l.id, s.station_id, locker_number, locker_code, 已占用 FROM 储物柜 l JOIN 站 s ON l.station_id = s.id WHERE name = ?
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '?' at line
1
resultSet = pstmt.executeQuery(sql);
错误就在那里。 executeQuery(String)
获取原始 SQL 查询并执行它。相反,你想执行准备好的查询,所以你只需要调用:
resultSet = pstmt.executeQuery();
我对编程还很陌生,但我正在为后台应用程序制作屏幕。此应用程序的目标是您可以 select 车站名称,当您按下检查状态时,将显示该车站储物柜的所有状态。但我遇到的问题是 setString 出于某种奇怪的原因无法正常工作。我已经尝试了几乎所有的方法,我也问过很多人是否能找到问题,即使是那些以 java 为工作的人,但他们也找不到。
我在这里唯一能看到的是?未被识别。
我首先尝试将 Amersfoort 直接输入 sql 代码并且成功了。
经过一些测试后,我尝试使用没有连接的普通查询,但没有成功。
之后,我试图在我的其余代码中找出可能的错误,但我找不到任何错误。
所以我的问题是我做错了什么?
(小免责声明我尝试了比这更多但我认为这是无关紧要的)
关于输出屏幕的一些解释:
Akkrum 是我在测试期间 selecting 但无关紧要,因为目前我没有使用它。
代码:
public void fetch() {
try {
databaseConnection();
String select = stationSelect.getSelectedItem().toString();
System.out.println(select);
String sql = "SELECT l.id, s.station_id, locker_number, locker_code, occupied FROM lockers l JOIN stations s ON l.station_id = s.id WHERE name = ?";
System.out.println(1+ ": "+ sql);
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "Amersfoort");
System.out.println(2+ ": " + sql);
resultSet = pstmt.executeQuery(sql);
System.out.println(3 + ": " + sql);
Table.setModel(DbUtils.resultSetToTableModel(resultSet));
} catch (Exception e) {
System.out.println(e);
JOptionPane.showMessageDialog(null, e);
}
}
输出:
阿克鲁姆
SELECT l.id, s.station_id, locker_number, locker_code, 已占用 FROM 储物柜 l JOIN 站 s ON l.station_id = s.id WHERE name = ?
SELECT l.id, s.station_id, locker_number, locker_code, 已占用 FROM 储物柜 l JOIN 站 s ON l.station_id = s.id WHERE name = ?
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '?' at line 1
resultSet = pstmt.executeQuery(sql);
错误就在那里。 executeQuery(String)
获取原始 SQL 查询并执行它。相反,你想执行准备好的查询,所以你只需要调用:
resultSet = pstmt.executeQuery();