Comment tronquer un Postgresql table du JDBC

J'ai une base de données Postgresql et je tiens à tronquer certaines tables à l'aide de JDBC. Comment dois-je faire?

C'est ce que j'ai essayé, mais aucun n'a fonctionné... sans même aucune erreur signalée:

À l'aide de CallableStatement.

try (Connection connection = getConnection();
     CallableStatement statement = connection.prepareCall("TRUNCATE " + tableName)) {
  return statement.execute();
}

À l'aide de Statement.

try (Connection connection = getConnection();
     Statement statement  = connection.createStatement()) {
  return statement.execute("TRUNCATE " + tableName);
}

À l'aide de PreparedStatement.

try (Connection connection = getConnection();
     PreparedStatement statement = connection.prepareStatement("TRUNCATE " + tableName)) {
  return statement.execute();
}
  • CallableStatement est utilisé pour appeler une procédure stockée à l'intérieur de DB. TRUNCATE n'est pas un SP, il ne devrait donc pas travailler. Quelle erreur avez-vous lorsque vous avez utilisé la plaine Statement? Vous pouvez également activer JDBC driver suivi pour vérifier ce qui se passe à l'intérieur.
  • Aucune erreur n'a été signalé. Pour tout de la tente. Comment puis-je permettre que JDBC de traçage?
  • On dirait que vos erreurs sont arriver swalloed quelque part dans le code du client. Mettre un catch(Exception e) {e.printStacktrace();} bloc avant de finalement. Vous pouvez activer le suivi par la suite DriverManager.setLogWriter() de l'API ou de se référer à des pilotes guide. Ce Pilote JDBC que vous utilisez
  • Non, les exceptions ne sont pas avalés. J'ai changé le code dans le 2ème essayer d'être: boolean result = statement.execute("TRUNCATE " + tableName); System.out.println("Everything is ok"); return result; et je vois "Tout est ok" sur la console. Merci pour l'info sur les informations sur l'écriture de journal. Je suis à l'aide du pilote org.postgresql:postgresql:9.3-1101-jdbc4 (extrait de Maven). À droite vous êtes maintenant en se concentrant sur la mauvaise partie. Ne me dites pas ce que je fais de mal, s'il vous plaît dites-moi comment le faire correctement, comment vous feriez vous-même.
  • Utilisation Statement.executeUpdate méthode au lieu de execute.
  • Alors, comment savez-vous qu'il n'est pas réellement la troncation de la table? Au lieu de execute() essayez d'appeler executeUpdate() et de vérifier le nombre retourné à partir de la Déclaration de l'objet.
  • Tronquer déclenche une exception SQLException lorsqu'il échoue, si vous n'obtenez pas une exception, cela signifie qu'il a réussi.
  • Statement statement = connection.createStatement(); statement.executeUpdate("TRUNCATE " + tableName); System.out.println("OK") ne fonctionne toujours pas et pourtant elle imprime toujours "OK". Bimalesh, je sais que le tronquer ne fonctionne pas parce que la table n'a plus de 500 enregistrements où je n'insérez 100. Si je tronquer correctement la table doit avoir seulement 100 enregistrements. Tout comme lorsque je le faire directement dans la base de données. Dois-je commettre un ou de quelque chose de bien après une tronquer?
  • Oui, j'ai besoin de commettre. Réponse finale. Il fonctionne maintenant.
  • Votre code n'a pas catch section et se contente de les ignorer toutes les erreurs, vous devez attraper l'exception et de vérifier les codes d'erreur/messages.
  • si je vois le "OK", alors cela signifie qu'aucune exception n'est levée. Mon erreur de manipulation se fait dans l'emballage de la méthode.