openbravo里用自己的sqlc框架根据数据库表生成代码。个人感觉一般,没有hibernate用着舒服。下面做个小例子。
先建一个表叫做 javaerp 里面放两个字段id 和 name. 数据类型无所谓,演示而已。
java测试类代码:
package cn.javaerp.ob.test;
import java.io.File;
import java.sql.SQLException;
import org.apache.log4j.PropertyConfigurator;
import org.apache.xerces.parsers.SAXParser;
import org.openbravo.data.Sqlc;
import org.openbravo.utils.DirFilter;
import org.xml.sax.XMLReader;
public class TestSQLC {
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
//配置文件
final String property_file = "config/Openbravo.properties";
//
PropertyConfigurator.configure("log4j.lcf");
final Sqlc sqlc = new Sqlc();
XMLReader parser;
parser = new SAXParser();
//
parser.setContentHandler(sqlc);
sqlc.readProperties(property_file);
//xsql文件搜索目录
final String dir = "javaerp-test";
final File path = new File(dir);
//生成java代码的目录
final File fileFin = new File(dir);
//文件遍历时候的过滤器
final String strFilter = ".xsql";
DirFilter dirFilter = new DirFilter(strFilter);
sqlc.connect(property_file);
//
Sqlc.listDir(path, true, dirFilter, sqlc, parser, strFilter, fileFin,
true, "", 0);
sqlc.closeConnection();
}
}
在目录 javaerp-test 里新建一个xsql文件 例如: TestSQLC.xsql 内容如下
SELECT * FROM javaerp
运行 TestSQLC 类:
没报错的话去javaerp-test 里查看一下, 是不是生成了一个 TestSQLC.java 文件 内容如:
//Sqlc generated V1.O00-1
package cn.javaerp.ob.test;
import java.sql.*;
import org.apache.log4j.Logger;
import javax.servlet.ServletException;
import org.openbravo.data.FieldProvider;
import org.openbravo.database.ConnectionProvider;
import org.openbravo.data.UtilSql;
import java.util.*;
public class TestSQLC implements FieldProvider {
static Logger log4j = Logger.getLogger(TestSQLC.class);
private String InitRecordNumber="0";
public String id;
public String name;
public String getInitRecordNumber() {
return InitRecordNumber;
}
public String getField(String fieldName) {
if (fieldName.equalsIgnoreCase("id"))
return id;
else if (fieldName.equalsIgnoreCase("name"))
return name;
else {
log4j.debug("Field does not exist: " + fieldName);
return null;
}
}
public static TestSQLC[] select(ConnectionProvider connectionProvider) throws ServletException {
return select(connectionProvider, 0, 0);
}
public static TestSQLC[] select(ConnectionProvider
connectionProvider, int firstRegister, int numberRegisters) throws
ServletException {
String strSql = "";
strSql = strSql +
" SELECT * FROM javaerp";
ResultSet result;
Vector vector = new Vector(0);
PreparedStatement st = null;
try {
st = connectionProvider.getPreparedStatement(strSql);
result = st.executeQuery();
long countRecord = 0;
long countRecordSkip = 1;
boolean continueResult = true;
while(countRecordSkip < firstRegister && continueResult) {
continueResult = result.next();
countRecordSkip++;
}
while(continueResult && result.next()) {
countRecord++;
TestSQLC objectTestSQLC = new TestSQLC();
objectTestSQLC.id = UtilSql.getValue(result, "id");
objectTestSQLC.name = UtilSql.getValue(result, "name");
objectTestSQLC.InitRecordNumber = Integer.toString(firstRegister);
vector.addElement(objectTestSQLC);
if (countRecord >= numberRegisters && numberRegisters != 0) {
continueResult = false;
}
}
result.close();
} catch(SQLException e){
log4j.error("SQL error in query: " + strSql + "Exception:"+ e);
throw new ServletException("@CODE=" + Integer.toString(e.getErrorCode()) + "@" + e.getMessage());
} catch(Exception ex){
log4j.error("Exception in query: " + strSql + "Exception:"+ ex);
throw new ServletException("@CODE=@" + ex.getMessage());
} finally {
try {
connectionProvider.releasePreparedStatement(st);
} catch(Exception ignore){
ignore.printStackTrace();
}
}
TestSQLC objectTestSQLC[] = new TestSQLC[vector.size()];
vector.copyInto(objectTestSQLC);
return(objectTestSQLC);
}
}
简单的对表的操作做了一个封装。 听人说sqlc要转成hibernate了。我也觉得没有hibernate来的自然。
阅读(621) | 评论(0) | 转发(0) |