我在MySQL表中有一个“time”列,它被声明为String列。时间值如下:' 2017-07-02 00:00:05'我创建了一个Jframe,JcomboBoxes可以选择时间:
Array.forEach()
我将这些字符串提供给使用Select语句的java代码:
public static String StartTime;
public static String EndTime;
public TimeChooser() {
initComponents();
Statement st = null;
String query = "SELECT time FROM ceiloTable";
try{
Connection con = getConnection();
st = con.createStatement();
ResultSet rs = st.executeQuery(query);
while(rs.next()){
jComboBox1.addItem(rs.getString("time"));
jComboBox2.addItem(rs.getString("time"));
}
}catch(Exception e){}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
StartTime = jComboBox1.getSelectedItem().toString();}
private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {
EndTime = jComboBox2.getSelectedItem().toString();}
当我在select语句中使用这些字符串时:
NewJFrame_DB jframe = new NewJFrame_DB();
jframe.STime = StartTime;
jframe.ETime = EndTime;
运行代码后出现以下错误:
PreparedStatement statement= con.prepareStatement("SELECT * FROM ceiloTable WHERE time BETWEEN " + STime + " AND " + ETime);
似乎我不能使用这些字符串,因为它们包含空格和冒号。由于这个问题,我想使用ID作为StartTime和EndTime的主键,但我不知道如何获取他们的ID?有人能让我知道如何获得StartTime和EndTime的ID吗?感谢您提前回复!
答案 0 :(得分:0)
如果数据库中的time
字段为string(varchar)
而非datetime
,那么使用BETWEEN子句会进行字典比对,而不是按时间顺序排列,可能会导致结果不准确或不正确,具体取决于您{ {1}}格式。建议使用STR_TO_DATE功能:
datetime