import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.util.*;public class JavaAccess
{
Vector rows;       //表行值
Vector columnHeads;// 表列名
JTable tables;
JScrollPane scrollpanes;  //滚动条
Connection conn;  //连接数据库对象
Statement state;  //对数据库进行操作
ResultSet rs;  //对数据库操作的结果

public JavaAccess() throws Exception
{
                  Frame frames=new Frame("JTable显示数据库表");//创建窗口
frames.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{
System.out.println(""+e);
}

try{
//下面的路径可设绝对路径 和相对路径
//String str="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=Connection.mdb";
String str="jdbc:odbc:javaconn";//这里javaconn是创建数据源的名称
conn=DriverManager.getConnection(str,"","");//创建连接
                       state=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from java"; //数据库语句
rs=state.executeQuery(sql);//执行语句返回到结果集对象

if(!(rs.next()))//判断数据库中是否有内容
{
   JOptionPane.showMessageDialog(null, "结果集中无记录", "无记录",JOptionPane.INFORMATION_MESSAGE);
}
          ResultSetMetaData rsmd=rs.getMetaData();//获得结果集列属性值
  rows=new Vector();
columnHeads=new Vector();
for(int i=1;i<=rsmd.getColumnCount();i++)
{
    columnHeads.addElement(rsmd.getColumnName(i));//添加列名
}
do{
     rows.addElement(getNextRow(rs,rsmd));//添加表行值
}while(rs.next());
                            tables=new JTable(rows,columnHeads);
tables.setSize(new Dimension(383,81));//设置表的大小
//关闭
rs.close();
state.close();
conn.close();

//下面设置窗口的属性
  scrollpanes=new JScrollPane(tables);
         frames.add(scrollpanes,BorderLayout.NORTH);
  frames.setVisible(true);
frames.setSize(400,400);
frames.validate();
} catch(SQLException e)
{
System.out.println("错误信息:"+e.getMessage());
e.printStackTrace();
}

}
//取得表行的值方法
private Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd) throws SQLException
{
Vector currentRow=new Vector();
for(int i=1;i<=rsmd.getColumnCount();i++)
{
currentRow.addElement(rs.getString(i));
}
return currentRow;
}
public static void main(String args[]) throws Exception
{
new JavaAccess();
}
}
各位大虾   我想问一下,在这段代码的基础上,通过按钮对数据库进行增删改  怎么实现代码?

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    import java.util.*;public class JavaAccess
    {
    Vector rows;       //表行值
    Vector columnHeads;// 表列名
    JTable tables;
    JScrollPane scrollpanes;  //滚动条
    Connection conn;  //连接数据库对象
    Statement state;  //对数据库进行操作
    ResultSet rs;  //对数据库操作的结果

    public JavaAccess() throws Exception
    {
                    Frame frames=new Frame("JTable显示数据库表");//创建窗口
    frames.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException e)
    {
    System.out.println(""+e);
    }

    try{
    //下面的路径可设绝对路径 和相对路径
    //String str="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=Connection.mdb";
    String str="jdbc:odbc:javaconn";//这里javaconn是创建数据源的名称
    conn=DriverManager.getConnection(str,"","");//创建连接
                                state=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from java"; //数据库语句
    rs=state.executeQuery(sql);//执行语句返回到结果集对象

    if(!(rs.next()))//判断数据库中是否有内容
    {
       JOptionPane.showMessageDialog(null, "结果集中无记录", "无记录",JOptionPane.INFORMATION_MESSAGE);
    }
            ResultSetMetaData rsmd=rs.getMetaData();//获得结果集列属性值
      rows=new Vector();
    columnHeads=new Vector();
    for(int i=1;i<=rsmd.getColumnCount();i++)
    {
        columnHeads.addElement(rsmd.getColumnName(i));//添加列名
    }
    do{
         rows.addElement(getNextRow(rs,rsmd));//添加表行值
    }while(rs.next());
                            tables=new JTable(rows,columnHeads);
    tables.setSize(new Dimension(383,81));//设置表的大小
    //关闭
    rs.close();
    state.close();
    conn.close();

    //下面设置窗口的属性
    scrollpanes=new JScrollPane(tables);
      frames.add(scrollpanes,BorderLayout.NORTH);
    frames.setVisible(true);
    frames.setSize(400,400);
    frames.validate();
    } catch(SQLException e)
    {
    System.out.println("错误信息:"+e.getMessage());
    e.printStackTrace();
    }

    }
    //取得表行的值方法
    private Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd) throws SQLException
    {
    Vector currentRow=new Vector();
    for(int i=1;i<=rsmd.getColumnCount();i++)
    {
    currentRow.addElement(rs.getString(i));
    }
    return currentRow;
    }
    public static void main(String args[]) throws Exception
    {
    new JavaAccess();
    }
    }再顶一下先
      

  2.   

    ,通过按钮对数据库进行增删改  怎么实现代码?你要明白一下如果 用 listener
      

  3.   

    那个我知道用ActionListener   我也写过  但不知道为什么老是语法错误  实现不了.
    能帮我写写那部分功能吗?
      

  4.   

    那个我知道用ActionListener  我也写过  但不知道为什么老是语法错误  实现不了. 
    能帮我写写那部分功能吗?语法错...你把代码帖下,并帖下哪里报错,把报错也写出来, 我不愿写程序
      

  5.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    import java.util.*;public class JavaAccess
    {
    Vector rows;       //表行值
    Vector columnHeads;// 表列名
    JTable tables;
    JScrollPane scrollpanes;  //滚动条
    Connection conn;  //连接数据库对象
    Statement state;  //对数据库进行操作
    ResultSet rs;  //对数据库操作的结果
    JButton btdel;

    public JavaAccess() throws Exception
    {
        Frame frames=new Frame("JTable显示数据库表");//创建窗口
    frames.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    });
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException e)
    {
    System.out.println(""+e);
    }

    try{
    //下面的路径可设绝对路径 和相对路径
    //String str="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=Connection.mdb";
    String str="jdbc:odbc:javaconn";//这里javaconn是创建数据源的名称
    conn=DriverManager.getConnection(str,"","");//创建连接
          state=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from java"; //数据库语句
    rs=state.executeQuery(sql);//执行语句返回到结果集对象

    if(!(rs.next()))//判断数据库中是否有内容
    {
       JOptionPane.showMessageDialog(null, "结果集中无记录", "无记录",JOptionPane.INFORMATION_MESSAGE);
    }
      ResultSetMetaData rsmd=rs.getMetaData();//获得结果集列属性值
      rows=new Vector();
    columnHeads=new Vector();
    for(int i=1;i<=rsmd.getColumnCount();i++)
    {
        columnHeads.addElement(rsmd.getColumnName(i));//添加列名
    }
    do{
         rows.addElement(getNextRow(rs,rsmd));//添加表行值
    }while(rs.next());
          tables=new JTable(rows,columnHeads);
    tables.setSize(new Dimension(383,81));//设置表的大小
    //关闭
    rs.close();
    state.close();
    conn.close();

    //下面设置窗口的属性
    btdel=new JButton("删除");
    btdel.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    try
    {
    if(tables.getSelectedRow()!=-1)
    {
    String names=(tables.getModel().getValueAt(tables.getSelectedRow(), 0)).toString();
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String str="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=Connection.mdb";
    Connection conn=DriverManager.getConnection(str,"","");
    Statement state=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="delete from java where name='"+names+"'";
    ResultSet rs=state.executeQuery(sql);
    ResultSetMetaData rsmd=rs.getMetaData();
    Vector rows=new Vector();
    Vector columnHeads=new Vector();
    for(int i=1;i<=rsmd.getColumnCount();i++)
    {
        columnHeads.addElement(rsmd.getColumnName(i));//添加列名
    }
    do{
         rows.addElement(getNextRow(rs,rsmd));//添加表行值
    }while(rs.next());
    tables=null;
    tables=new JTable(rows,columnHeads);
          //关闭
    rs.close();
    state.close();
    conn.close();
    }
    }
    catch(Exception es)
    {
    System.out.println(""+es.getMessage());
    }
    }
    });

    scrollpanes=new JScrollPane(tables);
      frames.add(scrollpanes,BorderLayout.NORTH);
      frames.add(btdel,BorderLayout.SOUTH);
    frames.setVisible(true);
    frames.setSize(400,400);
    frames.validate();
    } catch(SQLException e)
    {
    System.out.println("错误信息:"+e.getMessage());
    e.printStackTrace();
    }

    }
    //取得表行的值方法
    private Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd) throws SQLException
    {
    Vector currentRow=new Vector();
    for(int i=1;i<=rsmd.getColumnCount();i++)
    {
    currentRow.addElement(rs.getString(i));
    }
    return currentRow;
    }
    public static void main(String args[]) throws Exception
    {
    new JavaAccess();
    }
    }这个是我大致写的   就是想在jtable中选中行时  点击按钮 那行就删除了  但不知道为什么 实现不了
      

  6.   

     try
    System.out.println("tables.getSelectedRow(): " + tables.getSelectedRow());
    //看下有 row 是多少,
    //另外,你就不能把数据库操作放到一个函数里?
                        {
                            if(tables.getSelectedRow()!=-1)
                            {
                                String names=(tables.getModel().getValueAt(tables.getSelectedRow(), 0)).toString();
                                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                                String str="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=Connection.mdb";
                                Connection conn=DriverManager.getConnection(str,"","");
                                Statement state=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
                                String sql="delete from java where name='"+names+"'";
                                ResultSet rs=state.executeQuery(sql);
                                ResultSetMetaData rsmd=rs.getMetaData();
                                Vector rows=new Vector();
                                Vector columnHeads=new Vector();
                                for(int i=1;i<=rsmd.getColumnCount();i++)
                                {
                                    columnHeads.addElement(rsmd.getColumnName(i));//添加列名
                                }
                                do{
                                     rows.addElement(getNextRow(rs,rsmd));//添加表行值
                                }while(rs.next());
                                tables=null;
                                tables=new JTable(rows,columnHeads);
                          //关闭
                                rs.close();
                                state.close();
                                conn.close();
                            }
                        }
                        catch(Exception es)
                        {
                            System.out.println(""+es.getMessage());
                        }rows.addElement(getNextRow(rs,rsmd));//添加表行值
    //你这行会有用? rs 又不是 selected 的值....