概述
用java的swing组件画出表格,实现“增加”、“删除”、“保存”、“退出”的功能,并且与mysql数据库相连接。
可以实现提取数据库中表的数据显示到含有表格的窗体上,也可以将在表格中修改的内容写入数据库表中。
我实现以上功能时用了两个类,其中一个类是MyFrame,另外一个类是PutinStorage。
具体代码如下(以下代码均为完整代码,经测试成功的):
PutinStorage类:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JOptionPane;
public class PutinStorage {
// 得到数据库表数据
public static Vector getRows(){
String sql_url = "jdbc:mysql://localhost:3306/haha"; //数据库路径(一般都是这样写),test是数据库名称
String name = "root"; //用户名
String password = "123456"; //密码
Connection conn;
PreparedStatement preparedStatement = null;
Vector rows = null;
Vector columnHeads = null;
try {
Class.forName("com.mysql.jdbc.Driver"); //连接驱动
conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
// if(!conn.isClosed())
// System.out.println("成功连接数据库");
preparedStatement = conn.prepareStatement("select * from aa");
ResultSet result1 = preparedStatement.executeQuery();
if(result1.wasNull())
JOptionPane.showMessageDialog(null, "结果集中无记录");
rows = new Vector();
ResultSetMetaData rsmd = result1.getMetaData();
while(result1.next()){
rows.addElement(getNextRow(result1,rsmd));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("未成功加载驱动。");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("未成功打开数据库。");
e.printStackTrace();
}
return rows;
}
// 得到数据库表头
public static Vector getHead(){
String sql_url = "jdbc:mysql://localhost:3306/haha"; //数据库路径(一般都是这样写),test是数据库名称
String name = "root"; //用户名
String password = "123456"; //密码
Connection conn;
PreparedStatement preparedStatement = null;
Vector columnHeads = null;
try {
Class.forName("com.mysql.jdbc.Driver"); //连接驱动
conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
// if(!conn.isClosed())
// System.out.println("成功连接数据库");
preparedStatement = conn.prepareStatement("select * from aa");
ResultSet result1 = preparedStatement.executeQuery();
boolean moreRecords = result1.next();
if(!moreRecords)
JOptionPane.showMessageDialog(null, "结果集中无记录");
columnHeads = new Vector();
ResultSetMetaData rsmd = result1.getMetaData();
for(int i = 1; i <= rsmd.getColumnCount(); i++)
columnHeads.addElement(rsmd.getColumnName(i));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("未成功加载驱动。");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("未成功打开数据库。");
e.printStackTrace();
}
return columnHeads;
}
// 得到数据库中下一行数据
private static 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){
getRows();
}*/
}
登录后复制
MyFrame类:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import per.tushu.storage.PutinStorage;
public class MyFrame extends JFrame{
DefaultTableModel tableModel; // 默认显示的表格
JButton add,del,exit,save; // 各处理按钮
JTable table; // 表格
JPanel panelUP; //增加信息的面板
// 构造函数
public MyFrame(){
this.setBounds(300, 200, 600, 450); // 设置窗体大小
this.setTitle("测试"); // 设置窗体名称
this.setLayout(new BorderLayout()); // 设置窗体的布局方式
// 新建各按钮组件
add = new JButton("增加");
del = new JButton("删除");
save = new JButton("保存");
exit = new JButton("退出");
panelUP = new JPanel(); // 新建按钮组件面板
panelUP.setLayout(new FlowLayout(FlowLayout.LEFT)); // 设置面板的布局方式
// 将各按钮组件依次添加到面板中
panelUP.add(add);
panelUP.add(del);
panelUP.add(save);
panelUP.add(exit);
// 取得haha数据库的aa表的各行数据
Vector rowData = PutinStorage.getRows();
// 取得haha数据库的aa表的表头数据
Vector columnNames = PutinStorage.getHead();
// 新建表格
tableModel = new DefaultTableModel(rowData,columnNames);
table = new JTable(tableModel);
JScrollPane s = new JScrollPane(table);
// 将面板和表格分别添加到窗体中
this.add(panelUP,BorderLayout.NORTH);
this.add(s);
// 事件处理
MyEvent();
this.setVisible(true); // 显示窗体
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体可关闭
}
// 事件处理
public void MyEvent(){
// 增加
add.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// 增加一行空白区域
tableModel.addRow(new Vector());
}
});
// 删除
del.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
// 删除指定行
int rowcount = table.getSelectedRow();
if(rowcount >= 0){
tableModel.removeRow(rowcount);
}
}
});
/**
* 保存
* 我的解决办法是直接将aa表中的全部数据删除,
* 将表格中的所有内容获取到,
* 然后将表格数据重新写入aa表
*/
save.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
int column = table.getColumnCount(); // 表格列数
int row = table.getRowCount(); // 表格行数
// value数组存放表格中的所有数据
String[][] value = new String[row][column];
for(int i = 0; i < row; i++){
for(int j = 0; j < column; j++){
value[i][j] = table.getValueAt(i, j).toString();
}
}
// 以下均为对数据库的操作
String sql_url = "jdbc:mysql://localhost:3306/haha"; //数据库路径(一般都是这样写),haha是数据库名称
String name = "root"; //用户名
String password = "123456"; //密码
Connection conn;
PreparedStatement preparedStatement = null;
try {
Class.forName("com.mysql.jdbc.Driver"); //连接驱动
conn = DriverManager.getConnection(sql_url, name, password); //连接数据库
if(!conn.isClosed())
System.out.println("成功连接数据库");
// 删除aa表中所有数据
preparedStatement = conn.prepareStatement("delete from aa where true");
preparedStatement.executeUpdate();
// 将value数组中的数据依次存放到aa表中
for(int i = 0; i < row; i++){
preparedStatement = conn.prepareStatement("insert into aa values(" + Integer.parseInt(value[i][0]) + ",'" + value[i][1] + "')");
preparedStatement.executeUpdate();
}
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
System.out.println("未成功加载驱动。");
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
System.out.println("未成功打开数据库。");
e1.printStackTrace();
}
// 保存后退出
System.exit(0);
}
});
// 退出
exit.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
// 主函数
public static void main(String[] args){
new MyFrame();
}
}
登录后复制
执行以上代码的时候,最初显示的窗体如下所示:
点击增加按钮并写入需要增加的内容(我增加了三次)如下图:
点击删除按钮,删除指定行(我删除了第2行和第4行),如下图:
点击保存按钮,会发现窗口也关闭了。这是你可以再重新执行代码,会发现出现的表格页面与上图一样。
点击退出按钮,关闭窗口。
以上就是java怎么显示mysql的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是孤独小伙为你收集整理的java怎么显示mysql的全部内容,希望文章能够帮你解决java怎么显示mysql所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复