Java应用之数据库和数据表的二级联动实现

举报
yd_273762914 发表于 2020/12/02 23:02:23 2020/12/02
【摘要】 实现的效果是获取Mysql的所有数据库,然后点击数据库名就可以实现获取该数据库里的所有表。 主要是用DefaultComboBoxModel来实现,实现思路就是移除之前的模型,然后为这个模型重新添加数据,从而实现了二级联动。   给出参考代码:     package com.xmlDemo.frame; import java.aw...

实现的效果是获取Mysql的所有数据库,然后点击数据库名就可以实现获取该数据库里的所有表。

主要是用DefaultComboBoxModel来实现,实现思路就是移除之前的模型,然后为这个模型重新添加数据,从而实现了二级联动。

 

给出参考代码:

 

 


  
  1. package com.xmlDemo.frame;
  2. import java.awt.FlowLayout;
  3. import java.awt.Image;
  4. import java.awt.Toolkit;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.ItemEvent;
  8. import java.awt.event.ItemListener;
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.sql.PreparedStatement;
  12. import java.sql.ResultSet;
  13. import java.sql.SQLException;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import javax.swing.ComboBoxModel;
  17. import javax.swing.DefaultComboBoxModel;
  18. import javax.swing.JButton;
  19. import javax.swing.JComboBox;
  20. import javax.swing.JFrame;
  21. import javax.swing.JLabel;
  22. import javax.swing.JOptionPane;
  23. import javax.swing.JPanel;
  24. import com.xmlDemo.service.DBService;
  25. import com.xmlDemo.service.DBToXmlService;
  26. import com.xmlDemo.util.DBConnectionUtil;
  27. //主要是用DefaultComboBoxModel来实现
  28. public class ExportFrame extends JFrame implements ItemListener{
  29. /**
  30. *
  31. */
  32. private static final long serialVersionUID = 1L;
  33. String dbName = "xml";
  34. private List<String> list2;
  35. private String[] arrs2 = {};
  36. private DefaultComboBoxModel model;
  37. private JComboBox comboBox1;
  38. private JComboBox comboBox2;
  39. private final static String BASEURL="../xmlDemo/images/";
  40. private String tableName = "users";
  41. public ExportFrame(){
  42. try {
  43. export();
  44. } catch (Exception e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. }
  48. }
  49. public void export() throws Exception{
  50. Image image=Toolkit.getDefaultToolkit().getImage(BASEURL+"logo.png");
  51. setIconImage(image);
  52. setTitle("导出信息");
  53. setLayout(new FlowLayout(FlowLayout.LEFT));
  54. JPanel panel1 = new JPanel();
  55. JPanel panel2 = new JPanel();
  56. JLabel label1 = new JLabel("数据库:");
  57. List<String> list1 = new DBService().getAllDatabases();
  58. String arrs1[] = new String[list1.size()];
  59. for(int i = 0; i < list1.size(); i++){
  60. arrs1[i] = list1.get(i);
  61. }
  62. comboBox1 = new JComboBox(arrs1);
  63. comboBox1.setSelectedItem(dbName);
  64. comboBox1.addItemListener(this);
  65. panel1.add(label1);
  66. panel1.add(comboBox1);
  67. list2 = new DBService().getAllTables(dbName);
  68. arrs2 = new String[list2.size()];
  69. for(int i = 0; i < list2.size(); i++){
  70. arrs2[i] = list2.get(i);
  71. }
  72. JLabel label2 = new JLabel("数据表:");
  73. //创建一个模型
  74. model = new DefaultComboBoxModel();
  75. try {
  76. list2 = new DBService().getAllTables(dbName);
  77. } catch (Exception e1) {
  78. // TODO Auto-generated catch block
  79. e1.printStackTrace();
  80. }
  81. arrs2 = new String[list2.size()];
  82. for(int i = 0; i < list2.size(); i++){
  83. arrs2[i] = list2.get(i);
  84. model.addElement(arrs2[i]);
  85. }
  86. comboBox2 = new JComboBox();
  87. comboBox2.setSelectedItem(tableName);
  88. comboBox2.setModel(model);
  89. comboBox2.addItemListener(new ItemListener() {
  90. @Override
  91. public void itemStateChanged(ItemEvent e) {
  92. // TODO Auto-generated method stub
  93. if(e.getStateChange()==ItemEvent.SELECTED){
  94. tableName = "" + e.getItem();
  95. }
  96. }
  97. });
  98. panel2.add(label2);
  99. panel2.add(comboBox2);
  100. JButton btn = new JButton("导出");
  101. btn.addActionListener(new ActionListener() {
  102. @Override
  103. public void actionPerformed(ActionEvent e) {
  104. // TODO Auto-generated method stub
  105. try {
  106. if(dbName.equals("xml")){
  107. new DBToXmlService().exportDataToXMlFile(dbName, tableName);
  108. }else{
  109. JOptionPane.showConfirmDialog(null, "当前版本只支持特定数据库","温馨提示",JOptionPane.YES_NO_OPTION);
  110. }
  111. } catch (Exception e1) {
  112. // TODO Auto-generated catch block
  113. e1.printStackTrace();
  114. }
  115. }
  116. });
  117. add(panel1);
  118. add(panel2);
  119. add(btn);
  120. setVisible(true);
  121. setSize(400,400);
  122. setLocation(300,300);
  123. }
  124. @Override
  125. public void itemStateChanged(ItemEvent e) {
  126. // TODO Auto-generated method stub
  127. if(e.getStateChange()==ItemEvent.SELECTED){//选中JComboBox组件
  128. dbName = ""+e.getItem();//获取字符串
  129. try {
  130. list2 = new DBService().getAllTables(dbName);
  131. } catch (Exception e1) {
  132. // TODO Auto-generated catch block
  133. e1.printStackTrace();
  134. }
  135. //@SuppressWarnings("unchecked")
  136. model = (DefaultComboBoxModel)comboBox2.getModel();
  137. //移除之前的ComboBox模型
  138. while(model.getSize()>0){
  139. model.removeElementAt(model.getSize()-1);
  140. }
  141. arrs2 = new String[list2.size()];
  142. //重新添加模型
  143. for(int i = 0;i<list2.size();i++){
  144. arrs2[i] = list2.get(i);
  145. model.addElement(arrs2[i]);
  146. }
  147. }
  148. }
  149. }

 

 

