Java GroovySQL框架
嗨,我想设计一个类使用,我将能够在我未来的任何数据库相关的项目使用。目前我提出了下面的类,它有单独的函数用于单独的查询,我想学习如何使它通用!因此,我只需要传递Java GroovySQL框架,java,groovy,Java,Groovy,嗨,我想设计一个类使用,我将能够在我未来的任何数据库相关的项目使用。目前我提出了下面的类,它有单独的函数用于单独的查询,我想学习如何使它通用!因此,我只需要传递1查询和一些绑定参数(如果不传递null)请帮助我获得解决方案 我的代码 import java.sql.*; import java.util.List; import groovy.sql.Sql public class ProductInfo { ReadProperty prop def sql public
1查询
和一些绑定参数(如果不传递null)
请帮助我获得解决方案
我的代码
import java.sql.*;
import java.util.List;
import groovy.sql.Sql
public class ProductInfo {
ReadProperty prop
def sql
public ProductInfo()
{
prop=ReadProperty.getInstance("db")
sql = Sql.newInstance("jdbc:oracle:thin:@"+prop.getProperty("hostname")+":"+prop.getProperty("port")+":"+prop.getProperty("service"), "asimonc", "asimon","oracle.jdbc.OracleDriver")
}
public List executeSelection(String query)
{
List result=new ArrayList()
sql.eachRow(query)
{
String[] rows=new String[5]
rows[0]=(String)it.id
rows[1]=(String)it.name
rows[2]=(String)it.description
rows[3]=(String)it.active
rows[4]=(String)it.release_date
result.add(rows)
}
return result
}
public executeInsert(String query,Object[] paramValues)
{
sql.execute(query,[paramValues[0], paramValues[1],paramValues[2], paramValues[3], paramValues[4]])
}
public executeUpdation(String query,Object[] paramValues)
{
sql.executeUpdate(query,[paramValues[1], paramValues[2],paramValues[4],paramValues[5], paramValues[0]])
}
public int executeSelectMax(String query)
{
int max
sql.eachRow(query)
{
max=it.max
}
if(max==null)
return 0
else
return max
}
}
我的甲骨文表
CREATE TABLE PRODUCTINFO
( "ID" NUMBER NOT NULL ENABLE,
"NAME" NVARCHAR2(200),
"DESCRIPTION" NVARCHAR2(200),
"ACTIVE" NVARCHAR2(2),
"RELEASE_DATE" DATE,
PRIMARY KEY ("ID")
)
用于查找最大id(选择)
对于更新
ProductInfo pinfo= new ProductInfo();
int max=pinfo.executeSelectMax("select max(id) as max from productinfo");
Object[] paramValues={iid,name,desc,"A",date,active};
pinfo.executeUpdation("update productinfo set name=?, description=?, release_date=?, active=? where id=?",paramValues);
Object[] paramValues={max+1,name,desc,"A",date};
pinfo.executeInsert("insert into productinfo(ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE) values (?,?,?,?,?)",paramValues);
List result=pinfo.executeSelection("select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE='A'");
对于插入
ProductInfo pinfo= new ProductInfo();
int max=pinfo.executeSelectMax("select max(id) as max from productinfo");
Object[] paramValues={iid,name,desc,"A",date,active};
pinfo.executeUpdation("update productinfo set name=?, description=?, release_date=?, active=? where id=?",paramValues);
Object[] paramValues={max+1,name,desc,"A",date};
pinfo.executeInsert("insert into productinfo(ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE) values (?,?,?,?,?)",paramValues);
List result=pinfo.executeSelection("select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE='A'");
对于另一个选择
ProductInfo pinfo= new ProductInfo();
int max=pinfo.executeSelectMax("select max(id) as max from productinfo");
Object[] paramValues={iid,name,desc,"A",date,active};
pinfo.executeUpdation("update productinfo set name=?, description=?, release_date=?, active=? where id=?",paramValues);
Object[] paramValues={max+1,name,desc,"A",date};
pinfo.executeInsert("insert into productinfo(ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE) values (?,?,?,?,?)",paramValues);
List result=pinfo.executeSelection("select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE='A'");
那么:
import groovy.sql.Sql
public class ProductInfo {
ReadProperty prop
def sql
public ProductInfo() {
prop=ReadProperty.getInstance("db")
sql = Sql.newInstance( "jdbc:oracle:thin:@"+prop.getProperty("hostname")+":"+prop.getProperty("port")+":"+prop.getProperty("service"), "asimonc", "asimon","oracle.jdbc.OracleDriver")
}
public List executeSelection(String query) {
List result = []
sql.eachRow(query) {
result << [ it.id, it.name, it.description, it.active, it.release_date ]
}
result
}
public void executeInsert( GString query ) {
sql.execute( query )
}
public void executeUpdation( GString query ) {
sql.executeUpdate( query )
}
public int executeSelectMax( String query ) {
sql.firstRow(query)?.max ?: 0
}
}
插入:
pinfo.executeInsert( "insert into productinfo(ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE) values (${max+1}, $name, $desc, ${'A'}, $date )" )
正如你所看到的。。。您的许多代码只是简单地将东西包装在groovy.sql.sql
类中如何:
import groovy.sql.Sql
public class ProductInfo {
ReadProperty prop
def sql
public ProductInfo() {
prop=ReadProperty.getInstance("db")
sql = Sql.newInstance( "jdbc:oracle:thin:@"+prop.getProperty("hostname")+":"+prop.getProperty("port")+":"+prop.getProperty("service"), "asimonc", "asimon","oracle.jdbc.OracleDriver")
}
public List executeSelection(String query) {
List result = []
sql.eachRow(query) {
result << [ it.id, it.name, it.description, it.active, it.release_date ]
}
result
}
public void executeInsert( GString query ) {
sql.execute( query )
}
public void executeUpdation( GString query ) {
sql.executeUpdate( query )
}
public int executeSelectMax( String query ) {
sql.firstRow(query)?.max ?: 0
}
}
插入:
pinfo.executeInsert( "insert into productinfo(ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE) values (${max+1}, $name, $desc, ${'A'}, $date )" )
正如你所看到的。。。您的许多代码只是简单地将东西包装在
groovy.sql.sql
类中谢谢您的回复。。如果我使用jsp页面发出这些查询,会怎么样?它还能用吗?同样在您的executeSelection
方法it.id
,it.name
。。。都是硬编码的。。如果我试图执行其他一些select查询呢?不,因为JSP不知道GString。也许这一海量的信息片段本该成为问题?我要警告您,如果JSP中直接存在SQL,您可能需要重新思考。。。表示层中的数据库调用通常是一件非常糟糕的事情:-/那么如何提供绑定参数而不是硬编码?您还可以建议,除了直接从jsp使用SQL之外,我应该如何在我的webapp中使用SQL?编写某种控制器类,其中包含与您希望执行的操作(添加用户、更新字段等)匹配的方法,然后从jsp调用这些方法。否则,当您的代码库中的所有JSP中都存在一些SQL时,您将面临一场维护噩梦。。。对于小事情来说,这没问题,但如果它增长了,你会感到非常痛苦…K1问题解决了:)现在executeSelection
总是从一个Oracle表执行查询,如果我想执行一个从另一个Oracle表获取数据的查询呢?我是否总是需要为每个select query
编写不同的函数,因为it.id,it.name…
已在函数中指定感谢您的回复。。如果我使用jsp页面发出这些查询,会怎么样?它还能用吗?同样在您的executeSelection
方法it.id
,it.name
。。。都是硬编码的。。如果我试图执行其他一些select查询呢?不,因为JSP不知道GString。也许这一海量的信息片段本该成为问题?我要警告您,如果JSP中直接存在SQL,您可能需要重新思考。。。表示层中的数据库调用通常是一件非常糟糕的事情:-/那么如何提供绑定参数而不是硬编码?您还可以建议,除了直接从jsp使用SQL之外,我应该如何在我的webapp中使用SQL?编写某种控制器类,其中包含与您希望执行的操作(添加用户、更新字段等)匹配的方法,然后从jsp调用这些方法。否则,当您的代码库中的所有JSP中都存在一些SQL时,您将面临一场维护噩梦。。。对于小事情来说,这没问题,但如果它增长了,你会感到非常痛苦…K1问题解决了:)现在executeSelection
总是从一个Oracle表执行查询,如果我想执行一个从另一个Oracle表获取数据的查询呢?我是否总是需要为每个select query
编写不同的函数,因为it.id,it.name…
已在函数中指定