2016-04-01 2 views
0

Die createQuery() -Methode möchte eine Umwandlung in ein Connection-Objekt, aber scheint, dass diese Methode auf einem SQL2O-Objekt funktionieren würde, da es im Paket ist .... Ich verwende sql2o zum Erstellen meiner Datenbankverbindung; Ich verstehe jedoch nicht, warum die Verwendung der .createQuery() -Methode in ein Connection-Objekt umgewandelt werden soll.Wie verwende ich createQuery() -Methode, um JDBC-Verbindung mit sql2o zu erstellen?

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 

    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; 

    import java.util.ArrayList; 

    import javax.servlet.ServletException; 
    import javax.servlet.annotation.WebServlet; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    import org.sql2o.Sql2o; 

    import com.google.gson.Gson; 
    import com.models.Person; 
    import com.tools.DBUtil; 
    import com.tools.DataTable; 



    /** 
    * Servlet implementation class SalesTeam 
    */ 
    @WebServlet(name = "SalesTeam_Table", urlPatterns = {     "/json/table/salesteam" }) 
    public class Table_SalesTeam extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Table_SalesTeam() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     // Creating an arraylist based on the Person model in com.models 
     ArrayList<Person> people = new ArrayList<Person>(); 
     Connection conn = null; 
     PreparedStatement pst = null; 
     ResultSet rs = null; 


     String DB_URL = "jdbc:mysql://localhost:3306/salesteam"; 
     String USER = "root"; 
     String PASS = "1234 "; 
     Sql2o sql2o = new Sql2o(DB_URL, USER, PASS); 

     String sql = 
       "SELECT empID, fName " + 
       "FROM salesteam " + 
       "WHERE empID = 1"; 


    //issue is here... 
     try (Connection con = sql2o.open()){ 
       people = con.createQuery(sql).executeAndFetch(Person.class); 

    //////////////////////// 

      //Selecting every record in sales_team table 
      //pst = conn.prepareStatement("select f_Name, l_Name, email,   contactNum from sales_team ORDER BY f_Name ASC "); 
      //rs = pst.executeQuery(); 
      while (rs.next()) { 
       //Create a person object and fill fields 
       Person p = new Person(); 
       p.setfName(rs.getString("f_Name")); 
       p.setlName(rs.getString("l_Name")); 
       p.setEmail(rs.getString("email")); 
       p.setContact(rs.getString("contactNum")); 

       //Add person to people array list 
       people.add(p); 
      } 
     } catch (SQLException e) { 

      e.printStackTrace(); 
     }finally { 
      //Must close the database objects 
      DBUtil.close(conn, pst, rs); 
     } 

     //Gson Library was added to WEB-INF/lib 
     //Creating a new gson object to hold json 
     Gson gson = new Gson(); 

     //Create a custom DataTable object that takes an ArrayList<Object> and makes an object 
     //Used to create correct datatable json formatting 
     DataTable table = new DataTable(); 
     table.setData(people); 

     //Creating string by converting people arraylist to json string with gson object 
     //Read up on gson library for json at http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/ 
     String json = gson.toJson(table); 

     //Uncomment line below and look in console for what json looks like 
     System.out.println(json); 

     //Write json string to response 
     PrintWriter out = response.getWriter(); 
     out.print(json); 
     out.flush(); 

    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse     response) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doGet(request, response); 
    } 

    } 

Antwort

2

Lesen Sie den Javadoc sorgfältig. sql2o#open() gibt eine org.sql2o.Connection zurück, die nicht von java.sql.Connection erbt. Wenn Sie das zugrunde liegende JDBC Connection-Objekt wollen, müssen Sie org.sql2o.Connection#getJdbcConnection()

nennen Es scheint sql2o hinter der Zeit ist, wie die neuere JDBC-API-Methoden enthalten (Wrapper#unwrap() und isWrapperFor()) die Verwendung von benutzerdefinierten Implementierungen von JDBC-Klassen zu vereinfachen.

+0

ich def brauchen einige Zeit dauern, auf der Javadoc zu studieren, ich danke Ihnen für das Update. – dangerouslyCoding

2

Ihr Code ist eine Mischung aus einfachem jdbc- und sql2o-Code. Wenn Sie sql2o verwenden, sollten Sie nicht manuell aus dem ResultSet lesen. Tatsächlich würde der Code eine NullPointerException auslösen, wenn er versucht, aus dem ResultSet zu lesen.

Der Grund, warum es nicht kompiliert, ist, weil Sie java.sql.Connection importiert haben, und Sql2o.open() -Methode gibt eine org.sql2o.Connection zurück. Ich denke, es wäre einfacher für Sie, wenn Sie nur jede Referenz JDBC-Klassen entfernen.

Ihre Methode sollte wie folgt aussehen (nicht vergessen, alle Einfuhren von JDBC-Klassen zu entfernen):

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String DB_URL = "jdbc:mysql://localhost:3306/salesteam"; 
     String USER = "root"; 
     String PASS = "1234 "; 
     Sql2o sql2o = new Sql2o(DB_URL, USER, PASS); 

     String sql = 
       "SELECT empID, fName " + 
       "FROM salesteam " + 
       "WHERE empID = 1"; 

     List<Person> people; 
     try (Connection con = sql2o.open()){ 
       people = con.createQuery(sql).executeAndFetch(Person.class); 
     } 

     // code to generate json here... 
    } 
+0

Macht voll und ganz Sinn, danke für die Eingabe! – dangerouslyCoding

Verwandte Themen