Avatar billede madseksperten Nybegynder
05. marts 2014 - 22:26 Der er 13 kommentarer og
1 løsning

AJAX kald fra Servlet fra MySQL

Hejsa.
Jeg har oprettet en tråd i javascript, men har fundet ud af det vidst omhandler mere en servlet. Jeg har efterspurgt svar om at lukke spørgsmålet.

Jeg har efterhånden fået lavet mig et kalendersystem. Kalenderen ser sådan ud

http://postimg.org/image/5uurc5ycb/

Her er meningen så at man kan vælge en "fra" dato og "til" dato. Jeg har fået mit javascript til at virke med denne kode, men der mangler nogle ting endnu:

<form>
          <input id="startDate" />
          <input id="endDate" />
    </form>

    <script>
       
    $(function(){
        $("#startDate").datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function(dateText,inst){
                alert(dateText);
               
                $.ajax({
                      url: "../getHoursSQL",
                      type: "post",
                      data: Date,
                      success: function(){
                          alert("success");
                          $("#result").html('submitted successfully');
                      },
                      error:function(){
                          alert("failure");
                          $("#result").html('there is error while submit');
                      } 
                    });
            }
        });
    });

    $(function(){
            $("#endDate").datepicker({
                dateFormat: 'yy-mm-dd',
                onSelect: function(dateText,inst){
                    alert(dateText);
                 
                    $.ajax({
                          url: "../getHoursSQL",
                          type: "post",
                          data: Date,
                          success: function(){
                              alert("success");
                              $("#result").html('submitted successfully');
                          },
                          error:function(){
                              alert("failure");
                              $("#result").html('there is error while submit');
                          } 
                        });
                }
            });
        });

</script>

Mit spørgsmål går på.  I dette AJAX tænker jeg at kalde en servlet, som returnerer værdien i en COLUMN som hedder Allday_hours. Jeg har prøvet at lave følgende servlet. Er jeg helt forkert på den? Jeg har tester min query inde i MySQL, hvor den virker fint. Håber jeg har forklaret mig tydeligt nok, ellers omformulerer jeg mig. Mvh Mads

package WorkPackage;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{

    private static final long serialVersionUID = 1L;
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
   
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }
   
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{
       
        String connectionURL = "jdbc:mysql://localhost/NekiWork";
        Connection connection=null;
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
       
        try {
           
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
           
            String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) as Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.executeUpdate("UPDATE timedata SET Allday_hours = (Day_hours + (Day_minutes / 100))");
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                out.println(ignored);
            }
        }
    }
}
Avatar billede arne_v Ekspert
06. marts 2014 - 04:05 #1
Saa vidt jeg kan se henter du data fra databasen men returnerer den ikke??

Data boer iorvrigt vaere JSON eller XML ikke HTML.
Avatar billede arne_v Ekspert
06. marts 2014 - 04:05 #2
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
 
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }
 

kan nok slettes
Avatar billede arne_v Ekspert
06. marts 2014 - 04:07 #3
hmm

String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) as Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.executeUpdate("UPDATE timedata SET Allday_hours = (Day_hours + (Day_minutes / 100))");

du laver en String med en SELECT, preparer den og saa udfoerer du en UPDATE som ikke bruger nogle form data?
Avatar billede arne_v Ekspert
06. marts 2014 - 04:07 #4
Jeg er forvirret.
Avatar billede madseksperten Nybegynder
06. marts 2014 - 12:18 #5
Det kan jeg egentligt godt forstå du er Arne. Som du ved så er jeg også det selv... Jeg har prøvet at lave om i koden. Jeg har slettet config, men lader @Override være, da jeg ellers får en fejl på denne linje. Hvordan ser det ud nu?

package WorkPackage;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{

    private static final long serialVersionUID = 1L;
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
   
   
   
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{
       
        String connectionURL = "jdbc:mysql://localhost/NekiWork";
        Connection connection=null;
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
       
        try {
           
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
           
            String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) as Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.executeUpdate(sql);
            System.out.println(sql);
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                out.println(ignored);
            }
        }
    }
}
Avatar billede arne_v Ekspert
06. marts 2014 - 17:56 #6
String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) as Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.executeUpdate(sql);
            System.out.println(sql);
            pst.close();

