如何通过Java获取MySQL表中一列的不同值的ID?

如何通过Java获取MySQL表中一列的不同值的ID?,java,mysql,Java,Mysql,我在MySQL表中有一个“time”列,它被声明为String列。时间值类似于:“2017-07-02 00:00:05”。我创建了一个Jframe,JComboBox可以在其中选择时间: public static String StartTime; public static String EndTime; public TimeChooser() { initComponents(); Statement st = nu

我在MySQL表中有一个“time”列,它被声明为String列。时间值类似于:“2017-07-02 00:00:05”。我创建了一个Jframe,JComboBox可以在其中选择时间:

    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语句的java代码:

NewJFrame_DB jframe = new NewJFrame_DB();
        jframe.STime = StartTime;
        jframe.ETime = EndTime;
在select语句中使用这些字符串时:

PreparedStatement statement= con.prepareStatement("SELECT * FROM ceiloTable WHERE time BETWEEN " + STime + " AND " + ETime);
运行代码后,我出现以下错误:

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 '00:00:05 AND 2017-07-02 00:01:57' at line 1

似乎我不能使用这些字符串,因为它们包含空格和冒号。由于这个问题,我想使用ID作为StartTime和EndTime的主键,但我不知道如何获取他们的ID?有人能告诉我如何获得开始时间和结束时间的ID吗?感谢您提前回复

如果数据库中的
time
字段是
string(varchar)
而不是
datetime
,则使用BEVERY子句将进行字典式比较,而不是按时间顺序,可能会导致不准确或不正确的结果,具体取决于
datetime
格式。建议使用以下功能:

PreparedStatement statement= con.prepareStatement("SELECT * FROM ceiloTable WHERE STR_TO_DATE(time,'%m/%d/%Y %r') BETWEEN STR_TO_DATE(?,'%m/%d/%Y %r') AND STR_TO_DATE(?,'%m/%d/%Y %r')");
statement.setString(1,STime);
statement.setString(2,ETime);
statement.executeQuery();

考虑使用<代码> <代码>来逃避日期,更好的是,考虑使用<代码> <代码>占位符系统,从<代码> PraseRealds</C> >使用<代码> StScist方法。e、 g:
“从CeilTable中选择*时间介于?和之间?”
语句。设置字符串(1,时间)
语句。设置字符串(2,时间)
感谢您的帮助!它适用于
STR\u-TO\u-DATE(时间,'%Y/%m/%d%H:%i:%s')
STR\u-TO\u-DATE(?,'%Y/%m/%d%H:%i:%s')