是否可以使用JDBC在servlet中执行SQL文件?

时间:2014-09-03 20:12:16

标签: sql oracle java-ee servlets

现在我正在为学习目的创建一个简单的银行项目,我需要为简单的操作进行大量的搜索,更新和插入操作。例如,如果我想从示例用户ID创建一个事务,请在"创建Trasaction"屏幕,输入详细信息并按"提交"按钮,我的应用程序将执行以下操作。

1)在登录会话表中插入一行,其值包括:IP地址,用户ID和时间。

2)检查特定用户ID是否有权从用户访问表创建交易选项。

3)检查被借记/贷记的账户是否属于与创建用户的本地分行代码相同的分支代码。

3)检查输入库存(如果有),即DD,Check是否对库存表有效。

4)检查被扣除/贷记的帐户是否已冻结。

5)检查被借记的帐户是否有足够的可用余额。

6)检查帐户状态Active / Inactive或Dormant。

7)检查并创建服务税(如果适用),即从S.Tax表中进行另一次搜索并插入到帐户交易表中

最后,

8)如果条件通过,则在帐户交易表中插入一行。

现在,我觉得在Servlet中写这么多预备代码只是为了创建一个事务,我感觉不舒服。我的应用程序中也会有其他操作。所以我想知道是否有一种方法可以简单地编写这些SQL语句并将SQL文件传递给Servlet。或者我们可以在PL / SQL中编写函数并将函数传递给servelt。这些方式可能吗?

请注意,我使用的是J2EE和Oracle数据库。

1 个答案:

答案 0 :(得分:2)

我做了一次这个项目我几年前做的事情实际上我实现了接近你想要的东西我用这种格式创建了一个属性文件:

trans.getTransactons=select * from whateverTable where onesqlquery
trans.getTranId=select tran_id from whatevertable where anothersqlquery

因此,当您编写类时,只需从文件中加载属性,然后从属性中填充查询:例如:This Loads the property fle

public class QueriesLoader {

    Properties prop;

    public QueriesLoader() {
    }

    public Properties getProp() {
        prop = new Properties();
        ClassLoader classLoader = getClass().getClassLoader();
        try {
            InputStream url = classLoader.getResourceAsStream("path/to/your/propertiesFile/databasequeries.properties");
            prop.load(url);
        } catch (IOException asd) {
            System.out.println(asd.getMessage());
        }
        return prop;
    }
}

然后在您的数据库访问对象

public ArrayList getAllTransactions() {
        ArrayList arr = new ArrayList();
        try {
            String sql = que.getProp().getProperty("trans.getTransactons");
            PreparedStatement ps = DBConnection.getDbConnection().prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                arr.add(rs.getString(1));
            }
            DBConnection.closeConn(DBConnection.getDbConnection());

        } catch (IOException asd) {
            log.debug(Level.FATAL, asd);
        } catch (SQLException asd) {
            log.debug(Level.FATAL, asd);
        }
        return arr;
    }

我最后没有在我的课程中写一个查询。我希望这有助于你。