Передача даты из формы HTML в сервлет в базу данных SQL - PullRequest
4 голосов
/ 22 марта 2011

Привет, ребята. У меня проблема с получением введенной даты (yyyyMMdd) из HTML-формы в базу данных sql через сервлет.Дата из формы передается сервлету в виде строки, но затем каким-то образом мне нужно преобразовать ее в дату для хранения в базе данных.

Я пробовал несколько методов, форматировщик даты и т. Д. Возможный способ сделать это - преобразовать его в long и затем отформатировать, однако это выглядит как небольшая ошибка.

Любые мысли будут оценены.

Хорошо, это включает в себя код формы и сервлета.Я оставил объект бизнеса.

Форма .....

<html>
<head>
<title>Inputing Episode Into Sons Of Anarchy Database</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<h1>Add Sons Of Anarchy Episode to Database</h1>
<form name="sonsOfAnarchyForm" method="get" action="EnterpriseCWEverything\src\coursework\Servlet2.java">
  <p>Season Number: 
    <input name="seasonNumber" type="text" id="seasonNumber">
  </p>
  <p>Season Episode Number: 
    <input name="seasonEpisodeNumber" type="text" id="seasonEpisodeNumber">
  </p>
  <p>Series Episode Number: 
    <input name="seriesEpisodeNumber" type="text" id="seriesEpisodeNumber">
  </p>
    <p>Episode Title: 
    <input name="title" type="text" id="title">
  </p>
    <p>Written By: 
    <input name="writtenBy" type="text" id="writtenBy">
  </p>
    <p>DirectedBy: 
    <input name="directedBy" type="text" id="directedBy">
  </p>
    <p>Original Air Date (YYYY-MM-DD): 
    <input name="origionalAirDate" type="text" id="origionalAirDate">
  </p>
    <p>Viewing Figures US (Millions): 
    <input name="viewingFigures" type="text" id="viewingFigures">
  </p>  
  <p>
    <input name="addEpisode" type="submit" value="Add Episode">
  </p>
</form>
</body>
</html>

Сервлет .... (Извините, попытался использовать средство кода samle, но по какой-то причине это былоне люблю его.)

    package coursework;

import javax.servlet.*;
import java.util.Date;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

public class Servlet2 extends HttpServlet
{

    public void doGet (HttpServletRequest rq, HttpServletResponse rp) throws ServletException, IOException
    {
        rp.setContentType("text/html");
        PrintWriter out = rp.getWriter();
        out.println("<HTML>");
        out.println("<HEAD><TITLE> Insert - Test </TITLE></HEAD>");
        out.println("<BODY>");
        try 
        {
            ArrayList<Episode> episodes;
            episodes = new ArrayList<Episode>();
            String url = "jdbc:mysql://localhost:3306/sons_of_anarchy";
            String driver = "com.mysql.jdbc.Driver";
            Class.forName(driver);          
            Connection connection = DriverManager.getConnection(url,"root","password");

            // Convert string to date
            //String temp1;
            //long temp;
            //temp = Long.parseLong(rq.getParameter("origionalAirDate"));
            //temp1 = rq.getParameter("origionalAirDate");

            //Problem Code................................................
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
            Date date = formatter.parse(rq.getParameter("origionalAirDate"));

            //SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
            //Date date = formatter.format(rq.getParameter("origionalAirDate"));



            // Set the new instance of the episode row
            Episode temp;
            episodes.add(temp = new Episode(Integer.parseInt(rq.getParameter("seasonNumber")), Integer.parseInt(rq.getParameter("seasonEpisodeNumber")), Integer.parseInt(rq.getParameter("seriesEpisodeNumber")), rq.getParameter("title"), rq.getParameter("directedBy"), rq.getParameter("writtenBy"), date , Float.parseFloat(rq.getParameter("viewingFigures"))));
            PreparedStatement editStatement = connection.prepareStatement("INSERT into episode_guide");
            // Put in database
            editStatement.setInt(1, temp.getSeasonNumber());
            editStatement.setInt(2, temp.getSeasonEpisodeNumber());
            editStatement.setInt(3, temp.getSeriesEpisodeNumber());
            editStatement.setString(4, temp.getTitle());            
            editStatement.setString(5, temp.getDirectedBy());
            editStatement.setString(6, temp.getWrittenBy());
            editStatement.setDate(7, (java.sql.Date) temp.getOrigionalAirDate());
            editStatement.setFloat(8, temp.getViewingFigures());

            editStatement.executeUpdate();
            editStatement.close();
            connection.close();

            // Print out new entry
            int i = 0;
            while(i < episodes.size()){
            out.print(episodes.get(i).getSeasonNumber()+
                    "\t"+ episodes.get(i).getSeasonEpisodeNumber()+
                    "\t"+ episodes.get(i).getSeriesEpisodeNumber() +
                    "\t"+ episodes.get(i).getTitle()+
                    "\t"+ episodes.get(i).getDirectedBy()+
                    "\t"+ episodes.get(i).getWrittenBy()+
                    "\t"+ episodes.get(i).getOrigionalAirDate()+
                    "\t"+ episodes.get(i).getViewingFigures());

            out.print("<br>");
            i++;
            }
        } 
        catch (Exception e) 
        {
            out.println("Error" + e);
        }
        out.println("<H3> Basic Insert Servlet </H3>");
        out.println("Result...");
        out.println("</BODY></HTML>");
    }
}

