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();
}
}
各位大虾 我想问一下,在这段代码的基础上,通过按钮对数据库进行增删改 怎么实现代码?
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();
}
}再顶一下先
能帮我写写那部分功能吗?
能帮我写写那部分功能吗?语法错...你把代码帖下,并帖下哪里报错,把报错也写出来, 我不愿写程序
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中选中行时 点击按钮 那行就删除了 但不知道为什么 实现不了
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 的值....