如何通过Java获取MySQL表中一列的不同值的ID?
我在MySQL表中有一个“time”列,它被声明为String列。时间值类似于:“2017-07-02 00:00:05”。我创建了一个Jframe,JComboBox可以在其中选择时间:如何通过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
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')
。