从两个数据库表中获取结果并在Java中设置它和另一个Jframe?

时间:2016-08-26 14:22:42

标签: java mysql object

我正在开发一个应用程序,用于生成某些拨款的受益人的数据;所以我有DB包含许多表:一个表包含一个人“受益人”(id,姓名,工作等)的信息原则,其他表格“汽车补助金表”,“婚姻补助表”等等。所以这些包含授权信息,授权表中的每一行都有第一个表“受益人”中的人的外键。

我的问题是,当我在数据库中寻找一些受益人时,发现我通过他的“身份证”搜索他所有的补助金。意思是我在两个不同的表格中进行两次搜索;所以我这样做:

 query="SELECT * FROM travailleur WHERE ncompte=?";

   try(PreparedStatement preparedStatement =
    c.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY)){

      preparedStatement.setString(1, vncompte);
    result = preparedStatement.executeQuery();
    /***/

    if(result!=null){
result.last();  
 size = result.getRow();
  result.beforeFirst();  
  System.out.println(size);
ResultSetMetaData resultMeta = result.getMetaData();
int j=0;
String data[][] = new String[size][resultMeta.getColumnCount()];
String vector[] = new String[size];
while(result.next()){
     for(int i = 1; i <= resultMeta.getColumnCount(); i++){
         data[j][i-1]=result.getString(i);
         vector[j]=result.getString(1); 
      }//end for
         j=j+1;

        }//end while
    dat=data;
   v = vector;/*this vector contains id of result*/
     ro=size; /*this value contain the number of result elements*/

  }//end try

 Object dhadj[][]= new Object[0][6]; /*create this table to put the grants of  each person have found by the previous search*/

/*this for boucle to generate all id*/
 for(int i=0;i<ro;i++){
       int d;
       d=Integer.valueOf(v[i]);

        query="SELECT * FROM hadj WHERE id=?";
  try(PreparedStatement preparedStatement = c.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY)){
           System.out.println("doing hadj");
preparedStatement.setInt(1, d);

ResultSet rs = preparedStatement.executeQuery();
 if(rs!=null){
   rs.last();  
  int siz = rs.getRow();
    rs.beforeFirst();  

 ResultSetMetaData rsMeta = rs.getMetaData();
int a=0;
        Object dha[][] = new String[siz][6];

while(rs.next()){
   //  for(int ii = 1; ii <= rsMeta.getColumnCount(); ii++){
         dha[a][0]=rs.getString("id");
         dha[a][1]=rs.getString("idh");
         dha[a][2]=rs.getString("ticket");
         dha[a][3]=rs.getString("montant");
         dha[a][4]=rs.getString("datei");
         dha[a][5]=rs.getString("nombrep");
     // }//end for
         a=a+1;

//do your other per row stuff 
        }//end while
        /*here appendvalue I want to add the result of each id in one big table, but this doesn't work*/
         dhadj= appendValue(dhadj,dha); 

    }else{ dhadj[0][0]=Integer.toString(d);
            for(int ii = 1; ii < 6; ii++){
             dhadj[0][ii]="";  
          }
         }
  }//end try             

     }//end for v

这是对的吗?

我还有第二个问题,就是如何将Object[][]添加到另一个object[][]

我创建了一个Object[][] dhadj=null并在循环中创建了另一个object[][] dha,因此在每个循环结束时,我将dha添加到dhadj 。我是怎么做到的?

1 个答案:

答案 0 :(得分:0)

我没有足够的细节来创建特定于您的问题的解决方案,但我会创建一个您可以使用的模型,我希望它有所帮助。

首先,创建一个类作为容器来存储从数据库中检索的信息:

public class Person{
    public int id;
    public String name;
    public Date date;
    public String value1;

    public Person(int id, String name, Date date, String value){
        this.id = id;
        this.name = name;
        this.date = date;
        this.value1 = value1;
    }
}

然后从数据库中检索信息并将其存储为ListPerson个对象。

List<Person> personsList = new ArrayList<>();
try(Statement st = con.createStatement()){
    try(ResultSet rs = st.executeQuery("SELECT t1.id as id, t1.name as name, t2.date as date, t2.value as value FROM persons as t1 LEFT JOIN values as t2 ON t1.id = t2.id")){
        while(rs.next()){
            personsList.add(new Person(rs.getInt("id"), rs.getString("name"), rs.getDate("date"), rs.getString("value")));
        }
    }
}catch(Exception e){
    e.printStackTrace();
}

SQL语句中的重要部分是LEFT JOIN,它用于一次从两个表中检索数据(匹配这两个表中id列具有相同值的行)

您可以找到有关LEFT JOIN HERE

的更多信息