Java SQL准备语句&返回类型
我刚刚在类文件中创建了一个方法,将数据插入sql数据库 1这些准备好的陈述是否正确? 2我需要返回一个类型的汽车的方法在哪里可以做到这一点? ..…因为我现在得到的错误是该方法必须返回类型Car Car是类文件的名称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
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等待添加到数据库?您已经完成了,不是吗?方法中的信息需要从其他类添加字符串等。我现在已经开始工作了。谢谢你的帮助