我正在做一个小小的Minecraft插件。我试图将数据插入到数据库与我的DatabaseManager
类,但由于某种原因,它不工作。无错误提示,密码和用户名正确。此外,我试图手动插入sql代码到数据库中,它的工作原理,所以没有sql语法错误。对我来说,由于某种原因,语句似乎没有执行,但我找不到失败。下面是我的类的代码:
import java.sql.*;
public class DatabaseManager {
Connection conn = null;
Statement stmt = null ;
ResultSet result = null;
String user = "root" ;
String pass = "";
public ResultSet executeQuery(String query) throws SQLException{
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/metrocraft",user,pass);
stmt = conn.createStatement();
result = stmt.executeQuery(query);
}catch (Exception ex){
ex.printStackTrace();
}finally{
if(result != null)
result.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}
return result ;
}
//Metrocraft relevant code
public void addZone(double p1X , double p1Y,double p2X,double p2Y) throws SQLException{
String sql = "INSERT INTO `zones`( `p1X`, `p1Y`,`p2X`, `p2Y`) VALUES (" + p1X + ","+ p1Y+","+p2X+","+p2Y+"); ";
System.out.print(sql);
executeQuery(sql);
}
}
您正在冒着通过SQL注入进行恶意攻击的风险。切换到预处理语句。顺便说一句,使用executeUpdate
进行数据库写操作
PreparedStatement stmt = conn.prepareStatement(query);
result = stmt.executeUpdate();
在建立数据库连接之前,您没有在程序中加载驱动器。因此,使用以下命令
加载驱动器Class.forName("com.mysql.jdbc.Driver")
你必须像下面提到的那样更新你的try catch块
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/metrocraft",user,pass);
stmt = conn.createStatement();
result = stmt.executeQuery(query);
} catch (Exception ex) {
ex.printStackTrace();
}