2016-04-01 16 views
0

createQuery()メソッドは、Connectionオブジェクトへのキャストを必要としていますが、このメソッドはパッケージ内にあるのでSQL2oオブジェクトに対して機能します。 データベース接続を作成するのにsql2oを使用しています。しかし、.createQuery()メソッドの使用がConnectionオブジェクトにキャストされたがっている理由を理解できません。sql2oを使用してcreateQuery()メソッドを使用してJDBC接続を作成するにはどうすればよいですか?

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

    } 

答えて

2

Javadocをよく読んでください。 sql2o#open()org.sql2o.Connectionを返します。これはjava.sql.Connectionから継承されません。あなたはorg.sql2o.Connection#getJdbcConnection()

を呼び出す必要があり、基礎となるJDBC Connectionオブジェクトを使用する場合は、より最近のJDBC APIは、JDBCクラスのカスタム実装の使用を簡素化する方法(Wrapper#unwrap()isWrapperFor())を含んように、sql2oは時代遅れで表示されます。

+0

を更新していただきありがとうございます。 – dangerouslyCoding

2

コードには、プレーンなjdbcとsql2oコードが混在しています。 sql2oを使用する場合、ResultSetから手動で読み取るべきではありません。実際には、ResultSetから読み込もうとするとNullPointerExceptionがスローされます。

java.sql.Connectionをインポートしたため、Sql2o.open()メソッドがorg.sql2o.Connectionを返すため、コンパイルされない理由があります。すべての参照JDBCクラスを削除すれば、より簡単になると思います。

あなたの方法は、この(JDBCクラスのすべての輸入を削除することを忘れないでください)のようなものになります。私はDEFのJavadocにアップ勉強するいくつかの時間を取る必要があり

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

完全な意味があります、入力いただきありがとうございます! – dangerouslyCoding

関連する問題