Извините за расширенный дриблинг, но в контексте, возможно, это имеет больше смысла.

Ответы [ 4 ]

12 голосов
/ 22 марта 2011

Чтобы преобразовать String в java.util.Date, используйте SimpleDateFormat, как ответил Gursel.

String string = "2011-03-22";
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(string);

Чтобы преобразовать java.util.Date в java.sql.Date, просто используйте его конструктор.

preparedStatement.setDate(index, new java.sql.Date(date.getTime()));

Приведение не будет работать, поскольку SimpleDateFormat не возвращает экземпляр java.sql.Date.

2 голосов
/ 22 марта 2011

Вы можете использовать SimpleDateFormat.

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
Date date = formatter.format("20110322");
1 голос
/ 23 марта 2011
            ArrayList<BuisnessObject> episodes;
        episodes = new ArrayList<BuisnessObject>();
        String url = "jdbc:mysql://localhost:3306/sons_of_anarchy";
        String driver = "com.mysql.jdbc.Driver";
        Class.forName(driver);          
        Connection connection = DriverManager.getConnection(url,"root","password");


        BuisnessObject newEpisode;

        // Takes the date from the form in String and converts it java.util.date which is how the buisness object is written
        java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse(rq.getParameter("origionalAirDate")); 

        // Creates an instance of the buisness object
        episodes.add(newEpisode = new BuisnessObject(Integer.parseInt(rq.getParameter("seasonNumber")), Integer.parseInt(rq.getParameter("seasonEpisodeNumber")), Integer.parseInt(rq.getParameter("seriesEpisodeNumber")), rq.getParameter("title"), rq.getParameter("directedBy"), rq.getParameter("writtenBy"), date, Float.parseFloat(rq.getParameter("viewingFigures"))));
        PreparedStatement editStatement = connection.prepareStatement("INSERT into episode_guide VALUES (null,?,?,?,?,?,?,?,?)");

        // Takes date from java.util.date and converts it to java.sql.date
        java.sql.Date mySqlDate = new java.sql.Date(newEpisode.origionalAirDate.getTime());


        editStatement.setInt(1, newEpisode.getSeasonNumber());
        editStatement.setInt(2, newEpisode.getSeasonEpisodeNumber());
        editStatement.setInt(3, newEpisode.getSeriesEpisodeNumber());
        editStatement.setString(4, newEpisode.getTitle());          
        editStatement.setString(5, newEpisode.getDirectedBy());
        editStatement.setString(6, newEpisode.getWrittenBy());
        editStatement.setDate(7, mySqlDate);
        editStatement.setFloat(8, (float) newEpisode.getViewingFigures());

        editStatement.executeUpdate();
        editStatement.close();
        connection.close();

Несколько часов спустя, и это работает ... Спасибо

0 голосов
/ 08 ноября 2016
java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("date"));
System.out.println(date);

java.sql.Date sqlDate = new java.sql.Date(date.getTime());

PreparedStatement st = con  .prepareStatement("insert into emp values(?,?)");

st.setString(2, "AAAAAAA");
st.setDate(1, sqlDate);
st.execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...