数据库操作的类:

 

 


  
  1. package com.xmlDemo.service;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import com.xmlDemo.util.DBConnectionUtil;
  9. public class DBService {
  10. //获取某个数据库的所有数据表
  11. public List<String> getAllTables(String databaseName) throws Exception{
  12. List<String> list = new ArrayList<String>();
  13. int i = 0;
  14. String url = "jdbc:mysql://localhost:3306/"+databaseName;
  15. Connection connection = new DBConnectionUtil().getConnection(url);
  16. try {
  17. ResultSet rs=connection.getMetaData().getTables("","","",null);
  18. while (rs.next()) {
  19. list.add(rs.getString("TABLE_NAME"));
  20. }
  21. } catch (SQLException e) {
  22. e.printStackTrace();
  23. }
  24. return list;
  25. }
  26. public List<String> getAllDatabases() throws Exception{
  27. List<String> list = new ArrayList<String>();
  28. int i = 0;
  29. String sql = "show databases";
  30. String url="jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8";
  31. Connection connection = new DBConnectionUtil().getConnection(url);
  32. try {
  33. PreparedStatement prepare = connection.prepareStatement(sql);
  34. ResultSet rs=prepare.executeQuery();
  35. while (rs.next()) {
  36. list.add(rs.getString(1));
  37. }
  38. } catch (SQLException e) {
  39. e.printStackTrace();
  40. }finally{
  41. new DBConnectionUtil().close();
  42. }
  43. return list;
  44. }
  45. }

 

 

 

 

 

 

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/50315605

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。