我正在开发一个应用程序,用于生成某些拨款的受益人的数据;所以我有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
。我是怎么做到的?
答案 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;
}
}
然后从数据库中检索信息并将其存储为List
个Person
个对象。
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