无法与MariaDB和Java建立连接
我试图使用java和mariadb创建web应用程序,但在尝试实现mariadb登录时遇到了问题。这是我的代码: initSql: 包道无法与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
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的驱动程序保持得更理智。