在Java中执行通用SQL
我正在开发一个小型web应用程序,它将使用MySQL数据库,有几个servlet执行不同类型的SQL—插入、更新、删除等。以前,我编写了一个单独的类Database.java,每个查询都有一个单独的函数。但是,这会建立一个大而混乱的文件,现在我想创建一些通用函数,例如:在Java中执行通用SQL,java,mysql,generics,Java,Mysql,Generics,我正在开发一个小型web应用程序,它将使用MySQL数据库,有几个servlet执行不同类型的SQL—插入、更新、删除等。以前,我编写了一个单独的类Database.java,每个查询都有一个单独的函数。但是,这会建立一个大而混乱的文件,现在我想创建一些通用函数,例如: static ArrayList rs(String query, List params, int columns) { ArrayList result = new ArrayList(); Conn
static ArrayList rs(String query, List params, int columns) {
ArrayList result = new ArrayList();
Connection con = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try {
con = getConnection();
stmt = con.prepareStatement(query);
for (int i = 0; i < params.size(); i++) {
stmt.setObject(i+1, params.get(i));
}
rs = stmt.executeQuery();
while(rs.next()) {
ArrayList thisRow = new ArrayList();
for (int column = 1; column <= columns; column++) {
thisRow.add(rs.getObject(column));
}
result.add(thisRow);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
静态ArrayList rs(字符串查询、列表参数、int列){
ArrayList结果=新建ArrayList();
连接con=null;
结果集rs=null;
PreparedStatement stmt=null;
试一试{
con=getConnection();
stmt=con.preparest陈述(查询);
对于(int i=0;i 对于(int column=1;column非常接近,但为了提高效率,请尝试这样做
static ArrayList rs(String query, List params, int columns)
{
ArrayList result = new ArrayList();
try (Connection con = getConnection())
{
try(PreparedStatement stmt = con.prepareStatement(query))
{
for (int i = 0; i < params.size(); i++)
{
stmt.setObject(i+1, params.get(i));
}
try(ResultSet rs = stmt.executeQuery())
{
while(rs.next())
{
ArrayList thisRow = new ArrayList();
for (int column = 1; column <= columns; column++)
{
thisRow.add(rs.getObject(column));
}
result.add(thisRow);
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
return result;
}
静态ArrayList rs(字符串查询、列表参数、int列)
{
ArrayList结果=新建ArrayList();
try(Connection con=getConnection())
{
try(PreparedStatement stmt=con.preparest陈述(查询))
{
对于(int i=0;i 对于(int column=1;column如果您试图找到一种比普通JDBC+自制实用程序类更有效的方法,那么有两个好的选择可以考虑:
- (例如JPA):这些工具可以让您将现有的表映射到您创建的对象,然后为您提供大量现成的功能。当然,它是免费的,您需要学习如何配置和使用这些,但之后它将成为一个非常强大的工具
- (例如MyBatis):这些工具在某种程度上更易于使用(至少MyBatis是这样),功能更少。我建议阅读示例并将其与JPA进行比较,看看哪一个最适合您
解决方案可能取决于您想要得到的“通用”结果的级别。无论如何,我建议不要发明带有普通JDBC API的自行车,因为它的级别太低了
除了JPA或MyBatis(一开始似乎很复杂)之外,我认为最简单的方法之一是使用。它提供了使用SQL访问数据的功能。最简单、最通用的示例是:
List<Map<String,Object>> queryResult = jdbcTemplate.queryForList("**qour sql select here**");
List queryResult=jdbcTemplate.queryForList(“**qour-sql-select-here**”);
close
调用应该在finally
块中!看起来很难看,finally中有另一个try-catch,但是如果是这样,我会更改它,感谢JDBC API是如此难看…或者,如果您使用jre 1.7+在超出try范围时关闭连接,您可以使用try with resources-接住