Passing date from HTML form to servlet to SQL database

Hi guys, I was having a problem getting the entered date (yyyyMMdd) from an HTML form into a sql database through a servlet. The date from the form is passed to the servlet as a string, but then I somehow need to convert it to a date for storage in the database.

I tried several methods, date formatter, etc. A possible way to do this is to convert it to long and then format it, but this seems like a small hurdle.

Any thoughts would be appreciated.

Well, that includes form code and servlet. I left the buisness object out.

The form.....

<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> 

Servlet .... (Sorry, tried using the samle program, but for some reason he did not like it.)

  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>"); } } 

Sorry for the extended dribbling, but in the context of maybee this makes more sense.

+4
source share
4 answers
  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(); 

A few hours later, and it works ... Thanks

+1
source

To convert String to java.util.Date , use SimpleDateFormat , as Gursel replied.

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

To convert java.util.Date to java.sql.Date , just use its constructor.

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

Casting will not work because SimpleDateFormat does not return an instance of java.sql.Date .

+11
source

You can use SimpleDateFormat.

 SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); Date date = formatter.format("20110322"); 
+2
source
 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(); 
-1
source

Source: https://habr.com/ru/post/1344794/


All Articles