Java SQL准备语句&返回类型

Java SQL准备语句&返回类型,java,mysql,jdbc,statements,Java,Mysql,Jdbc,Statements,我刚刚在类文件中创建了一个方法,将数据插入sql数据库 1这些准备好的陈述是否正确? 2我需要返回一个类型的汽车的方法在哪里可以做到这一点? ..…因为我现在得到的错误是该方法必须返回类型Car Car是类文件的名称 public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword) { Car c = new Car(); try { Class.f

我刚刚在类文件中创建了一个方法,将数据插入sql数据库

1这些准备好的陈述是否正确? 2我需要返回一个类型的汽车的方法在哪里可以做到这一点? ..…因为我现在得到的错误是该方法必须返回类型Car Car是类文件的名称

public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword) {
    Car c = new Car();
    try {

        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url + dbName, userName, password);
        statement = conn.createStatement();
        String query = " insert into eflow.registration (cLicense, cJourneys, cUsername, cPassword)"
                + " values (?, ?, ?, ?)";

        PreparedStatement preparedStmt = conn.prepareStatement(query);
        preparedStmt.setString(1, aLicense);
        preparedStmt.setInt(2, aJourneys);
        preparedStmt.setString(3, aUsername);
        preparedStmt.setString(4, aPassword);

        preparedStmt.execute();

        conn.close();

    } catch (Exception e) {
        System.err.println("Got an exception!");
        System.err.println(e.getMessage());

    }
    return c;

}
调用该方法将返回一个错误,即该方法不适用于参数

//int addingID = Integer.parseInt(enteringID.getText());
                String addingReg = enteringReg.getText();
                int addingJourneys = Integer.parseInt(enteringJourneys.getText());
                String addingUsername = enteringUsername.getText();
                @SuppressWarnings("deprecation")
                String addingPassword = enteringPassword.getText();
                Car newCar = new Car(addingReg, addingJourneys, addingUsername, addingPassword);
                int addStatus = myCar.addVehicle(newCar);
                if (addStatus == 1) {
                    JOptionPane.showMessageDialog(null, "Vehicle Added");
                    enteringID.setText("(eg. 1-999)");
                    enteringReg.setText("(eg. - 162-MH-749)");
                    enteringJourneys.setText("(eg. 7)");
                    enteringUsername.setText("(eg. - username@domain.com)");
                    enteringPassword.setText("");
                }

                else {
                    JOptionPane.showMessageDialog(null, "Error, Please Try Again");
                }
            } catch (Exception f) {
                JOptionPane.showMessageDialog(null, "Error, Please Try Again");
            }
        }
    });

这不是你问题的最终答案,只是为了澄清我的评论


如果希望方法返回Car对象,则必须创建类Car的实例并返回它:

public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword) {
try {        
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection(url + dbName, userName, password);
    statement = conn.createStatement();
    String query = " insert into eflow.registration (cLicense, cJourneys, cUsername, cPassword)"
            + " values (?, ?, ?, ?)";

    PreparedStatement preparedStmt = conn.prepareStatement(query);
    preparedStmt.setString(1, "'" + aLicense + "'");
    preparedStmt.setInt(2, aJourneys);
    preparedStmt.setString(3, "'" + aUsername + "'");
    preparedStmt.setString(4, "'" + aPassword + "'");

    preparedStmt.execute();

    conn.close();

    Car c = new Car();
    //Do anything with the car object that you like.
    //for example: c.setColor("blue");
    return c;

} catch (Exception e) {
    System.err.println("Got an exception!");
    System.err.println(e.getMessage());
    //kayaman is correct here: we still need to return something here in order to be able to compile
    return null;
}
把逻辑分开

使用此类在需要连接的地方检索连接:

public class DatabaseConnection
{
    private static final String CONN_URL = "some connection url";
    private static Connection instance = null;

    static
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
    }

    public static synchronized Connection getInstance() throws SQLException
    {
        if (instance == null)
        {
            instance = DriverManager.getConnection(CONN_URL);
        }
        return instance;
    }
}
在函数中使用它,如下所示:

public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword)
{
    String sql = "insert into eflow.registration (cLicense, cJourneys, cUsername, cPassword) values (?, ?, ?, ?)";

    try (Connection conn = DatabaseConnection.getInstance(); PreparedStatement prepStatement = conn.prepareStatement(sql))
    {
        Car successfulAdd = new Car();

        prepStatement.setString(1, aLicense);
        prepStatement.setInt(2, aJourneys);
        prepStatement.setString(3, aUsername);
        prepStatement.setString(4, aPassword);

        if (prepStatement.execute())
        {
            return successfulAdd;
        }
    }
    catch (SQLException e)
    {
        e.printStackTrace();
    }
    return null;
}

不,他们不是。例如,在为PreparedStatement设置字符串时,不应添加“字符”,除非您希望这些字符包含在实际值中。如果您希望方法返回Car对象,则必须创建Car类的实例并返回它。就这么简单。c车=新车;返回c;我需要做些什么来改变这个呢?还有,第一个参数在索引1,第二个在索引2,等等。你使用的是1,5,1,1,而不是1,2,3,4。为什么不测试自己的代码?你会知道这是不正确的。您还创建了一个无意义的语句,忽略异常而不是抛出异常以让调用方知道发生了不好的事情,并且没有使用try with resources语句来确保您的连接始终处于关闭状态;在try-catch块之前。有人对我应该如何将字符串传递到数据库有什么建议吗?我在我的问题中添加了另一个类,如果有人可以,我是否调用该方法写入数据库assists@user3079838等待添加到数据库?您已经完成了,不是吗?方法中的信息需要从其他类添加字符串等。我现在已经开始工作了。谢谢你的帮助