无法与MariaDB和Java建立联系

时间:2018-11-21 14:16:05

标签: java mariadb

我正在尝试使用java和mariadb创建Web应用程序,但是在尝试实现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;      
    }   
}

,我得到标记: 无法从类型通用伺服器静态引用非静态方法 类型mistmatch无法从void连接到Connection 我对此问题有些犹豫。有人可以帮我解决我的代码吗?

3 个答案:

答案 0 :(得分:2)

人们似乎忽略了代码中更广泛的问题。有一些标准可以遵循,例如大写等,但是总的来说,您还有一些更大的问题。

您不应该制作错误的initSql实例,因为它是HttpServlet,只是没有意义。当您不需要Connection字段时,也可以使用静态/非静态引用。首先,将initSql#init更改为返回Connection,虽然我通常不建议以这种方式滥用static,但请将该方法本身设为static:

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

现在,我们可以通过调用以下方法来检索Connection实例:

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为此提供了很好的指南)。

答案 1 :(得分:0)

initSql.init()不是静态的,这不是MariaDB及其与Java的连接的问题:)要解决 this 错误,您可以在上述方法中添加static 。但是:由于您的代码中存在多个错误(例如,将void方法的结果分配给变量),因此也将不起作用。

答案 2 :(得分:0)

首先,您的类名称initSql应该具有大写的首字母以遵循约定。

第二,您应该创建InitSql的实例/对象,然后在该对象上调用方法init()或将init()方法设为静态。