【问题标题】:Create PreparedStatement from statement?从语句创建 PreparedStatement?
【发布时间】:2012-08-08 16:25:06
【问题描述】:

这听起来有点奇怪,但我想创建一个PreparedStatement
在我有 Statement 之后。这是因为我的项目几乎是 50% ,直到现在 我用过 Statement

在我的数据库类中,我有一个构造函数,每次我需要使用 Mysql 服务器时都会连接到 mysql:

public class Database 
{
    private Statement m_statement = null;
    private Connection m_connection = null;
    private PreparedStatement m_prepared = null;  // that one was added just now 

    private static final String ACCOUNTS_TABLE = "CheckingAccountsTable";
    private static final String PERSONNEL_TABLE = "PersonnelTable";
    // private static final String 


    public Database() throws ClassNotFoundException
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            this.m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");
            this.m_statement = this.m_connection.createStatement();

        }

        catch (SQLException s)
        {
            System.out.println("SQL statement is not executed! 2!");
        }

    }


}




// from here I have something like 20 methods that are based on the Statement

改变一切需要很多我没有的时间。所以,我的问题是:

我可以使用我用PreparedStatement 创建的语句吗?还是基于Statement创建PreparedStatement

谢谢

【问题讨论】:

  • 使用preparedstatement创建的语句?你什么意思?

标签: java mysql prepared-statement


【解决方案1】:

这是不可能的。 StatementPreparedStatement 代表不同的东西。

  • Statement 用于调用不同的 SQL 查询,您创建一个 Statement 实例而不知道您将使用什么 SQL 查询。
  • PreparedStatement 在创建时会获得一个 SQL 查询,如果可能,驱动程序会尝试预编译该查询。您可以填写不同的参数并重复使用,但不能更改查询,它始终使用创建时给定的参数。

所以恐怕你必须重构你的代码,没有简单的方法可以在这两者之间切换。

在大多数情况下,更倾向于使用PreparedStatement,因为它允许您以安全的方式将参数传递给 SQL 查询,而不会冒SQL injection 的风险。

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 2012-03-21
    • 2012-01-12
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2021-09-05
    • 2016-02-25
    • 2013-05-29
    相关资源
    最近更新 更多