2012-02-02 5 views
1

에서보기 내가 그것을인지에 대한 저장 프로 시저를 사용하여 자바 코드가 있습니다사용 저장소 저장 프로 시저

ALTER PROCEDURE [dbo].[Search_Rent] 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    select * from SearchRent  
END 

SearchRentsql server

SELECT  dbo.Tbl_Software.ID AS SotwareID, dbo.Tbl_Software.UserID_Rent, dbo.Tbl_Software.Name AS SoftwareName, dbo.Tbl_User.Family, 
         dbo.Tbl_User.Name AS UserName, dbo.Tbl_User.Tel, dbo.Tbl_Software.DataStart, dbo.Tbl_Software.DataFinish, dbo.Tbl_Software.ID_Category 
FROM   dbo.Tbl_Software INNER JOIN 
         dbo.Tbl_User ON dbo.Tbl_Software.UserID_Rent = dbo.Tbl_User.ID 

내 자바 코드에서이다

public class frmRented extends javax.swing.JFrame { 

    /** Creates new form frmRented */ 
    public frmRented() { 
     initComponents(); 
     MyTools.SetCenterLocation(this); 
     DataAccess da = new DataAccess(); 
     try { 
      da.Connect(); 

      //da.rs = da.st.executeQuery("select * from SearchRent"); 
      //da.rs = da.st.executeQuery("{call Search_Rent()}"); 
      CallableStatement cal = da.con.prepareCall("{call Search_Rent()}",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
      da.rs = cal.executeQuery(); 

      da.rs.last(); 
      int rc = da.rs.getRow(); 
      da.rs.beforeFirst(); 
      int cc = 9; 

      String[] header = {"id", "idc", "name", "preamble", "k ", "s", "d", "a","e"}; 
      String[][] data = new String[rc][cc]; 
      int i = 0; 

      while (da.rs.next()) { 
       data[i][0] = da.rs.getString("Tbl_Software.ID"); 
       data[i][1] = da.rs.getString("Tbl_Software.ID_Category"); 
       data[i][2] = da.rs.getString("Tbl_Software.Name"); 
       data[i][3] = da.rs.getString("Tbl_Software.UserID_Rent"); 
       data[i][4] = da.rs.getString("Tbl_User.Name"); 
       data[i][5] = da.rs.getString("Tbl_User.Family"); 
       data[i][6] = da.rs.getString("Tbl_User.Tel"); 
       data[i][7] = da.rs.getString("Tbl_Software.DataStart"); 
       data[i][8] = da.rs.getString("Tbl_Software.DataFinish"); 
       i++; 

      } 
      jTable1 = new JTable(data, header); 
      jScrollPane1.setViewportView(jTable1); 
      cal.close(); 
      da.Disconnect(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 

    } 

하지만이 코드를 실행할 때이 오류가 있습니다 :입니다

com.microsoft.sqlserver.jdbc.SQLServerException: The column name Tbl_Sofware.ID is not valid.

어떻게이 오류를 해결할 수 있습니까?

+0

스택 추적을 제공하거나 오류를 일으키는 행을 알려줄 수 있습니까? 나는 beforeFirst에 대한 호출이라고 생각 하겠지만, 더 많은 정보가 도움이 될 것입니다. –

+0

자바 명명 규칙을 배우고 그들에게 붙이십시오 – kleopatra

+0

'ResultSet.CONCUR_READ_ONLY'을'ResultSet.CONCUR_UPDATABLE'로 변경하십시오 –

답변

0

보기가 올바르게 선언되지 않았습니다. 보기에서 SELECT 문을 단독 방식으로 실행하고 성공하면 결과 문을보기로 감싸려고합니다.

data[i][0] = da.rs.getString("SotwareID"); 
data[i][1] = da.rs.getString("ID_Category"); 
data[i][2] = da.rs.getString("SoftwareName"); 
data[i][3] = da.rs.getString("UserID_Rent"); 
data[i][4] = da.rs.getString("UserName"); 
data[i][5] = da.rs.getString("Family"); 
data[i][6] = da.rs.getString("Tel"); 
data[i][7] = da.rs.getString("DataStart"); 
data[i][8] = da.rs.getString("DataFinish"); 
: 독자를 통해 값을 읽는 동안

또는

당신이 테이블 별칭을 지정하지 않아도, 당신이 당신의보기에서 실제 열 이름을 참조해야 적절한 방법으로 에두고 코드를 교체하고

+0

이 코드에도 동일한 예외가 있습니다 : com.microsoft.sqlserver.jdbc.SQLServerException : 열 이름 ID가 유효하지 않습니다. – hamed

+0

죄송합니다.보기에있는 열의 실제 이름은 언급하지 않았습니다. 업데이트 된 답변. –

+0

ooohhhh, com.microsoft.sqlserver.jdbc.SQLServerException : 열 이름 SoftwareID가 유효하지 않습니다. – hamed

0

CallableStatement cal = da.con.prepareCall("{call Search_Rent()}",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 

CallableStatement cal = da.con.prepareCall("{call Search_Rent()}",); 

난 당신이

da.st = da.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 

는 아무것도되지 않습니다 라인 때문에,이 Statement를 만들고,에 할당 할 필요가 있다고 생각 바꾸기 da.st하지만 사용하지 마십시오. CallableStatement