Ja sam se odlucio za ovaj prvi.
Ovako stoje stvari:
-imam klasu MakeConnection koja ima medotu establish(), disconnect().
-imam klasu koja je napravljena po principu sunovog MyTableModel u kojoj se nalazi Object[][] data = { {}, {}, {} ....}, naravno s podacima unutra.
Podatke s baze pokupljam preko ResultSeta metodom GetUsers() u MakeConnection.
E sad mi nije jasno kako napravim sledece. Da podaci koje pokupim ResultSetom ubacim u Object[][].
imam recimo Object[][] data, i kad ukucam data[1][1] = new Integer(1), on mi javlja NullPointerException.
evo i koda:
Ovo je u MakeConnection klasi
public Object[][] getUsers() {
String query = "SELECT * FROM Users";
int z = 0;
Object[][] data = null;
try {
rs = stmt.executeQuery(query);
while (rs.next()) {
int a = rs.getInt("member_id");
String b = rs.getString("firstname");
String c = rs.getString("lastname");
String d = rs.getString("birthday");
String e = rs.getString("gender");
String f = rs.getString("street");
String g = rs.getString("town");
String h = rs.getString("state");
String i = rs.getString("email");
String j = rs.getString("mobile_phone");
String k = rs.getString("home_phone");
String l = rs.getString("has_payed");
String m = rs.getString("date_added");
data[z][0]= new Integer(a);
data[z][1]= new String(b);
data[z][2]= new String(c);
z++;
}
}catch (SQLException e){
System.out.println("FEHLER" + e);
}
return data;
}
Ovo je u MyUserTableModel klasi
class MyUsersTableModel extends AbstractTableModel {
private boolean DEBUG = false;
private String []columnNames = {"Member ID",
"First Name",
"Last Name",
"Birthday",
"Gender",
"Street",
"Town",
"State",
"Email",
"Mobile Phone",
"Home Phone",
"Has payed",
"Date added"};
Object[][] data = getData();
public Object[][] getData() {
MakeConnection con = new MakeConnection();
con.establish();
return con.getUsers();
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*
* Don't need to implement this method unless your table's
* editable.
*/
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 1) {
return false;
} else {
return true;
}
}
/*
* Don't need to implement this method unless your table's
* data can change.
*/
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}