JOptionPane.showMessageDialog(null, " 登陆成功","提示",JOptionPane.INFORMATION_MESSAGE)
}
else{
JOptionPane.showMessageDialog(null, " 登陆失败","提示",JOptionPane.INFORMATION_MESSAGE)
}
问题可能出在这里:你的v2没有初始化就使用了,导致这句 v2.add(hang)会出现空指针异常;
而你在后边对v2又进行了初始化:v2 = new Vector()但此时的v2是空的,里面没有数据。
解决方法:
将 v2 = new Vector()这句放到链接数据库前,也就是在使用前进行初始化。
LZ要得是代码,就给楼主代码嘛,对于刚学java的人来说肯定对API看得不是很明白,要有比较明确的例子才可以更好的去理解每一个方法,对于楼主的问题,我想说的,首先你要有一个很明确的思路,首先你要写一个DefaultTableModel,这个model是决定你如何显示这些信息的,比如说,第一行显示姓名,然后显示性别。等等。然后从数据库里获得数据,然后传入到这个model中。其次在你的swing中定义一个table,然后实例化你定义的这个model,然后用table.setMode(DefaultTableModel),把你实例化的那个model传入到table中,这样就会在tabale中显示了你要的结果,至于你说要与数据库连接 *** 纵,这里你就需要加入相关的鼠标listener了,在这个例子中,我给你加入了删除和修改两个 *** 作,就是当对这表格点击鼠标的时候,会出现相应的选择。这你需要用到JPopupMenu, 和JPopupMenu的元素JMenuItem了
首先给你tablemodel的类:
//这个类定义了你如何在表格中显示数据和如何获得表格中的数据,需要把二维数组传入这个类,所以在构造函数中传入了二维数组
public class FriendTableModel extends DefaultTableModel {
private String[] columns = {"学号","姓名","性别","年龄","邮箱"}
private Object a[][]
public FriendTableModel(Object [][] a) {
this.a=a
}
public Object getUserAt(int rowIndex)
{
Object[] u = a[rowIndex]
return u
}
public void removeRow(int row) {
a[row]=null
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object[] u = a[rowIndex]
switch(columnIndex) {
case 0:
return u[0]
case 1:
return u[1]
case 2:
return u[2]
case 3:
return u[3]
case 4:
return u[4]
default:
return ""
}
}
@Override
public int getColumnCount() {
return columns.length
}
@Override
public int getRowCount() {
if (a==null) return 0
return a.length
}
@Override
public boolean isCellEditable(int r, int c) {
return false
}
@Override
public String getColumnName(int columnIndex) {
return columns[columnIndex]
}
}
然后给你主类,这个类中包含了与数据连接,把数据转换二维数组,定义各个 *** 作的listener,等
public class DataFrame extends JFrame implements ActionListener
{
public static void main(String args[])
{
new DataFrame()
}
Connection con
Statement stmt
ResultSet rs
Object a[][]//这里的a[][]就是一个i行j列的表,用来显示数据库中数据用的
Object b[]//从tablemode返回的一行数据, 当你修改数时,向数据库更新的时候,数据从这个对象中获得;
int row//你修改或者要删除的行
int i=0//输据的条数
JTable jTable = null//用来显示表格
JPopupMenu jPopupMenu//用来显示你对表格的 *** 作
private JMenuItem delete//删除 *** 作
private JMenuItem upload//修改 *** 作
Object header[]={"学号","姓名","性别","年龄","邮箱"}//e是一个j列的表头,用来存储字段名称的,比如说上面的"学号","姓名"等字符串
DataFrame()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
}
catch(ClassNotFoundException e)
{
System.out.println("Error:"+e)
}
try{
con=DriverManager.getConnection("jdbc:odbc:mySql","sa","123")
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
rs=stmt.executeQuery("select * from student")
while(rs.next())//把数据库数据写入二维数组
{
a[i][0]=rs.getInt(1)
a[i][1]=rs.getString(2)
a[i][2]=rs.getString(3)
a[i][3]=rs.getInt(4)
a[i][4]=rs.getString(5)
i++
}
}
catch(SQLException e)
{
System.out.println("SqlError:"+e)
}
jTable = new JTable()
jTable.addMouseListener(new inMouseEven())//给鼠标定义事件,就是你点击鼠标的时候,会发生的事情
jTable.setShowGrid(false)
jPopupMenu = new JPopupMenu()
delete = new JMenuItem()
delete.setText("删除")
delete.addMouseListener(new Delete_mouseAdapter())//给点击删除时增加事件
upload = new JMenuItem()
upload.setText("修改")
upload.addMouseListener(new Uoload_mouseAdapter())//给点击更新时增加事件
jPopupMenu.add(delete)
jPopupMenu.add(upload)
FriendTableModel ftm = new FriendTableModel(a)//实例化tablemodel,把二维数组传进去
if (ftm.getRowCount() >0) {
jTable.setModel(ftm)//把Tablemodel传入table中
}
Container con=getContentPane()
getContentPane().add(new JScrollPane(jTable),BorderLayout.CENTER)
setSize(400,300)
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0)
}
})
setVisible(true)
validate()
}
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.")
}
//当你点击表格中的一行,出现选项,让你选择具体 *** 作,此处是点击鼠标事件的具体代码
private class inMouseEven extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() <1) {
return
}
row = jTable.getSelectedRow()//返回你点击的行数
if (row >= 0) {
FriendTableModel ftm =(FriendTableModel) jTable.getModel()
b= ftm.getUserAt(row )//返回此行的数据
jPopupMenu.show(DataFrame.this, e.getX() + 160, e.getY() + 75)//出现 *** 作选项
}
}
}
//删除 *** 作的listenr,对应的code
private class Delete_mouseAdapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
try {
String sql = "delete from **where id = " + b[0]//此处b[]是上面当你点击鼠标是返回的那一行数据,b[]中对应的是表格中一行数据。
stmt.executeQuery(sql)
FriendTableModel ftm =(FriendTableModel) jTable.getModel()
ftm.removeRows(0, row )
jTable.updateUI()
} catch (SQLException ex) {
Logger.getLogger(DataFrame.class.getName()).log(Level.SEVERE, null, ex)
}
}
}
//更新 *** 作对应的code
private class Uoload_mouseAdapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
String sql ="UPDATE Student SET Address = %s, City = %s WHERE id = %s" %b[1],b[2],b[0]...//这里sql自己写,就是更新所有的数据,新数据从b[...]中获得
stmt.executeQuery(sql)
}
}
}
其中一些sql语句没有给你写出,这个你照着你的数据库写,还有数据库的链接你需要改一下,上面的代码没有经过测试,因为我没有链接数据库,但是整体思路就应该是这样,对应你的具体要求,修改代码,我想应该可以运行起来的,你需要去理解这些代码,然后写出sql语句,给出正确的数据库配置,修改其中可能的错误。
所有代码都是亲手写的,希望对刚接触java的你有用。
如果你从中得到帮助,记得肯定我的劳动,给我分哦。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)