Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法与MariaDB和Java建立连接_Java_Mariadb - Fatal编程技术网

无法与MariaDB和Java建立连接

无法与MariaDB和Java建立连接,java,mariadb,Java,Mariadb,我试图使用java和mariadb创建web应用程序,但在尝试实现mariadb登录时遇到了问题。这是我的代码: initSql: 包道 import java.sql.Connection; import java.sql.DriverManager; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; im

我试图使用java和mariadb创建web应用程序,但在尝试实现mariadb登录时遇到了问题。这是我的代码:

initSql: 包道

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

}
}   
罗根多:

    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;      
    }   
}
我得到了记号笔: 无法从泛型servler类型对非静态方法进行静态引用 类型mistmatch无法从void连接到Connection
我有点被这个问题困住了。有人能帮我写代码吗?

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

首先,您的类名initSql应该大写第一个字母以遵循约定


其次,您应该创建InitSql的实例/对象,然后在该对象上调用init()方法,或者使init()方法成为静态的。

人们似乎忽略了代码中更广泛的问题。有一些标准可以遵循,比如资本化等,但总的来说,你有一些更大的问题

您不应该创建错误的
initSql
实例,因为它是一个
HttpServlet
,根本没有意义。当您不需要时,还可以对
连接
字段进行静态/非静态引用。首先,更改
initSql#init
以返回
连接
,虽然我通常不建议这样滥用static,但请将方法本身设置为static:

//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对此有很好的指导)。

我应该如何解决这个问题?从验证方法中删除静态,并在LoginDAO的实例中调用它class@louseDepo我把我的评论移到了我的回答上。请随意将其(或任何其他答案)标记为已接受,以解决此问题。没有公认答案的问题仍然是“开放的”,这是不希望的。问一个新问题(显然,在搜索了现有的问题/答案之后),如果剩余的问题与该问题相关,您可以在这里使用MySQL驱动程序,而不是MariaDB连接的MariaDB驱动程序,通常MySQL的驱动程序保持得更理智。