2015-12-11 12 views
13
public java.util.List<Tag> getAlltagsByDate(String date){ 

    DataSource dataSource = new DataSource(); 
    Connection conn = dataSource.createConnection(); 
    ResultSet resultSet = null; 
    PreparedStatement stmt = null; 
    Tag tags_Data = new Tag(); 
    String query = "select * from tag_data where tag_data_date = ?"; 
    try { 
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
     Date nn =df.parse(date); 
     stmt = conn.prepareStatement(query); 
     stmt.setDate(1, java.sql.Date.valueOf(date)); 
     resultSet = stmt.executeQuery(query); 

Ich erhalte einen Fehler Tomcat ErrorAbfrage MySQL DB preparedStatement.setDate mit

Kann mir jemand dabei helfen, Ich brauche mySQL db wo date = Eingang in html

enter image description here

abfragen
+0

Es scheint, dass Sie eine MySQL-Syntaxfehler Ausnahme haben. Überprüfen Sie, ob die Fehlermeldung die tatsächlich ausgeführte SQL-Abfrage nicht ausgibt. – xaviert

+0

Ich verwende Simple Date-Datentyp in mysql –

+0

Hi xaviert, direkte Abfrage, wenn in mysql funktioniert: wählen * von Tag_Data wo Tag_Data_Date = '2015-12-11'; –

Antwort

4

Nein, überspringen Sie den Date Teil; Benutze einfach den String. Lassen Sie uns den Wert von (String date) sehen.

MySQL freut sich, wenn Sie mit ... tag_data_date = '2015-12-11' enden können.

Wenn String date wie "2015-12-11" aussieht, ist die Konvertierung in Date nicht erforderlich.

+0

Ich werde versuchen, auf diese Weise ... –

+0

Hallo Rick, sehr einfache Lösung wie Sie vorgeschlagen, –

1

Ich habe eine Lösung vorgestellt. Wie Sie nicht viel über Ihre DB-Struktur erwähnt haben, so,

Test als Datenbanknamen berücksichtigen und die aus Tabelle tag_data mit zwei Spalten-ID und tag_data_date wie unten gezeigt.

CREATE TABLE `tag_data` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `tag_data_date` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Sehen Sie sich auch Daten in der Tabelle als

INSERT INTO `tag_data` (`id`, `tag_data_date`) VALUES 
(1, '2015-12-20 00:00:00'); 

Und Ihre Java-Klasse wie unten

public class JDBCPreparedStatementExample { 

private static final String DB_DRIVER = "com.mysql.jdbc.Driver"; //mysql driver class 
private static final String DB_CONNECTION = "jdbc:mysql://localhost:3306/test"; //connectionstring 
private static final String DB_USER = "root"; //mysql username 
private static final String DB_PASSWORD = "root"; //mysql password 

public static void main(String[] argv) throws ParseException { 

    try { 

     getDateForDate("2015-12-20"); //time passed as arguement 

    } catch (SQLException e) { 

     System.out.println(e.getMessage()); 

    } 

} 
//Method to interact with DB and print data,this can be changed to return value of List<Key> as per your requirement 
private static void getDateForDate(String date) throws SQLException, ParseException { 

    Connection dbConnection = null; 
    PreparedStatement preparedStatement = null; 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
    java.util.Date dateCal =df.parse(date); // parse date in String to Date Object 
    String updateTableSQL = "select * from tag_data where tag_data_date = ?"; 

    try { 
//get DB connection 
     dbConnection = getDBConnection(); 
// Create preapared statement   
preparedStatement = dbConnection.prepareStatement(updateTableSQL); 

     preparedStatement.setDate(1, new Date(dateCal.getTime()));//convert java.util.Date to java.sql.Date 

     // execute update SQL stetement 
     ResultSet resultSet = preparedStatement.executeQuery(); 
     while (resultSet.next()) { 
       // It is possible to get the columns via name 
       // also possible to get the columns via the column number 
       // which starts at 1 
       // e.g. resultSet.getString(2); 
       int id = resultSet.getInt("id"); 
       Date tag_data_date = resultSet.getDate("tag_data_date"); 
       System.out.println("Date: " + tag_data_date); 
       System.out.println("Comment: " + id); 
      } 

    } catch (SQLException e) { 

     System.out.println(e.getMessage()); 

    } finally { 

     if (preparedStatement != null) { 
      preparedStatement.close(); 
     } 

     if (dbConnection != null) { 
      dbConnection.close(); 
     } 

    } 

} 

private static Connection getDBConnection() { 

    Connection dbConnection = null; 

    try { 

     Class.forName(DB_DRIVER); 

    } catch (ClassNotFoundException e) { 

     System.out.println(e.getMessage()); 

    } 

    try { 

     dbConnection = DriverManager.getConnection(
         DB_CONNECTION, DB_USER,DB_PASSWORD); 
     return dbConnection; 

    } catch (SQLException e) { 

     System.out.println(e.getMessage()); 

    } 

    return dbConnection; 

} 

} 
+0

, Vielen Dank für Lösung, ich bin einfach mit String für Datum, und es funktioniert jetzt gut –

+0

IN DB speichern Sie Datum als String oder als DATETIME Datentyp? – Naruto

+0

In der Datenbank speichere ich im DATETIME Format, und ich generiere aktuelle Zeit von Java.Util Jetzt verwende ich einfache Zeichenfolgen in db zu suchen. und es funktioniert –