Java 将数据库数据显示到JTable中 公共类d7Table扩展JFrame{ 字符串dbName=“mydb”; 字符串bdUser=“root”; 字符串dbPassword=“2323”; String dbUrl=“jdbc:mysql://localhost/mydb"; 连接con=null; PreparedStatement stm=null; ResultSet res=null; 公共JTable表; 公共d7Table(){ 试一试{ con=DriverManager.getConnection(dbUrl、bdUser、dbPassword); System.out.println(“成功连接到数据库!”); res=stm.executeQuery(“从mytable中选择*); table=新的JTable(myTableModel(res)); showMessageDialog(null,新的JScrollPane(表)); }catch(SQLException-ex){ System.out.println(“无法连接到数据库”); } 添加(新的JScrollPane(表),BorderLayout.CENTER); 此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 这个。设置大小(800600); 此设置位置(300,60); 此.setVisible(true); } 公共静态DefaultTableModel myTableModel(结果集rs)引发SQLException{ ResultSetMetaData=(ResultSetMetaData)rs.getMetaData(); int columnsCount=metadata.getColumnCount(); 向量列名称=新向量(); for(int i=1;i
我的错误:Java 将数据库数据显示到JTable中 公共类d7Table扩展JFrame{ 字符串dbName=“mydb”; 字符串bdUser=“root”; 字符串dbPassword=“2323”; String dbUrl=“jdbc:mysql://localhost/mydb"; 连接con=null; PreparedStatement stm=null; ResultSet res=null; 公共JTable表; 公共d7Table(){ 试一试{ con=DriverManager.getConnection(dbUrl、bdUser、dbPassword); System.out.println(“成功连接到数据库!”); res=stm.executeQuery(“从mytable中选择*); table=新的JTable(myTableModel(res)); showMessageDialog(null,新的JScrollPane(表)); }catch(SQLException-ex){ System.out.println(“无法连接到数据库”); } 添加(新的JScrollPane(表),BorderLayout.CENTER); 此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 这个。设置大小(800600); 此设置位置(300,60); 此.setVisible(true); } 公共静态DefaultTableModel myTableModel(结果集rs)引发SQLException{ ResultSetMetaData=(ResultSetMetaData)rs.getMetaData(); int columnsCount=metadata.getColumnCount(); 向量列名称=新向量(); for(int i=1;i,java,swing,jdbc,jtable,Java,Swing,Jdbc,Jtable,我的错误: public class d7Table extends JFrame { String dbName = "mydb"; String bdUser = "root"; String dbPassword = "2323"; String dbUrl = "jdbc:mysql://localhost/mydb"; Connection con = null; PreparedStatement stm = null; Re
public class d7Table extends JFrame {
String dbName = "mydb";
String bdUser = "root";
String dbPassword = "2323";
String dbUrl = "jdbc:mysql://localhost/mydb";
Connection con = null;
PreparedStatement stm = null;
ResultSet res = null;
public JTable table;
public d7Table() {
try {
con = DriverManager.getConnection(dbUrl, bdUser, dbPassword);
System.out.println("Connected to database successfully!");
res = stm.executeQuery("select * from mytable");
table = new JTable(myTableModel(res));
JOptionPane.showMessageDialog(null, new JScrollPane(table));
} catch (SQLException ex) {
System.out.println("Could not connect to database");
}
add(new JScrollPane(table), BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800, 600);
this.setLocation(300, 60);
this.setVisible(true);
}
public static DefaultTableModel myTableModel(ResultSet rs) throws SQLException {
ResultSetMetaData metadata = (ResultSetMetaData) rs.getMetaData();
int columnsCount = metadata.getColumnCount();
Vector<String> columnNames = new Vector<>();
for (int i = 1; i < columnsCount; i++) {
columnNames.add(metadata.getColumnName(i));
}
Vector<Object> data = new Vector<>();
while (rs.next()) {
Vector<Object> eachLine = new Vector<>();
for (int i = 1; i < columnsCount; i++) {
eachLine.add(rs.getObject(i));
}
data.add(eachLine);
}
return new DefaultTableModel(data, columnNames);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new d7Table();
}
});
}
}
已成功连接到数据库!
线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常
在JDBCtest.d7Table.(d7Table.java:33)//参考res=stm.execute。。。一行
在JDBCtest.d7Table$1.run(d7Table.java:73)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中
...
在这一行
Connected to database successfully!
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at JDBCtest.d7Table.<init>(d7Table.java:33) // refer to res =stm.execute... Row
at JDBCtest.d7Table$1.run(d7Table.java:73)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
...
stm
变量仍然是null
,导致NullPointerException
。你从未初始化过它
创建PreparedStatement
的正确过程是在连接
对象上调用preparest陈述
但是你没有绑定变量;这里只需要一个语句
。将stm
声明为语句
,连接后执行以下操作:
res = stm.executeQuery("select * from mytable");
然后,您可以使用语句执行查询,因为您已经有了这一行:
stm = con.createStatement();
在查询变量stm
之前,您忘记了获取该变量中的语句。使用以下代码执行此操作:
res = stm.executeQuery("select * from mytable");
只是一个附带的问题:你用的是哪个IDE?@reporter我用的是Netbeans我不熟悉Netbeans,不过我想肯定还有一种调试方法(我不想伤害你)。@reporter我的问题解决了,谢谢大家的关注……我知道问题已经解决了。;-)我这样问是因为这是一个常见的错误,通过调试,您可以自己找出错误。正如我说的,我不想伤害你
stm = con.createStatement();