3

我正在尝试将新记录写入两个名为itemsupplier的数据库表。

我有一个处理数据库连接和 SQL 语句的类。我在一个名为 ItemEntryScreen 的类中使用了一个大型表单,其中我使用了以下内容:

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

上面的代码编译!

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          

当我在表单中输入详细信息并点击提交按钮时,我得到的返回值为 -1,这会导致显示一个消息框,指出写入数据库时​​出现问题。为什么?

更新

这些是我可以获得的错误消息:

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)
4

2 回答 2

3

首先,打印堆栈跟踪以查找错误。

其次,我看到人们因为“声明”而遇到这些麻烦。在值即将更改的地方使用“PreparedStatement”。如果您执行第二个建议,您的问题很可能会得到解决

三、使用 finally() 块之类的关闭连接

于 2012-05-17T17:01:11.190 回答
1

看看我下面的代码,并尝试在此处实现它....我希望它会运行顺利..一旦您开始获得所需的查询结果,请将其修改为您的心脏内容以进行进一步的研发。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Vector;

import javax.swing.JTable;

import com.my.views.*;


public class DBDiary {

    Connection conn;
    EntryDisplay entryD;


    public DBDiary(){

        this.getConn();

    }

    public Connection getConn(){

        try {
            conn = getConnection();

        } catch (SQLException e) {

            System.out.println("Connection Couldnt be Obtained");
        }
           return conn;
    }


    public static Connection getConnection() throws SQLException {

        String drivers = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/test";
        String username = "root";
        String password = "root";

        System.setProperty(drivers,"");

        return DriverManager.getConnection(url,username,password);

    }

    public void createTable() {

        Statement stat = null;
        String sql = "create table items(item varchar(30), cost DOUBLE(12,3),day integer,month varchar(15), year integer);";
        if (conn != null){

            try {

                 stat = conn.createStatement();

            } catch (SQLException e) {

                System.out.println("Connection Couldnt be Obtained");
            }

            if (stat != null){

                try {
                    stat.executeUpdate(sql);
                } catch (SQLException e) {
                    //System.out.println("Table already Exists");
                }       
            }

        }
    }


    public void addItems(String item, double cost,int day, String month, int year) {

        PreparedStatement pstat = null;

        String sql = "INSERT INTO ITEMS Values(?,?,?,?,?);";

        if (conn != null){

            try {

                 pstat = conn.prepareStatement(sql);


            } catch (SQLException e) {

                System.out.println("Connection Couldnt be Obtained");
            }

        }

        if (pstat != null) {

            try {

                 pstat.setString(1, item);
                 pstat.setDouble(2, cost);
                 pstat.setInt(3, day);
                 pstat.setString(4, month);
                 pstat.setInt(5,year);
                 pstat.executeUpdate();

            } catch (SQLException e) {

                e.printStackTrace();
                System.out.println("Insertion of the entry was unsuccessful");
            }
        }


    }


    public static void main(String[] args) {

    DBDiary db = new DBDiary();
    db.createTable();
    db.addItems("Cards", 40.00,29, "Mar", 2012);


    }
于 2012-05-17T18:45:58.057 回答