Java 在数据库中插入条目的最佳方法

Java 在数据库中插入条目的最佳方法,java,mysql,Java,Mysql,我只是想知道在java中插入一行值的最佳方式是什么,比如java程序员在插入值时会做什么,并告诉我为什么 是这样吗 String query=“插入表(表1)中的值(1)”; PreparedStatement stmt=connection.PreparedStatement(查询); stmt.execute() 还是像这样 String query=“插入表(表1)中的值(?”; PreparedStatement stmt=connection.PreparedStatement(查询)

我只是想知道在java中插入一行值的最佳方式是什么,比如java程序员在插入值时会做什么,并告诉我为什么

是这样吗

String query=“插入表(表1)中的值(1)”;
PreparedStatement stmt=connection.PreparedStatement(查询);
stmt.execute()

还是像这样

String query=“插入表(表1)中的值(?”;
PreparedStatement stmt=connection.PreparedStatement(查询);
stmt.setInt(1,“1”);
stmt.execute()

还是有更好的办法


只是想提高我的编码知识:D

第二个选项允许在查询中输入变量。如果您可以硬编码这些值,那么第一个选项会更快

当您允许用户输入(用户可以在其中决定哪些值进入查询)时,第二个选项允许您将值安全地放入查询中。另一方面,这是一个很大的禁忌:

String userInput = askUserForSomeValue();
String query = "insert into table (table1) values ("+userInput+")";
PreparedStatement stmt = connection.preparedStatement(query );
stmt.execute();

因为它允许用户发送字符串。

通常认为是
准备的
语句,而不是普通的
语句,因为它是预编译的,并且语句的DB端缓存理想情况下会导致整体更快的执行,并且能够批量重用相同的SQL语句。它还可以非常安全地防止
SQL注入


这也很方便。

PreparedStatements是一种方法,因为它们使SQL注入变得不可能。 下面是一个以用户输入为参数的简单示例:

PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (value) values (?)");
stmt.setInt(1,userinput);
stmt.executeUpdate();

始终使用第二个选项。如果您使用第一个选项并从硬编码字符串和用户输入构建语句,您将接受SQL注入。第二种方法应该在有变量数据时使用。哦,这取决于具体情况,多亏了lotcon是连接对象,我已经读取了线程,所以语句的编译速度要慢得多,而preparedstatement要快得多,因为它不需要编译,但在某些情况下,这种声明是非常有效的。