Java 在createstatement()和execute()中传递SQL查询有什么区别?

Java 在createstatement()和execute()中传递SQL查询有什么区别?,java,jdbc,Java,Jdbc,同样的事情也会发生,即插入/操作数据。但内部会发生什么 在execute中传递查询: Class.forName("com.mysql.jdbc.Driver"); Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","dinga"); String str="insert into student values(10,'a

同样的事情也会发生,即插入/操作数据。但内部会发生什么

在execute中传递查询:

        Class.forName("com.mysql.jdbc.Driver");

        Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","dinga");

        String str="insert into student values(10,'abc',100)";

        Statement stmt=con.createStatement();

        stmt.execute(str); //Passing query in execute()

        System.out.println("Data inserted successfully");
在CreateStatement中传递查询

        Class.forName("com.mysql.jdbc.Driver");

        Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","dinga");

        String str="insert into student values(10,'abc',100)";

        Statement stmt=con.createStatement(str);//Passing Query in createStatement()

        stmt.execute();

        System.out.println("Data inserted successfully");

在这种情况下,除了可读性之外没有什么区别:p

在您的情况下,可能不是很多,但PreparedStatement可以帮助防止可能的SQL注入攻击。当ie与参数一起正确使用时,也有可能提高性能,因为数据库可以缓存访问计划。总之,你应该尽可能多地使用事先准备好的陈述——这是一个好习惯,可以防止你犯意外错误。参数化支持还使处理对象/类型映射日期/时间时变得更容易,特别是在您的情况下,更好的示例是使用类似字符串str=insert的查询插入学生值?,?,?;,然后,您需要通过PreparedStatement绑定参数。区别在于,在第二种情况下会出现编译错误:con.createStatementstr不编译,因为没有采用字符串参数的createStatement方法。您可能正在考虑prepareStatement方法-该方法的名称应该已经给您一个提示,说明该方法和createStatement之间有什么不同-阅读这两个方法的Javadoc应该可以让您了解其余的差异。堆栈溢出不能替代文档。Java API有大量的文档记录,在提出类似的问题之前,您应该阅读它。有一个区别,第一个编译,第二个不编译。