Writing to DB tables

database, file-io, java, sql

Solution

First, print the stacktrace to find the error.

Second, I have seen people are having these troubles because of "Statement". Use "PreparedStatement" in places where the values are about to change.Most probably your issue will be solved if you do the second suggestion

Third, close the connection using finally() block or something

Problem

I am trying to write a new record to two database tables which are called item and supplier. I have a class that handles the database connection and SQL statements. I am using a large form in a class called ItemEntryScreen where I am using the following: ``` private void writeItemRecord() { if ( DataBaseHandler.makeConnectionTofireplaceDB() == -1) { JOptionPane.showMessageDialog (frame, "Unable to connect to database table (Item)"); } else // Ok, so first read data from the text fields { // Read data from form and store data String suppliercode = suppliercodeTxtField.getText(); String suppliername = suppliernameTxtField.getText(); String address = addressTxtField.getText(); // Create a Item oject Item item = new Item(); // Set the attributes for the Item object item.setSuppliercode(suppliercode); item.setSuppliername(suppliername); item.setAddress(address); // Write Item record. Method writeToItemTable() returns // 0 of OK writing record, -1 if there is a problem. I store // the returned value in a variable called error. int error = DataBaseHandler.writeTosupplierTable(item.getSuppliercode(),item.getSuppliername(),item.getAddress()); // Check if there is a problem writing the record, in // which case error will contain -1 if (error == -1) { JOptionPane.showMessageDialog (frame, "Problem writing record to Item Table"); } // Clear the form - actual method is coded below clearForm(); // Close database connection. Report an error message // if there is a problem. if ( DataBaseHandler.closeConnection() == -1 ) { JOptionPane.showMessageDialog (frame, "Problem closing data base conection"); } } } /** * Method to write a Item record */ private void writesupplierRecord() { // Check to see if we can connect to database table if ( DataBaseHandler.makeConnectionTofireplaceDB() == -1) { JOptionPane.showMessageDialog (frame, "Unable to connect to database table (Item)"); } else // Ok, so first read data from the text fields { // Read data from form and store data String itemname = itemnameTxtField.getText(); String itemcode = itemcodeTxtField.getText(); String description = descriptionTxtField.getText(); String unitprice = unitpriceTxtField.getText(); String style = styleTxtField.getText(); String finish = finishTxtField.getText(); String stock = stockTxtField.getText(); // Convert priceStr to a float Float fvar = Float.valueOf(unitprice); float newprice = fvar.floatValue(); Float svar = Float.valueOf(stock); float newstock = svar.floatValue(); // Create a Item oject Item item = new Item(); // Set the attributes for the Item object item.setItemname (itemname); item.setItemcode (itemcode); item.setDescription (description); item.setUnitprice (newprice); item.setStock(newstock); item.setStyle(style); item.setFinish(finish); // Write Item record. Method writeToItemTable() returns // 0 of OK writing record, -1 if there is a problem. I store // the returned value in a variable called error. int error = DataBaseHandler.writeToitemTable(item.getItemname(), item.getItemcode(), item.getDescription(), item.getUnitprice(), item.getStock(), item.getStyle(), item.getFinish() ); // Check if there is a problem writing the record, in // which case error will contain -1 if (error == -1) { JOptionPane.showMessageDialog (frame, "Problem writing record to Item Table"); } // Clear the form - actual method is coded below clearForm(); // Close database connection. Report an error message // if there is a problem. if ( DataBaseHandler.closeConnection() == -1 ) { JOptionPane.showMessageDialog (frame, "Problem closing data base conection"); } } } // End ``` The above code compiles! ``` static public int writeToitemTable(String itemnameIn, String itemcodeIn, String descriptionIn, float unitpriceIn, float stockIn, String styleIn, String finishIn) { // Variable to hold the SQL query String SQLString; // Build a string containing the SQL INSERT instruction to be used later SQLString = "INSERT INTO item VALUES ('" + itemcodeIn + "','" + itemnameIn + "','" + descriptionIn + "','" + unitpriceIn + "','" + stockIn + "','" + styleIn + "','" + finishIn + "')"; try { // The createStatement() method creates a Statement object. Object will be // attached to my reference variable (statement) defined at the top of class. statement = connectionTofireplaceDB.createStatement(); // The executeUpdate() statement can be used here to execute an // SQL INSERT instruction. statement.executeUpdate (SQLString); } catch (SQLException exception) { return (-1); // Return -1 if problem writing record to file } return (0); // Return with 0 if record successfully written } // End static public int writeTosupplierTable(String suppliernameIn, String suppliercodeIn, String addressIn) { // Variable to hold the SQL query String SQLString; // Build a string containing the SQL INSERT instruction to be used later SQLString = "INSERT INTO supplier VALUES ('" + suppliernameIn + "','" + suppliercodeIn + "','" + addressIn + "')"; try { // The createStatement() method creates a Statement object. Object will be // attached to my reference variable (statement) defined at the top of class. statement = connectionTofireplaceDB.createStatement(); // The executeUpdate() statement can be used here to execute an // SQL INSERT instruction. statement.executeUpdate (SQLString); } catch (SQLException exception) { return (-1); // Return -1 if problem writing record to file } return (0); // Return with 0 if record successfully written } // End ``` When I enter details into the form and hit the submit button, I am getting a return value of -1 which results in a message box being displayed that states there was a problem writing to the database. Why? Update These are the error messages I can getting: ``` Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at ItemEntryScreen.writeItemRecord(ItemEntryScreen.java:392) at ItemEntryScreen.actionPerformed(ItemEntryScreen.java:348) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) ```

Original source