如何通过 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() 子句将问号替换为数据类型。从而操纵数据库。
感谢大家的贡献。它有很大帮助,并使本节更容易理解。
我正在使用气枪应用程序。
我正在尝试通过 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() 子句将问号替换为数据类型。从而操纵数据库。
感谢大家的贡献。它有很大帮助,并使本节更容易理解。