java.sql.SQLException: Column index out of range.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.ResultSetMetaData.getField(ResultSetMetaData.java:407)
at com.mysql.jdbc.ResultSetMetaData.getColumnName(ResultSetMetaData.java:258)
at a.MyFrame.createTablePanel(MyFrame.java:58)
at a.MyFrame.<init>(MyFrame.java:24)
at a.MyFrame.main(MyFrame.java:19)
这是我在MyFrame课程中得到的堆栈跟踪。 这些是代码:
MyFrame.createTablePanel().
public JPanel createTablePanel () {
DefaultTableModel tableModel = new DefaultTableModel();
DB dB = new DB();
dB.connectDB();
ResultSet rs = dB.getData();
try {
ResultSetMetaData rsMD = rs.getMetaData();
String[] arr = new String[rsMD.getColumnCount()];
for (int i = 0; i <= rsMD.getColumnCount(); i++) {
arr[i] = rsMD.getColumnName(i+1);
}
tableModel.setColumnIdentifiers(arr);
while (rs.next()) {
for (int i = 0; i <= rsMD.getColumnCount(); i++) {
arr[i] = rs.getString(i+1);
}
tableModel.addRow(arr);
}
} catch (SQLException e) {
e.printStackTrace();
}
JPanel tablePanel = new JPanel(new BorderLayout(5,5));
JTable table = new JTable(tableModel);
tablePanel.add(new JScrollPane(table), BorderLayout.CENTER);
return tablePanel;
}
它使用DB类与数据库进行通信:
DB Class.
public class DB {
private final String driver = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://localhost:3306/test";
private final String user = "root";
private final String pass = "khjthat";
private final String table = "ungvien";
Statement stmt;
PreparedStatement pstmt;
ResultSet rs;
ResultSetMetaData rsMD;
String str; //Query String.
Connection connection;
public DB() {
}
public void connectDB () {
try {
Class.forName(driver);
System.out.println("Driver Loaded!");
connection = DriverManager.getConnection(url,user,pass);
System.out.println("Connected!");
} catch (ClassNotFoundException e) {
System.out.println("Class Not Found!");
} catch (SQLException e) {
System.out.println("Connection Error!");
}
}
public void showData(ResultSet rs) {
try {
rsMD = rs.getMetaData();
for (int i = 0; i < rsMD.getColumnCount(); i++) {
System.out.printf("\t%-10s ", rsMD.getColumnName(i+1));
}
System.out.println();
while (rs.next()) {
System.out.printf("\t%-10s \t%-10s \t%-10s \t%-10s \n", rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4));
}
} catch (SQLException e) {
}
}
public ResultSet getData() {
str = "select * from " + table + ";";
try {
stmt = connection.createStatement();
rs = stmt.executeQuery(str);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public ResultSet getDataTen(String ten) {
str = "select ten,tuoi,truong,kn from " + table + " where ten = ? " ;
try {
pstmt = connection.prepareStatement(str);
pstmt.setString(1, ten);
rs = pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public void deleteTen (String ten) {
str = "delete from " + table + " where ten = ? ";
try {
pstmt = connection.prepareStatement(str);
pstmt.setString(1, ten);
if (pstmt.executeUpdate() > 0) {
System.out.println("Delete Successful!");
} else {
System.out.println("Delete Error!");
}
} catch (SQLException e) {
System.out.println("Delete Error!");
e.printStackTrace();
}
}
public void insert (UngVien ungVien) {
str = "insert into " + table + " values (?,?,?,?) ";
try {
pstmt = connection.prepareStatement(str);
pstmt.setString(1, ungVien.getTen());
pstmt.setInt(2, ungVien.getTuoi());
pstmt.setString(3, ungVien.getTruong());
pstmt.setInt(4, ungVien.getKn());
if (pstmt.executeUpdate() > 0) {
System.out.println("Insert Successful!");
} else {
System.out.println("Insert Error!");
}
} catch (SQLException e) {
System.out.println("Insert Error!");
e.printStackTrace();
}
}
public void updateTen (String ten, UngVien ungVien) {
str = "update " + table + " set tuoi =?, truong =?, kn =? where ten = ?";
try {
pstmt = connection.prepareStatement(str);
pstmt.setInt(1, ungVien.getTuoi());
pstmt.setString(2, ungVien.getTruong());
pstmt.setInt(3, ungVien.getKn());
pstmt.setString(4, ten);
if (pstmt.executeUpdate() > 0) {
System.out.println("Update Successful!");
} else {
System.out.println("Update Error!");
}
} catch (SQLException e) {
System.out.println("Update Error!");
e.printStackTrace();
}
}
public static void main (String[] args) {
DB dB = new DB();
dB.connectDB();
dB.showData(dB.getData());
}
}
我测试了DB类,一切运行良好。
我今天下午试图调试这个,但我无法理解它是否就在那边:(
我对JAVA很新,我希望这个问题不会打扰你们。
请给我一些技巧:(
非常感谢。
答案 0 :(得分:0)
如用户3145373在评论
中所述来自
for (int i = 0; i <= rsMD.getColumnCount(); i++)
删除等号(=)并执行
for (int i = 0; i < rsMD.getColumnCount(); i++)
答案 1 :(得分:0)
进一步解释上述答案
假设有人要求你给我十个硬币,并将第一枚硬币的计数器设置为零,所以在这种情况下,你要去找他,直到计数达到九。
在这种情况下,您已初始化i = 0
,因此您需要对其进行迭代,直到计数达到totalCount-1
。
或改为
for (int i = 1; i <= rsMD.getColumnCount(); i++)