【问题标题】:Java is connecting to SQL database but it isn't updating tablesJava 正在连接到 SQL 数据库,但它没有更新表
【发布时间】:2020-05-03 01:43:53
【问题描述】:

我正在使用 java 和 SQLite 编写票务系统。这是我用于连接数据库并在该数据库中创建票证的代码。

public class TicketProject {

    static Connection conn = null;
    static Scanner entry = new Scanner(System.in);
    static PreparedStatement add = null;

    public static Connection ConnectDB(){
        try {
            Class.forName("org.sqlite.JDBC");
            conn = DriverManager.getConnection("jdbc:sqlite:TicketDB.db");
            JOptionPane.showMessageDialog(null,"Connection Success!");
            return conn;
        } catch (ClassNotFoundException | SQLException | HeadlessException e) {
            JOptionPane.showMessageDialog(null, "Connection failed ! " + e);
            return null;
        }
    }

    public static void createTicket() {

        String cont = "1";
        int contChoice = Integer.parseInt(cont);
        Statement stmt = null;

        while (contChoice != 0) {

            try {
                //program accepts user input
                System.out.print("Enter Name: ");
                String n = entry.nextLine();
                System.out.print("Enter Department: ");
                String d = entry.nextLine();
                System.out.print("Enter Status: ");
                String s = entry.nextLine();
                System.out.print("Enter Notes: ");
                String o = entry.nextLine();

                add = conn.prepareStatement("INSERT INTO Ticket VALUES(?,?,?,?,?)");
                add.setString(2, n);
                add.setDate(3, java.sql.Date.valueOf(java.time.LocalDate.now()));
                add.setString(4, d);
                add.setString(5, s);
                add.setString(6, o);
                int executeUpdate = add.executeUpdate();               
            } catch (SQLException e ) {

            }

            System.out.println("Would you like to create another ticket? 1 = yes, 0 = no");
            cont = entry.nextLine();
            contChoice = Integer.parseInt(cont);
        }
    }

    public static void main(String[] args) {

        ConnectDB();

        String initialOption;
        int run = 1;

        while (run != 2) {

            System.out.println("What would you like to do?");
            System.out.println("1 = Create Ticket, 2 = Edit Ticket, 3 = Display Tickets, 4 = Exit");
            initialOption = entry.nextLine();
            int choice = Integer.parseInt(initialOption);

            if (choice == 1) {

                createTicket();

            }
        }
    }
}

因此,在这段代码中,我们看到了我与数据库的连接,我们看到了我的 createTicket 函数,并且我们在 main 中看到我们调用了连接,然后调用了 createTicket。 Ticket 表是手动创建的,实际上有 6 个字段。此处的代码列出了 5,但第一个字段是 TicketNumber,它是一个非空的自动增量。

我已经尝试过这里看到的 add.executeUpdate(),我还尝试过 add.execute() 和 conn.commit()。无论我尝试什么,当我运行代码并输入信息时,数据库都不会更新。

我做错了什么?如果您需要任何其他信息,请告诉我。

提前致谢

【问题讨论】:

  • 我们需要你添加一个 System.out.println();在您的 SQLException catch 块内,您可以看到有关问题所在的消息。现在,您只是跳过任何 SQLException,甚至不知道是否发生了错误。如果您打印 e.getMessage(),SQLException 将通知您出了什么问题。这样你就知道出了什么问题。
  • 我添加了这个代码: System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0);除了我列出的错误之外,它没有吐出错误。

标签: java sql sqlite


【解决方案1】:

即使您这样做的方式并不理想,只是为了检查是否发生了什么,请在 Insert 语句中使用以下语法。 IE。以正确的顺序放置除标识 col 之外的列列表

Insert Into Ticket (Col1,Col2,... ) values (...)

更好的方法是使用参数,并有一个存储过程来做插入

【讨论】:

  • 好的,我试试这个。它应该列出所有字段,包括我最初忽略的票号,还是只列出接受输入的 5 个字段?
  • 不是身份列(所以只有 5 个列 - 我编辑了我的答案)
  • 好的,新的事情发生了。我收到了这个错误:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:在 org.sqlite.jdbc3 的 org.sqlite.core.CorePreparedStatement.batch(CorePreparedStatement.java:130) 处,索引 5 超出长度 5 的范围。 JDBC3PreparedStatement.setString(JDBC3PreparedStatement.java:417) 在 ticketproject.TicketProject.createTicket(TicketProject.java:64)
  • 是在您更改插入语句之后,还是您进行了任何其他更改?
  • 刚刚更改了插入语句。此错误指向备注字段。该字段接受 TEXT 并具有与 Department 和 Status 相同的属性。
猜你喜欢
  • 2014-02-12
  • 2017-02-11
  • 2016-06-27
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
相关资源
最近更新 更多