Не могу установить связь с MariaDB и Java - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь создать веб-приложение, используя java и mariadb, но я столкнулся с проблемой при попытке реализовать mariadb для входа в систему.Вот мой код:

initSql: пакет dao;

import java.sql.Connection;
import java.sql.DriverManager;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;


@WebServlet("/initSql")
public class initSql extends HttpServlet {
private static final long serialVersionUID = 1L;

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

/**
 * @see Servlet#init(ServletConfig)
 */
Connection conn = null;
public void init(ServletConfig config) throws ServletException {
    // TODO Auto-generated method stub
    try {
        Class.forName("org.mariadb.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mariadb://localhost:3306/baza_new", "root","root");
        System.out.println("db povezana");

    }catch(Exception e){
        //JOptionPane.showMessageDialog(null, e);
        System.out.println("db NIiiJE povezana");
        //return null;
}

}
}   

LoginDAO:

    package dao;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import dao.initSql;

    public class LoginDAO {

    static Connection con = null;

    public static boolean validate(String username, String password, String type) {

        boolean status = false;
        try {
            con = initSql.init();
            System.out.println("1");
            String query = "select * from users where username=? and password=?";
            PreparedStatement pst = con.prepareStatement(query);

            //pst.setString(1, type);
            pst.setString(1, username);
            pst.setString(2, password);

            ResultSet rs = pst.executeQuery();
            status= rs.next();
            con.close();    
        }catch(Exception e) {System.out.print(e);}

        return status;      
    }   
}

, и я получаю маркеры: Невозможно сделать статическую ссылку на нестатический метод изtype generic servler Тип mistmatch не может подключиться из void к Connection. Я немного застрял в этой проблеме. Может ли кто-нибудь помочь мне с моим кодом?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Во-первых, ваше имя класса initSql должно иметь заглавную букву, чтобы следовать соглашениям.

Во-вторых, вы должны либо создать экземпляр / объект InitSql, а затем вызвать метод init () для этого объекта, либо сделать метод init () статическим.

0 голосов
/ 21 ноября 2018

Люди, кажется, пренебрегают более масштабными проблемами в вашем коде.Существуют стандарты, которым нужно следовать, например, использование заглавных букв и т. Д., Но в целом у вас есть некоторые более серьезные проблемы.

Не следует создавать ошибочные экземпляры initSql, поскольку это HttpServlet, это просто не имеет смысла.У вас также есть статические / нестатические ссылки на поле Connection, когда вам это не нужно.Для начала измените initSql#init на значение Connection, и, хотя я обычно не рекомендую использовать статический метод таким образом, сделайте сам метод статическим:

//returns a connection, requires no class instance
public static Connection init(ServletConfig config) { ... }

Оттуда мы теперь можем получитьЭкземпляр соединения, вызвав этот метод:

Connection con = initSql.init();

В целом, вы должны иметь подходящий класс или дизайн для обработки этого, но для простого обучения это "хорошо".

Во-вторых, вы 'не совсем правильно используете ResultSet.#next определит, есть ли доступная строка, на которую можно указать в результатах SQL, и, если это так, переместит маркер на следующую строку.Вы можете использовать его, чтобы проверить, можете ли вы получить результаты:

ResultSet set = /* some sql query */;
String someField;
if (set.next()) {
    //gets the value of the column "my_field"
    someField = set.getString("my_field");
} else {
    //no results!
    someField = null;
}

В качестве альтернативы, если вы искали несколько результатов, вы можете зациклить #next

while (set.next()) {
    //just one value out of many
    String myField = set.getString("my_field");
}

В этомВ случае использования можно проверить, существует ли строка, но я бы лично проверил что-то вроде пользовательских разрешений или чего-то подобного.Если бы вы полагались на подобный код для чего-то чувствительного, вы могли бы раскрыть то, что вам не нужно.

В целом, я бы немного больше поработал над вашей логической структурой кода и, возможно, рассмотрю некоторые изосновы Java и общие стандарты кодирования (для этого у Google и Oracle есть хорошие руководства).

0 голосов
/ 21 ноября 2018

initSql.init() не является статичным, что не является проблемой MariaDB и его соединения с Java :) Чтобы исправить эту ошибку, вы можете добавить static к указанному методу.Но: поскольку в вашем коде есть несколько ошибок (например, присвоение результата методу void переменной), он также не будет работать ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...