J'utilise JDBC en synchronisation avec MySQL pour ajouter et définir des lignes dans la table d'une base de données MySQL. Le problème est que je ne sais pas pourquoi il lance un Exception
lorsque j'utilise des méthodes de la classe ResultSet
pour ajouter des lignes à la table. Gardez à l'esprit que j'ai déjà essayé juste de lire la table via ResultSet
méthodes, et, il a imprimé avec succès les valeurs de la cellule. Ce qui suit est le code concerne fragement:Problème avec l'ajout de lignes avec JDBC et MySQL?
public void run(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/temp_book_database","root","1234");
ResultSet set = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE).executeQuery("SELECT * FROM book_info");
set.moveToInsertRow();
set.updateString(1, "Osama's POV"); set.updateString(2, "Osama B Laden");
set.updateInt(3, 2800); set.updateString(4, "Osama bin Laden's debute book on terrorism");
set.insertRow(); set.moveToCurrentRow();set.beforeFirst();
//I'm guessing the bottom while loop is not executed because the above is generating the Exception
while (set.next()){
System.out.println(set.getString("Book_Title")+ set.getString("Book_Author")+ set.getString("MRP")+set.getString("Comments"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e){System.out.println("prob with code");
e.printStackTrace();}
Et voici la console:
prob with code
com.mysql.jdbc.NotUpdatable: Result Set not updatable (referenced table has no primary keys).This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one table, can not use functions and must select all primary keys from that table. See the JDBC 2.1 API Specification, section 5.6 for more details.
at com.mysql.jdbc.UpdatableResultSet.moveToInsertRow(UpdatableResultSet.java:1013)
at testJDBCDriver.run(testJDBCDriver.java:21)
at testJDBCDriver.main(testJDBCDriver.java:9)
[UPDATE]
Après avoir ajouté la colonne id
dans le tableau comme INTEGER AUTO_INCREMENT PRIMARY KEY
l'ResultSet
ajouté avec succès rangée à la table, maintenant, je veux juste savoir pourquoi MySQL n'accepte pas la demande d'ajouter une nouvelle ligne de ResultSet
si la colonne id
n'est pas présente dans la table?
Est-ce vrai: "la table référencée n'a pas de clés primaires"? – Boden
Je voudrais mettre la table avec un PK, comme un GUID et voir si cela aide –
@ Boden Oui. Ce n'est pas une blague. Comme je l'ai mentionné, j'ai essayé d'utiliser SEULEMENT la boucle while, et, il a imprimé les cellules correctement – Catfish