Ich benutze MySQL und beschlossen, meine eigene Datenbank Helper-Klasse, die mir Android-wie syntaktische SQL geben würde jedoch, wenn ich versuche, eine Update-Anweisung mit einem PreparedStatement, wenn ich den Code ausführe, findet keine Änderung in der Datenbank statt, aber es wird keine Ausnahme ausgelöst. Ich überprüfte meine Verbindungszeichenfolge, stellte sicher, dass meine .jars in Ordnung waren, dreifach prüfte meine Syntax, aber nichts. Code:java.sql.PreparedStatement.executeUpdate() funktioniert nicht mit MySQL-Datenbank
DatabaseHelper.java:
public class DatabaseHelper {
String dbHost = "localhost";
String dbPort = "3306";
String dbName = "nakomangdb";
String dbUsername = "root";
String dbPassword = "sqldb";
String connectionString = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName;
Connection connection;
PreparedStatement preparedStatement;
public DatabaseHelper() {
}
public void closeDatabase() {
try {
if (!connection.isClosed())
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public void openDatabase() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(connectionString, dbUsername, dbPassword);
connection.setAutoCommit(true);
} catch (ClassNotFoundException | SQLException ex) {
ex.printStackTrace();
}
}
public void update(String table, String[] set, Object[] to, String whereClause, Object[] whereArgs) {
StringBuilder sql = new StringBuilder("update ");
sql.append(table);
sql.append(" set ");
for (int i = 0; i < set.length; i++) {
sql.append(set[i]);
sql.append(" = ?");
if (i != (set.length - 1)) {
sql.append(", ");
}
}
sql.append(" ");
int argCount = to.length;
try {
if (whereClause != null) {
sql.append(whereClause);
sql.append(";");
preparedStatement = connection.prepareStatement(sql.toString());
for (Object s : whereArgs) {
preparedStatement.setObject(argCount++, s);
}
} else {
sql.append(";");
preparedStatement = connection.prepareStatement(sql.toString());
}
argCount = 0;
for (Object s : to) {
preparedStatement.setObject(argCount++, s);
}
preparedStatement.executeUpdate();
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Telefonvorwahl:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DatabaseHelper dbHelper = new DatabaseHelper();
dbHelper.openDatabase();
dbHelper.update("customer",
new String[]{"fullName"},
new Object[]{"vernon"},
"where ID=?",
new Object[]{1});
dbHelper.closeDatabase();
response.getWriter().append("Done!");
}
Haben Sie Ihr Serverprotokoll zu StackTrace überprüft? – DiogoSantana
Ich habe gerade, und ich bekomme eine java.sql.SQLException: Parameter Index außerhalb des Bereichs (0 <1), was keinen Sinn macht, da argCount ist nie 0, ich überprüft, ist die Reihenfolge, in der die PrepaaredStatement.setXXX-Methoden sind Materie genannt? Muss ich unbedingt die Arg-Positionen 1,2,3 usw. in dieser Reihenfolge setzen, oder kann ich 3,4,1,2 setzen? – BiGGZ
_ "argCount ist nie 0" _ - Entschuldigung, das ist falsch. 'argCount' wird auf Null initialisiert und' argCount ++ 'ist *** post *** Inkrement. –