Inserting data into a Access Database

守給你的承諾、 提交于 2019-12-13 03:58:06

问题


I am having trouble with a exercise I am working on with Java using a Access Database, wondering if anyone could shed some light on this

In my main class I make a call like this

Product p = new Product("test", "Test Product", 49.50);
insertProduct(p);

This calls the insertProduct(p); method. What I am trying to do is insert some test data into the database, here is my code for that.

public static void insertProduct(Product p)
{
    try
    {
        System.out.println("Insert test: ");

        String insertProduct = "INSERT INTO Products (ProductCode, Description, Price) VALUES ('andr', 'Beginning Android', '38.99')";
        PreparedStatement ps = connection.prepareStatement(insertProduct);
        ps.setString(1, p.getCode());
        ps.setString(2, p.getDescription());
        ps.setDouble(3, p.getPrice());
        ps.executeUpdate();

        ResultSet rs = ps.executeQuery();

        rs.next();
        String productCode = rs.getString(1);
        String description = rs.getString(2);
        double price = rs.getDouble(3);

        p = new Product(productCode, description, price);


        printProduct(p);
        System.out.println();

    }
    catch(SQLException e)
    {
        e.printStackTrace();
    }
}

when I run this I get a

Exception in thread "main" java.lang.NullPointerException

and can't figure out what is going on, I know that when I run the debugger and step through the method, it crashes at the beginning of this statements

ps.setString(1, p.getCode());
ps.setString(2, p.getDescription());
ps.setDouble(3, p.getPrice());
ps.executeUpdate();

here is the results of the stack trace

at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1023)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3057)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)
at DBTesterApp.insertProduct(DBTesterApp.java:165)
at DBTesterApp.main(DBTesterApp.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

回答1:


The line in the stack trace:

at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:766)

indicates that it fell over during your call to PreparedStatement.setString(), which indicates that either p.getCode() or p.getDescription() returns null.

There is therefore a problem in your Product class. Are you setting those fields correctly in the constructor?

Once you've fixed that, you may be disappointed to find that all your rows you insert have exactly the same data.

Look at you SQL to find out why:

String insertProduct = "INSERT INTO Products (ProductCode, Description, Price) VALUES ('andr', 'Beginning Android', '38.99')";

This should be:

String insertProduct = "INSERT INTO Products (ProductCode, Description, Price) VALUES (?,?,?)";


来源:https://stackoverflow.com/questions/20620345/inserting-data-into-a-access-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!