Java设置准备好的语句
这是一个与编码标准有关的问题 我遇到的问题是,我很难将我准备好的语句用作类/构造函数(我来自informix后台,顺便说一句,java对我来说还是新的) 通常,当我编写代码时,我喜欢尽可能地将脚本编写在主块之外,然后根据需要调用函数,就像我将要展示的示例中那样。我还用大量的前斜杠夸大了结构Java设置准备好的语句,java,class,structure,prepared-statement,Java,Class,Structure,Prepared Statement,这是一个与编码标准有关的问题 我遇到的问题是,我很难将我准备好的语句用作类/构造函数(我来自informix后台,顺便说一句,java对我来说还是新的) 通常,当我编写代码时,我喜欢尽可能地将脚本编写在主块之外,然后根据需要调用函数,就像我将要展示的示例中那样。我还用大量的前斜杠夸大了结构 public class Script { ///////////////////////////////////////////////////////////////// start main
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
}
所以我的问题是,有没有一种方法可以让这样的代码工作,这样语句就准备好了,然后我就可以在不同的类中或在main中或类似的任何地方执行更新,而不需要在main块中完全准备语句
好的,我已经对我自己的问题提出了一个答案,我想把它贴在这里,以防任何人都能从中受益,或者有什么可以补充的,因为这就是这个社区的目的
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\u prep”即可工作。这是我开始的好地方,不完全是我所想的,但这让我知道了如何实现我想要的流程。您可能想看看。stackoverflow和codereview之间的区别是什么?codereview是为了让您的(工作)代码得到审查,包括最佳实践的建议。哦,kwl,我不知道堆栈交换有多大