JDBC语句未执行(无错误)

时间:2016-09-29 16:06:53

标签: java jdbc

我正在使用一个小型的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);
  }
}

2 个答案:

答案 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();
}