KendoUI для JSP - Как подключиться к MySQL - PullRequest
2 голосов
/ 10 июля 2020

ребята, я относительно новичок в KendoUI, и теперь я учусь на их примерах заполнять Kendo Grid данными из базы данных. Однако их пример - с SQLite, и я хочу попробовать его с MySQL. Вот что я сделал до сих пор:
Клиенты. java

@WebServlet(description = "A servlet to return data about employees from the database", urlPatterns = {"/src.api/clients"})
public class Clients extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private ClientRepository _repository = null;
    private Gson _gson = null;

    public Clients() {
        super();
    
        _gson = new Gson();
    }

    public void init() throws ServletException {
        super.init();
    }

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

            // get the clients from the database
            _repository = new ProductsRepository(this.getServletContext().getRealPath("data/sample.db"));
            // set the content type we are sending back as JSON
            response.setContentType("application/json");

            // convert the list to json and write it to the response
            response.getWriter().print(_gson.toJson(clients));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

ClientsRepository. java

public class ClientRepository {
    
    public ClientRepository() { }

    public ClientRepository(String path) {
        
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/clients_table?" +
                                   "user=*****&password=******");

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }

    }

    public List<Client> listClients() {         
        List<Client> clients = new ArrayList<Client>();

        try {
            
            PreparedStatement stmt = null;
            
            String query = "SELECT c.id, c.first_name, c.second_name, c.family_name, "
                    + "c.city_born, c.age "
                    + "From clients_db.clients_table c ";               
            
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                
                Client client = new Client();
                
                client.setClientID("setClientID");
                client.setFirstName("setFirstName");
                client.setSecondName("setSecondName");
                client.setLastName("setLastName");
                client.setCityBorn("setCityBorn");
                client.setAge("setAge");
                
                clients.add(client);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // return the result list        
        return clients;
    }
}

DataSourceResult. java

public class DataSourceResult {

    private int Total;
    private List<?> Data;
    public int getTotal() {
        return Total;
    }
    public void setTotal(int total) {
        Total = total;
    }
    public List<?> getData() {
        return Data;
    }
    public void setData(List<?> data) {
        Data = data;
    }       
}

Они используют этот _repository и получают данные из локального файла .db. Как я могу реорганизовать их решение, чтобы использовать MySQL, а не локальный файл .db?

1 Ответ

1 голос
/ 10 июля 2020

В вашем doGet вам нужно создать новый объект класса ClientRepository, а затем вызвать listClients(), чтобы получить список пользователей из базы данных, а затем вернуть ответ на ajax. Некоторые изменения, которые вам нужно внести в вашем сервлете:

 ClientRepository  _repository = new ClientRepository();//create object
 List<Client> clients = _repository.listClients();//call method
 response.setContentType("application/json");
// convert the list to json and write it to the response
 response.getWriter().print(_gson.toJson(clients));

Затем в ClientRepository внесите следующие изменения:

//to get connection
    public static Connection getConnection() {

     try {
      Class.forName("com.mysql.cj.jdbc.Driver");

      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/clients_table?" +
       "user=*****&password=******");

     } catch (ClassNotFoundException | SQLException e) {
      e.printStackTrace();
     }
     return conn; //return connection object
    }
    public List <Client> listClients() {
     List <Client> clients = new ArrayList <Client> ();

     try {
      //get connection
      Connection connection = getConnection();
      PreparedStatement stmt = null;

      String query = "SELECT c.id, c.first_name, c.second_name, c.family_name, " +
       "c.city_born, c.age " +
       "From clients_db.clients_table c ";
      stmt = connection.prepareStatement(query);
      ResultSet rs = stmt.executeQuery();

      while (rs.next()) {

       //adding code .. here
            client.setClientID(rs.getInt("id"));
            client.setFirstName(rs.getString("first_name"));
       //and so on..
           
      }
     } catch (SQLException e) {
      e.printStackTrace();
     }

     // return the result list        
     return clients;
    }  
...