我有一套表
因为数据实在太多,按类别分成多套表
不知道表的名字,表是根据文件解析生成的
如:
文件有3个:  s0.txt,s1.txt,s2.txt
生成3个表  : s0user, s1user, s2user
3个表的列都是一样的,这些表名我要从一个主表里查询出来,
事先是不知道的
大家帮写个例子,谢谢拉

解决方案 »

  1.   

    不难吧  List list= .. " from maintable" ;
     for (int i=0;i<list.size();i++)
    {
    Maintable mt=(Maintable ) list.get(i);
    // jdbc的方式查询
        rs=stmt.execute("select * from "+mt.getTableName+ " ");
    }
      

  2.   

    kingofworl(良辰美景虚度) 我要用hib查询,不知道怎么写HBM文件,写个最简单的例子好吗
    要用hsql查询,帮忙
      

  3.   

    LZ你连HBM都不会写,你还用HIBERNATE?
      

  4.   

    LZ您要什么例子  是写HIBERNATE的例子还是查询的例子
      

  5.   

    首先写一个hibernate.cfg.xml  //我随便在机器里面找了一个
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration> <session-factory>
    <property name="connection.username">root</property>
    <property name="connection.url">
    jdbc:mysql://127.0.0.1:3306/xizhiyao
    </property>
    <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>
    <property name="myeclipse.connection.profile">
    LocalMysql
    </property>
    <property name="connection.password">19820221</property>
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>
    <property name="show_sql">true</property>
    <mapping resource="mytest/Lesson.hbm.xml" />
    <mapping resource="mytest/Teacher.hbm.xml" /> </session-factory></hibernate-configuration>
    根据你的主表写一个 POJO类
    public class maintable implements java.io.Serializable {
        // Fields    我就是举例哦
         private Integer mainId;
         private String tableName;
         set get 方法省略
    }
    再写一个映射类 maintable.hbm.xml
    <hibernate-mapping>
        <class name="*.*.maintable " table="maintable ">
            <id name="mainId" type="java.lang.Integer">
                <column name="maintable_id" />
                <generator class="native" />
            </id>
            <property name="tableName" type="java.lang.String">
                <column name="table_name" length="10" />
            </property>  
        </class>
    </hibernate-mapping>
    封装一个HibernateSessionFactory类用来获得session
    public class HibernateSessionFactory {
        public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
    if (sessionFactory == null) {
    rebuildSessionFactory();
    }
    session = (sessionFactory != null) ? sessionFactory.openSession(): null;
    threadLocal.set(session);
    }        return session;
        }
    }//网上很多例子  要是LZ用myeclipse的话 这些都是myeclipase自动生成的
    使用
    Session session=HibernateSessionFactory.getSession();
    Transaction tx=session.beginTransaction();
    Query query = session.createQuery("from maintable");
    List list = query.list();
    String[] tablename = new String[list.size()];
     for (int i=0;i<list.size();i++)
    {
    mintable mt=(Maintable ) list.get(i);
        tablename[i] = mt.getTableName();//获得了存在主表中的名字 可以用与以后查询使用
    }
      

  6.   

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse - Hibernate Tools
    -->
    <hibernate-mapping>  //映射开始
        <class name="com.cochance.audit.model.Auditthrowdaylightonsth"   //映射类的包类名
    table="AUDITTHROWDAYLIGHTONSTH" schema="CO_CHANCE"> //数据库的相应映射
            <id name="audthrowsthid" type="java.lang.Long">  //主键
                <column name="AUDTHROWSTHID"/>  //主键对应数据库列
                <generator class="sequence" />  //主键生成方式 (我这里是Oracl序列生成方式)
            </id>
            <property name="name" type="java.lang.String">  //映射类的属性名
                <column name="NAME" length="100" />        //对应数据库字段名
            </property>
            <property name="year" type="java.util.Date">
                <column name="YEAR" length="7" />
            </property>
        </class>
    </hibernate-mapping> //映射结束这是hibernate 映射文件的大概方法!还可以 控制 一对多,多对一,多对多等方式,但很麻烦,也可向上面介绍的简单映射,,其他自己程序控制!
      

  7.   

    看来200分不好得呀
    one to one 举例有 Teacher (保存TEACHER信息) TeacherCard (保存teacher的一些卡号等唯一信息的比如身份证)  TeacherCard 根据Teacher生成
    首先在Teacher POJO中加入TeacherCard 字段(set get )  然后在TeacherCard POJO中加入一个Teacher字段 同样 (set get)
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    <hibernate-mapping package="org.beans">    <class name="Teacher" table="teacher">
            <id name="id" column="id" type="java.lang.Integer">
                <generator class="native"/>
            </id>
    <property name="name" column="name" type="java.lang.String"  not- null="true" />
            <property name="address" column="address" type="java.lang.String" />
            <one-to-one name="teachercard" class="org.beans.Teachercard" cascade="all">
            </one-to-one>
    <!--one to one 设定与设定property 是一样的 cascade表示控制权 -->
        </class>   
    </hibernate-mapping><?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    <hibernate-mapping package="org.beans">
        <class name="Teachercard" table="teachercard">
            <id name="id" column="id" type="java.lang.Integer">
                <generator class="foreign">
                 <param name="property">teacher</param>
                </generator>
            </id>
    <!--利用外键生成 Teachercard的主键 --> 
            <property name="cardid" column="cardid" type="java.lang.Integer" />
            <one-to-one name="teacher" class="org.beans.Teacher"></one-to-one>
        </class>   
    </hibernate-mapping>
    使用
    Teachercard tc = new Teachercard();
    Teacher t = new Teacher();
    tc.setTeacher(t); t.setTeachercard(tc);
    其余属性添加剩率
    session.save(t);//cascade设置为ALL所以 Teachercard的插入也完成 查询时同理One to Many(可以为单向 双向 我说下双向的)
    举例 还是 Teacher 可以有多个Lesson
    在Teacher 中加入private Set lessons = new HashSet(); (SET GET)
    在Lsson 中加入private Teacher teacher = new Teacher();(SET GET)
    HBM设置 只需要增加  剩下都是一样的
    teacher.nbm.xml
            <set name="lessons" table="lesson" inverse="true" >
             <key column="lesson_teacherid"></key>
             <one-to-many class="org.beans.Lesson"/>
            </set>
    lesson.hbm.xml
    <many-to-one name="teacher" class="org.beans.Teacher" column="lesson_teacherid">
    </many-to-one>
    使用与 
    Teacher t = new Teacher(); Lesson l = new Lesson();
    t.getLessons().add(l);//这里比较特别 
    l.setTeacher(t);
    session.save(t);Many to Many 
    复杂一些 需要建立一个中间表 把需要多对多关联的两张表主键保存在 中间表中
    举例 customers 和corder
    分别在两给POJO类中加入 SET与ONE TO MANY 时一样 省略
    customers .hbm.xml中<set name="corders" table="cu_co_table" inverse="true">
    <key column="customer_id"></key>
    <many-to-many class="org.hibernate.beans.Corder" column="order_id"></many-to-many>
    </set>corders.hbm.xml中
    <set name="customers" table="cu_co_table"
    cascade="save-update"
    inverse="false">
    <key column="order_id"></key>
    <many-to-many class="org.hibernate.beans.Customer" column="customer_id">
    </many-to-many>
    </set>
    使用与 one to many相似 只是两个都是 SET了