将数据插入Access数据库

时间:2013-12-16 20:33:55

标签: java database prepared-statement

我在使用Access数据库进行Java练习时遇到了麻烦,想知道是否有人可以对此有所了解

在我的主要班级,我打这样的电话

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

这会调用insertProduct(p);方法。我想要做的是将一些测试数据插入数据库,这是我的代码。

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();
    }
}

当我跑步时,我得到了一个

  

线程“main”中的异常java.lang.NullPointerException

并且无法弄清楚发生了什么,我知道当我运行调试器并逐步执行该方法时,它会在此语句的开头崩溃

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

这是堆栈跟踪的结果

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 个答案:

答案 0 :(得分:2)

堆栈跟踪中的行:

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

表示在调用PreparedStatement.setString()期间它崩溃了,这表明p.getCode()或p.getDescription()返回null。

因此,您的Product类存在问题。您是否在构造函数中正确设置了这些字段?

一旦解决了这个问题,您可能会发现插入的所有行都具有完全相同的数据,您可能会感到失望。

看看你的SQL,找出原因:

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

这应该是:

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