Java设置准备好的语句

时间:2014-10-07 21:48:11

标签: java class structure prepared-statement

这是一个与编码标准相关的问题,而不是其他任何问题。

我遇到的问题是我正在努力将我准备好的语句用作类/构造函数(我来自informix背景,顺便说一下,java对我来说还是新手)。

通常当我编写代码时,我希望尽可能地将脚本保留在主块之外,然后调用函数,因为我需要它们,就像我将要展示的示例一样。我也用大量的正斜杠来夸大结构。

public class Script {

    ///////////////////////////////////////////////////////////////// start main
    public static void main(String[] args) {

        System.out.println("Script Is Starting");    // basic message

        classCONN conn = new classCONN();            // connect class
        Connection cnct = null;                      // connect variable
                                                     //
        try {                                        // try connect
           conn.func_driverCheck();                  //
           cnct = conn.func_dbConnect();             //
        } catch(SQLException log) {                  //
           System.out.println(log);                  //
        }                                            //

        *i would like to call the prepare*
        *statements function once for the*
        *rest of the script*

        classSQL sql = new classSQL();               // prepare statements
        sql.func_prep(cnct);                         //

        users_sel.setString(1, "zoh");               // insert with prepared
        users_sel.setString(2, "my");                // statements
        users_sel.setString(3, "goodness");          //
        row = users_sel.executeQuery();              //

    }
    ///////////////////////////////////////////////////////////////// end main

    ///////////////////////////////////////////////////////////////// start classes
    class classCONN {

       public void func_driverCheck() {*code to check driver*}

       public Connection func_dbConnect() {*code to connect to db*}

    }

    class classSQL {

       *I would like to prepare my statements here*

       public void f_prep(Connection cnct) {
           lv_sql = "INSERT INTO users " +
                    "VALUES(?, ?, ?)";
           PreparedStatement users_ins = cnct.prepareStatement(lv_sql);
       }

    }
    ///////////////////////////////////////////////////////////////// end classes

}

所以我的问题是有没有办法让这样的代码工作,以便准备语句,然后我可以从不同的类或主要或类似的内部执行更新它们而不实际完全准备语句主要块

2 个答案:

答案 0 :(得分:1)

这里有一个关于如何使用PreparedStatement的示例。

JDBC PreparedStatement Example – Select List Of The Records

答案 1 :(得分:0)

好的我已经找到了自己问题的答案,我想在此发布,以防任何人可以从中受益或者有任何可以添加的内容,因为这就是这个社区的用途。

public class Prog {

    // static variables ---------------------------------------------------
    static Connection conn;
    static ResultSet row;

    // main ---------------------------------------------------------------
    public static void main(String[] args) {

       // connect to db ---------------------------------------------------
       try {
          DBConnect cl_conn = new DBConnect();
          conn = cl_conn.f_connect();
       } catch(Exception log) {
          System.out.println("FAIL")
       }

       // prepare statements ----------------------------------------------
       SQLPrep prep = new SQLPrep(conn);

       // execute statement 01 --------------------------------------------
       try {
          prep.users_sel.setInt(1, 2);           // pass values to stmnt
          row = prep.users_sel.executeQuery();   // execute stmnt
       } catch(SQLException log) {
          System.out.println("FAIL");
       }

    }

}

class DBConnect {
   ***code to connect to db***
}

// all prepared stmnts in one place ----------------------------------------
class SQLPrep {

   static PreparedStatement users_sel = null;    // select from users
   static PreparedStatement access_sel = null;   // select from access

   try {

      sp_sql = "SELECT * FROM USERS WHERE u_id = ?";
      users_sel = conn.prepareStatement(sp_sql);

      sp_sql = "SELECT * FROM ACCESS WHERE a_id = ?";
      access_sel = conn.prepareStatement(sp_sql);

   } catch(SQLException log) {
      System.out.println("FAIL");
   }

}

这对某些人来说可能看起来很奇怪,但我发现这是一种非常干净整洁的结构化代码(尽可能多地保留代码的代码)。甚至执行语句的块也可以移动到一个单独的函数中,只需要传递'prep.users_prep'即可工作。