udfoerer stadig en SELECT uden at laese resultatet og derfor ogsaa uden at returnere noget til browser
Avatar billede madseksperten Nybegynder
06. marts 2014 - 18:33 #7
Hej Arne.

Hvordan er det jeg returenere noget i dette sammenhæng?
Avatar billede madseksperten Nybegynder
08. marts 2014 - 11:53 #8
Jeg har prøvet at lave noget mere på det Arne. Ser det bedre ud nu?

package WorkPackage;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{

    private static final long serialVersionUID = 1L;
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
   
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{
       
        String connectionURL = "jdbc:mysql://localhost/NekiWork";
        String all_day_hours = null;
        Connection connection=null;
        res.setContentType("text/html;charset=UTF-8");
        res.getWriter().write(all_day_hours);
       
        try {
           
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) AS Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
            ResultSet rs = pst.executeQuery(sql);
           
            if(rs.next()){
                all_day_hours = rs.getString("Allday_hours");
            }
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            System.out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            System.out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            System.out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                System.out.println(ignored);
            }
        }
    }
}
Avatar billede madseksperten Nybegynder
08. marts 2014 - 12:15 #9
Jeg får godt nok en faliure nu hvor jeg kalder min kalender frem:

https://www.youtube.com/watch?v=6DO1GnjDRWk&feature=youtu.be

<form>
          <input id="startDate" />
   
          <input id="endDate" />
    </form>
    <div id="result"></div>
    <script>
       
    $(function(){
        $("#startDate").datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function(dateText,inst){
                alert(dateText);
               
                $.ajax({
                      url: "../getHoursSQL",
                      type: "post",
                      data: JSON,
                      success: function(data){
                          alert("success");
                          $("#result").html(data);
                         
                      },
                      error:function(){
                          alert("failure");
                          $("#result").html('there is error while submit');
                      } 
                    });
            }
        });
    });

    $(function(){
            $("#endDate").datepicker({
                dateFormat: 'yy-mm-dd',
                onSelect: function(dateText,inst){
                    alert(dateText);
                 
                    $.ajax({
                          url: "../getHoursSQL",
                          type: "post",
                          data: JSON,
                          success: function(data){
                              alert("success");
                              $("#result").html(data);
                          },
                          error:function(){
                              alert("failure");
                              $("#result").html('there is error while submit');
                          } 
                        });
                }
            });
        });

</script>
Avatar billede madseksperten Nybegynder
08. marts 2014 - 17:56 #10
Så virker koden Arne:

package WorkPackage;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/NekiWork";
        Connection connection=null;
                                // new code
                    // new code

        try {

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) AS Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
           
            ResultSet rs = pst.executeQuery(sql);
            String all_day_hours = null;   
              if(rs.next()){                                        // new code
                all_day_hours = rs.getString("Allday_hours");  // new code
            }                                                    // new code
            pst.close();
            res.setContentType("text/html;charset=UTF-8");            // new code
            res.getWriter().write(all_day_hours);   
        }
        catch(ClassNotFoundException e){

            System.out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            System.out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            System.out.println(e);
        }
        finally {

            try {
                if (connection != null) connection.close();
            }
            catch (SQLException ignored){
                System.out.println(ignored);
            }
        }
    }
}
   

Ligger du et svar?  og tak for det
Avatar billede madseksperten Nybegynder
08. marts 2014 - 18:03 #11
Ah ok glad for tidligt. Den udskriver godt nok kun 1 COLUMN i min tabel, hvor der er arbejdet 3.45 timer. Den looper ikke igennem, så det vil jeg lige kigge på. Men lig et svar alligevel Arne
Avatar billede madseksperten Nybegynder
10. marts 2014 - 17:58 #12
Hej Arne.
Smider du et svar, hvis jeg skal lukke spørgsmålet?

mvh Mads
Avatar billede madseksperten Nybegynder
16. marts 2014 - 09:36 #13
Arne skal jeg ikke få lukket spørgsmålet.  Smider du et svar?

Mvh Mads
Avatar billede arne_v Ekspert
06. april 2014 - 21:55 #14
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester