2015-08-18 52 views
0

我想從我的數據庫中獲取一個表來填充。我跟着一個教程,我的代碼顯示在下面,但我得到這個錯誤,不知道爲什麼。在我的數據庫我的第一個名字,姓氏,地址,城市,州,郵編「不知道,如果需要此信息來幫助我與我的問題在java中顯示數據庫表

可能有人請幫助

感謝你在先進的你的幫助。

package medicalrecords; 

import java.awt.*; 
import java.sql.*; 
import java.util.*; 
import javax.swing.*; 

public class TableFromDatabase extends JPanel { 
private Connection conexao = null; 

public TableFromDatabase() { 
Vector columnNames = new Vector(); 
Vector data = new Vector(); 

try { 
     // Connect to an Access Database 
     conexao = DriverManager.getConnection("jdbc:derby://" + "localhost" 
       + ":1527/Medical Records", "root", "password"); 



     // Read data from a table 
     String sql = "select * from SD2799.PATIENTRECORDS"; 
     try (Statement stmt = conexao.createStatement(); 
     ResultSet rs = stmt.executeQuery(sql)) { 
      ResultSetMetaData md = rs.getMetaData(); 
      int columns = md.getColumnCount(); 

      // Get column names 
      for (int i = 1; i <= columns; i++) { 
       columnNames.addElement(md.getColumnName(i)); 
      } 

      // Get row data 
      while (rs.next()) { 
       Vector row = new Vector(columns); 

       for (int i = 1; i <= columns; i++) { 
        row.addElement(rs.getObject(i)); 
       } 

       data.addElement(row); 
      } 

     } 
     conexao.close(); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 

    // Create table with database data 
    JTable table = new JTable(data, columnNames) { 
     @Override 
     public Class getColumnClass(int column) { 
      for (int row = 0; row < getRowCount(); row++) { 
       Object o = getValueAt(row, column); 

       if (o != null) { 
        return o.getClass(); 
       } 
      } 

      return Object.class; 
     } 
    }; 

    JScrollPane scrollPane = new JScrollPane(table); 
    add(scrollPane); 

    JPanel buttonPanel = new JPanel(); 
    add(buttonPanel, BorderLayout.SOUTH); 
} 

public static void main(String[] args) { 

    javax.swing.SwingUtilities.invokeLater(() -> { 
     JFrame frame = new JFrame("Patient Records"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Create and set up the content pane. 
     TableFromDatabase newContentPane = new TableFromDatabase(); 
     newContentPane.setOpaque(true); //content panes must be opaque 
     frame.setContentPane(newContentPane); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    }); 

    } 
} 
+1

什麼是錯誤? – Reimeus

+0

注意:C:\ Users \ student \ Desktop \ CapstoneTuesday_SD2799 \ MedicalRecords \ src \ medicalrecords \ TableFromDatabase.java使用未經檢查或不安全的操作。 注意:使用-Xlint重新編譯:取消選中以獲取詳細信息。 Opps lol忘記了那部分 – Jessica

回答

2

你的消息「使用未經檢查或不安全的操作。注意:重新編譯-Xlint:未經檢查的詳細信息」是不是一個錯誤,但它是一個警告。 Vector類是通用的(泛型被添加到1.5中的Java),這意味着它需要一個類型參數。在這裏,它意味着它可以容納的對象的類型。

如果您按照警告所示使用命令行選項「-Xlint:unchecked」重新編譯,編譯器會爲您提供有關警告的更多詳細信息,包括違規行。

您沒有提供任何您Vector s的類型參數,所以他們,這意味着沒有類型參數供給。編譯器警告您,您正在使用原始類型,並且您的類型安全處於危險之中。

您可以提供適當的類型參數以消除警告。在TableFromDatabase構造,朝上方:

Vector<String> columnNames = new Vector<String>(); 
Vector<Vector<Object>> data = new Vector<Vector<Object>>(); 

,後來在同一個構造函數:

Vector<Object> row = new Vector<Object>(columns); 

然而,VectorArrayList(及其List接口)用Java 1.2取代。事實上,Vector已經改裝,然後實施新的 - 然後List接口。它看起來並不像你需要Vector的線程安全,所以建議使用ArrayList來代替。

List<String> columnNames = new ArrayList<String>(); 
List<Vector<Object>> data = new ArrayList<List<Object>>(); 

List<Object> row = new ArrayList<Object>(columns); 

從Java 1.7中,你可以使用「鑽石經營者」,並刪除賦值運算符右側的類型參數,讓Java的推斷正確的類型,例如:

List<String> columnNames = new ArrayList<>(); 
List<Vector<Object>> data = new ArrayList<>(); 

List<Object> row = new ArrayList<>(columns);