如何通过 sql 在 Java 中将记录添加到数据库

How to add records to databse via sql in Java

我正在使用气枪应用程序。

我正在尝试通过 Java 中的 SQL 将记录添加到 MS Access 数据库。我已经建立了一个 link 到数据库,具有以下内容:

   try
   {
        //String Driver = "sun.java.odbc.JdbcOdbcDriver";

        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

        Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + URL,"","");

        Statement stmt = conn.createStatement();

        System.out.println("Connection Established!");

        ResultSet rs = stmt.executeQuery("SELECT * FROM AirsoftGunRentals");
        tblRent.setModel(DbUtils.resultSetToTableModel(rs));


   }
   catch(Exception ex)
   {
       JOptionPane.showMessageDialog(null, "Error");
   }

我正在使用 Ucanaccess 访问我的 MS 数据库。它正在读取数据库并显示到 JTable。但是,我需要创建三个 JButton 来添加、删除和更新 table。我尝试编写添加按钮的代码,并尝试添加一条记录,但它崩溃并给我错误。

   try
   {
        //String Driver = "sun.java.odbc.JdbcOdbcDriver";
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + URL,"","");

        Statement stmt = conn.createStatement();

        System.out.println("Connection Established!");

        String Query= "INSERT INTO AirsoftGunRentals(NameOfGun, Brand, TypeOfGuns, NumberOfMagazines,Extras,NumberAvailable,UnitRent)"+
             "VALUES('"+pName+"','"+pBrand+"','"+pTypeOfGun+"','"+pNumMags+"','"+pExtras+"','"+pNumberAvail+"','"+pRent+"');";

        ResultSet rs = stmt.executeQuery(Query);

        JOptionPane.showMessageDialog(null, "Success!");


   }
   catch(Exception ex)
   {
       JOptionPane.showMessageDialog(null, "Error");
   }

这三个我都试过了,希望有结果。但我仍然犯了很大的错误。按钮之间的唯一区别是一个添加、一个删除和一个更新 table。除此之外,代码是相同的,减去变量。

先在引号前加上一个space这样的:

      String Query= "INSERT INTO AirsoftGunRentals(NameOfGun, Brand, TypeOfGuns, NumberOfMagazines,Extras,NumberAvailable,UnitRent) "+
         " VALUES('"+pName+"','"+pBrand+"','"+pTypeOfGun+"','"+pNumMags+"','"+pExtras+"','"+pNumberAvail+"','"+pRent+"');";

并在您的插入、更新和删除查询中使用 stmt.executeUpdate(Query); 而不是:stmt.executeQuery(Query);。对于 select 个查询,您可以保留它。

正如 Brahim 提到的那样,无论何时更新/插入或删除数据,都应该使用 stmt.executeUpdate(Query)。同样对于这个特定的查询,给定你的字符串连接(见行尾),“)”和 "VALUES" 之间没有 space,这可能会导致查询格式错误。

但是,从您的代码中我可以看出您对此类用例不是很有经验,我想在您的项目出现问题之前添加一些提示:

  • 使用PreparedStatement代替Statement并用占位符替换变量以防止SQL注入。 您在此处使用的代码极易受到 SQL 注入 - 如果任何用户可以控制任何变量,这可能会导致完整的数据库转储(盗窃)、数据破坏(故意破坏)或如果满足其他条件,即使在机器接管中。 一个好的建议是永远不要使用 Statement class,安全总比后悔好:)
  • 尊重Java 惯例(或保持一致)。 在您的示例中,您定义了 String Query,而所有其他变量都以小写字母开头(如 Java 约定),而不是 String query。随着时间的推移,这样的小错误(不会破坏构建)将导致错误,因为错误的变量具有 classnames 等 :)

祝你在掌握这门美妙的语言的道路上好运! :)

我设法找到了有关如何向 MS Access 数据库添加、删除和更新记录的答案。这是我在声明连接和准备好的语句后发现的。我会尽力解释。我不得不使用这个单独添加值:

(pstmt = 准备语句变量)

pstmt.setWhatever(1,变量);

现在可以正常使用了。我使用相同的方法来删除和更新记录。

这是基本的查询格式:

字符串 SQLInsert = "INSERT INTO Tbl VALUES(NULL,?,?,?,?)";

语句中的NULL是table中的自动编号。 .setWhatever() 子句将问号替换为数据类型。从而操纵数据库。

感谢大家的贡献。它有很大帮助,并使本节更容易理解。