我正在使用一个小型的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);
}
}
答案 0 :(得分:1)
你冒着SQL injection的恶意攻击风险。切换到准备好的陈述。顺便说一句,使用executeUpdate
进行数据库写操作
PreparedStatement stmt = conn.prepareStatement(query);
result = stmt.executeUpdate();
答案 1 :(得分:0)
在建立数据库连接之前,您尚未在程序中加载驱动器。请使用以下命令加载驱动器
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();
}