java怎么显示mysql_【后端开发】java怎么显示mysql

用java的swing组件画出表格,实现“增加”、“删除”、“保存”、“退出”的功能,并且与mysql数据库相连接。

可以实现提取数据库中表的数据显示到含有表格的窗体上,也可以将在表格中修改的内容写入数据库表中。

ca5d0683bb6df39da4e62c42a7b5e6a6.png

我实现以上功能时用了两个类,其中一个类是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();

}

}

执行以上代码的时候,最初显示的窗体如下所示:

d884db153c7dc427c8a042a9db429e56.png

点击增加按钮并写入需要增加的内容(我增加了三次)如下图:

0ce76c40e4c77fbaa1f9cce46ec10e6c.png

点击删除按钮,删除指定行(我删除了第2行和第4行),如下图:

8c12a14beb6e97b67c11c4d14f248410.png

点击保存按钮,会发现窗口也关闭了。这是你可以再重新执行代码,会发现出现的表格页面与上图一样。

点击退出按钮,关闭窗口。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值