Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82869
  • 博文数量: 23
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-22 11:13
文章分类
文章存档

2011年(1)

2009年(22)

我的朋友

分类:

2009-06-24 16:38:51

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) |
给主人留下些什么吧!~~