Это мой метод:PreparedStatement проблемы в Java
@Override
public void deleteOneRecord(String tableName, String id) throws ClassNotFoundException, SQLException{
// Validate the parameters here.
// String sql = "DELETE FROM " + tableName + " WHERE " + column + "=" + value;
String pKeyColumnName = "";
// Statement stmt = conn.createStatement();
DatabaseMetaData dmd = conn.getMetaData();
ResultSet rs = dmd.getPrimaryKeys(null, null, tableName);
while(rs.next()){
pKeyColumnName = rs.getString("COLUMN_NAME");
System.out.println("PK column name is " + pKeyColumnName);
}
//String sql = "delete from " + tableName + " where " + pKeyColumnName + "=" + id;
String sql2 = "delete from ? where ?=?";
PreparedStatement pstmt = conn.prepareStatement(sql2);
pstmt.setString(1, tableName);
pstmt.setString(2, pKeyColumnName);
pstmt.setInt(3, Integer.parseInt(id));
pstmt.executeUpdate();
}
Это мой тест main
:
public static void main(String[] args) throws ClassNotFoundException, SQLException {
DBStrategy db = new MySqlDBStrategy();
db.openConnection("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/book", "root", "admin");
System.out.println(db.findAllRecords("author", 0).toString());
db.deleteOneRecord("author", "2");
System.out.println(db.findAllRecords("author", 0).toString());
db.closeConnection();
}
ДБ объект работы, открытое соединение работает, моя находка все метод записи работает, затем мой deleteOneRecord
взрывается. Я получаю эту ошибку:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''author' where 'author_id'=2' at line 1
Теперь мой синтаксис не изменился, я был запущен этот код, как только Statement
не проблема несколько минут назад, так что я должен использовать PreparedStatement
неправильно как-то.
Любая помощь будет оценена в значительной степени.
'?' Используется только для значений столбцов, не для имен столбцов или таблиц. – Satya
Вы должны выполнить его '' удалить из «+ tableName +», где «+ pKeyColumnName +» =? »' – Satya
Спасибо. Я собираюсь обновить это сейчас. дам вам знать. – Drewtang