2015-09-30 1 views
0

Я пытался сделать с помощью Java Регистрация с помощью JoinRowSet, но без успеха, я получаю сообщение об ошибке:я получил ошибку при объединении данных через JoinRowSet

Exception in thread "main" java.sql.SQLException: Match Column not set for join 
at com.sun.rowset.JoinRowSetImpl.addRowSet(JoinRowSetImpl.java:219) 
at joinrowset.JoinRowSet.databaseCheck(JoinRowSet.java:33) 
at joinrowset.JoinRowSet.main(JoinRowSet.java:49) 

Что такое решение этой проблемы ? я не могу найти что-либо в Интернете, поэтому я застрял. Если у вас есть решение, было бы здорово. Thanks

package joinrowset; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import javax.sql.rowset.CachedRowSet; 
import javax.sql.rowset.RowSetProvider; 



public class JoinRowSet { 


    void databaseCheck() throws SQLException, ClassNotFoundException { 


     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     String url="jdbc:sqlserver://localhost:1433;databaseName=Movies;integratedSecurity=true"; 
     Connection c = DriverManager.getConnection(url); 
     Statement s = c.createStatement(); 

     ResultSet rs = s.executeQuery("select FilmName from tblFilm"); 

     CachedRowSet director = RowSetProvider.newFactory().createCachedRowSet(); 
     CachedRowSet film = RowSetProvider.newFactory().createCachedRowSet(); 

     director.populate(s.executeQuery("select DirectorName from tblDirector")); 
     film.populate(s.executeQuery("select FilmName from tblFilm")); 

     javax.sql.rowset.JoinRowSet jrs = RowSetProvider.newFactory().createJoinRowSet(); 
     jrs.addRowSet(director); 
     jrs.addRowSet(film); 

     while(jrs.next()) { 
      for(int i=1; i<=jrs.getMetaData().getColumnCount(); i++) { 

       System.out.println(jrs.getString(i) + "\t"); 
      } 
     } 

    } 


    public static void main(String[] args) throws SQLException, ClassNotFoundException { 

     JoinRowSet instantiate = new JoinRowSet(); 
     instantiate.databaseCheck(); 


    } 
} 

ответ

0

JoinRowSet хочет знать, как присоединиться к вашим данным. Вам нужно установить столбец соответствия. В запросах select DirectorName from tblDirector и select FilmName from tblFilm нет столбца, который можно было бы использовать в качестве столбца соответствия. Думаю, у каждого фильма должен быть режиссер и, возможно, в вашем столе tblDirector вы можете найти ссылки на режиссеров. В этом случае можно переписать код, как

director.populate(s.executeQuery("select DirectorName from tblDirector")); 
film.populate(s.executeQuery("select FilmName, DirectorName from tblFilm")); 
javax.sql.rowset.JoinRowSet jrs = RowSetProvider.newFactory().createJoinRowSet(); 

director.setMatchColumn(1); //position of the column "DirectorName" 
film.setMatchColumn(2);  //position of the column "DirectorName" 

jrs.addRowSet(director); 
jrs.addRowSet(film); 

Не забывайте, что это всего лишь пример, основанный на моем предположении о вашей структуре данных.

+0

Оба столбца (имя директора и имя фильма) находятся в первой позиции таблиц. Ошибка исчезла .... но я думаю, что я не правильно перебирал через JoinRowSet ..... после того, как я сделал то, что вы сказали, нет результата в выходе :(Это код, измененный, как вы сказали Книга, из которой я привел этот пример, может быть устаревшей. Любой пример правильной итерации с помощью набора строк соединения (я предполагаю, что проблема с плохими итерациями может быть проблемой). Итерация такая же, как в моем первоначальном вопросе о этот предмет. –

Смежные вопросы