JAVA:JAVA+SQL大作业

import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.*;

public class FirstPage extends JFrame {
	private JLabel userLabel, passwordLabel, databaseLabel;
	private JTextField userField, passwordField;
	private JButton passButton;
	private JPanel userPanel, passwordPanel, passPanel, databasePanel;
	static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
	private String DATABASE_URL = "";
	private Connection connection;
	private Statement statement;
	private boolean b;
	private JComboBox<String> databaseBox;
	private String names[] = { "成绩管理数据库", "test", "test1", "test2", "test3", "test4", "test5" };
	private String database = "";

	public FirstPage() {
		databaseBox = new JComboBox(names); // 定义下拉列表并导入数据库名称
		databaseBox.setMaximumRowCount(3); // 设置单击最大显示数目
		databaseBox.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (((String) databaseBox.getSelectedItem()).equals("成绩管理数据库")) { // 用于判断所选数据库.填入自己的数据库
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/成绩管理数据库?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
				if (((String) databaseBox.getSelectedItem()).equals("test")) {
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
				if (((String) databaseBox.getSelectedItem()).equals("test1")) {
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
				if (((String) databaseBox.getSelectedItem()).equals("test2")) {
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/test2?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
				if (((String) databaseBox.getSelectedItem()).equals("test3")) {
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/test3?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
				if (((String) databaseBox.getSelectedItem()).equals("test4")) {
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/test4?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
				if (((String) databaseBox.getSelectedItem()).equals("test5")) {
					DATABASE_URL = "jdbc:mysql:"
							+ "//127.0.0.1:3306/test5?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
				}
			}
		});
		userLabel = new JLabel("用户名:"); // 用户名
		passwordLabel = new JLabel("密码:    ");
		databaseLabel = new JLabel("请选择你要用的数据库:");

		userField = new JTextField(20);
		passwordField = new JPasswordField(20);

		passButton = new JButton("登陆");

		userPanel = new JPanel(new FlowLayout()); // 一系列GUI
		passwordPanel = new JPanel(new FlowLayout());
		passPanel = new JPanel(new FlowLayout());
		databasePanel = new JPanel(new FlowLayout());

		userPanel.add(userLabel);
		userPanel.add(userField);
		passwordPanel.add(passwordLabel);
		passwordPanel.add(passwordField);
		passPanel.add(passButton);
		databasePanel.add(databaseLabel);
		databasePanel.add(databaseBox);

		Container container = getContentPane();
		container.setLayout(new GridLayout(4, 1));
		container.add(databasePanel);
		container.add(userPanel);
		container.add(passwordPanel);
		container.add(passPanel);

		passButton.addActionListener(new ActionListener() { // 通过按钮用于连接数据库
			public void actionPerformed(ActionEvent e) {
				if (userField.getText().equals("")) { // 用于判断是否输入用户名和密码
					JOptionPane.showMessageDialog(null, "请输入用户名", "错误", JOptionPane.WARNING_MESSAGE);
				} else if (passwordField.getText().equals("")) {
					JOptionPane.showMessageDialog(null, "请输入密码", "错误", JOptionPane.WARNING_MESSAGE);
				} else {
					if (true) {
						String user, passWord;
						user = userField.getText();
						passWord = passwordField.getText();
						if (DATABASE_URL.equals("")) { // 设置如果不选择数据库默认为成绩管理数据库
							DATABASE_URL = "jdbc:mysql:"
									+ "//127.0.0.1:3306/成绩管理数据库?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
						}
						try {
							Class.forName(JDBC_DRIVER); // 加载JDBC启动类
							connection = DriverManager.getConnection(DATABASE_URL, user.trim(), passWord); // 连接数据库
							JOptionPane.showMessageDialog(null, "数据库连接成功", "连接成功", JOptionPane.PLAIN_MESSAGE);
							dispose(); // 毁掉所有组件
							SecondPage second = new SecondPage(JDBC_DRIVER, DATABASE_URL, user.trim(), passWord,
									((String) databaseBox.getSelectedItem()));
							second.setVisible(true); // 调用SecondPage类传入参数启动类,用户名,密码和锁链及的数据库
						} catch (ClassNotFoundException e1) {
							JOptionPane.showMessageDialog(null, "数据库启动异常", "错误", JOptionPane.WARNING_MESSAGE);
						} catch (SQLException e2) {
							JOptionPane.showMessageDialog(null, "账号密码错误或者此数据库不存在", "错误", JOptionPane.WARNING_MESSAGE);
							passwordField.setText("");
						}
					}
				}
			}
		});
		setTitle("登陆:");
		setBounds(700, 400, 500, 170);
		setVisible(true);
		setResizable(false);
	}

	public static void main(String[] args) {
		FirstPage a = new FirstPage();
		a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

登录界面,密码自己MySQL的密码,数据库改成自己的

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;
import java.util.List;

import javax.swing.*;

public class SecondPage extends JFrame {
	private JButton selectButton, addButton, updateButton, deleteButton;
	private JButton selectButton2;
	private JTextField selectField, addField, updateField, deleteField;
	private JTextArea tableArea;
	private JPanel selectPanel, addPanel, updatePanel, deletePanel, allPanel, tablePanel, newallPanel;
	private Connection connection;
	private PreparedStatement statement;
	private ResultSet res;
	private JTable table;
	private JLabel tableLabel;

	public SecondPage(String a, String b, String c, String d, String e) {
		Container container = getContentPane();
		final JScrollPane scrollPane = new JScrollPane();

		selectField = new JTextField(45);
		selectField.setFont(new Font("黑体", Font.BOLD, 24)); // 设置输入密令框的文本样式
		addField = new JTextField(45);
		addField.setFont(new Font("黑体", Font.BOLD, 24));
		updateField = new JTextField(45);
		updateField.setFont(new Font("黑体", Font.BOLD, 24));
		deleteField = new JTextField(45);
		deleteField.setFont(new Font("黑体", Font.BOLD, 24));
		try {
			Class.forName(a); // 加载数据库驱动类
			connection = DriverManager.getConnection(b, c, d);// 连接数据库
		} catch (SQLException e1) {
			e1.printStackTrace();
		} catch (ClassNotFoundException e2) {
			e2.printStackTrace();
		}
		tableLabel = new JLabel("语句提示:");
		table = new JTable();

		selectPanel = new JPanel(new FlowLayout());
		addPanel = new JPanel(new FlowLayout());
		updatePanel = new JPanel(new FlowLayout());
		deletePanel = new JPanel(new FlowLayout());
		allPanel = new JPanel(new GridLayout(4, 1));
		tablePanel = new JPanel(new FlowLayout());
		newallPanel = new JPanel(new FlowLayout());

		selectButton = new JButton("查询");
		addButton = new JButton("增加");
		updateButton = new JButton("更新");
		deleteButton = new JButton("删除");
		selectButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				try {
					statement = connection.prepareStatement(selectField.getText());// 获取field的语句
					res = statement.executeQuery();// 执行field里面的sql语句
					res.last();// 指到定位到最后一行
					int row = res.getRow();// 获得总行数
					res.beforeFirst();// 定位到开始

					ResultSetMetaData metaData = res.getMetaData(); // 设置集合用于储存数据库中数据
					int numberOfColumns = metaData.getColumnCount(); // 得到列的数目
					Object a[][] = new Object[row][numberOfColumns]; // 获取表中的数据(除了表的属性)
					Object name[] = new Object[numberOfColumns]; // 获取表的属性名,用于储存

					for (int index = 0; res.next(); index++) // 两个for循环将数据加入到集合当中
						for (int j = 0; j < numberOfColumns; j++)
							a[index][j] = res.getString(j + 1);

					for (int i = 1; i <= numberOfColumns; i++) { // 循环获得表的属性
						name[i - 1] = metaData.getColumnName(i);
					}
					table = new JTable(a, name); // 创建一个表
					table.setRowHeight(30); // 设置行高
					table.setVisible(true); // 设置可见
					table.setFont(new Font("黑体", Font.BOLD, 15)); // 设置字体样式
					scrollPane.setViewportView(table); // 设置滚动滑块
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "语句错误", "警告", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		addButton.addActionListener(new ActionListener() { // 添加语句块
			public void actionPerformed(ActionEvent e) {
				try {
					statement = connection.prepareStatement(addField.getText());
					statement.executeUpdate();
					JOptionPane.showMessageDialog(null, "密令执行成功", "", JOptionPane.INFORMATION_MESSAGE);
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "语句错误", "警告", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		updateButton.addActionListener(new ActionListener() { // 更新语句块
			public void actionPerformed(ActionEvent e) {
				try {
					statement = connection.prepareStatement(updateField.getText());
					statement.executeUpdate();
					JOptionPane.showMessageDialog(null, "密令执行成功", "", JOptionPane.INFORMATION_MESSAGE);
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "语句错误", "警告", JOptionPane.ERROR_MESSAGE);
				}

			}
		});
		deleteButton.addActionListener(new ActionListener() { // 删除语句块
			public void actionPerformed(ActionEvent e) {
				try {
					statement = connection.prepareStatement(deleteField.getText());
					statement.executeUpdate();
					JOptionPane.showMessageDialog(null, "密令执行成功", "", JOptionPane.INFORMATION_MESSAGE);
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "语句错误", "警告", JOptionPane.ERROR_MESSAGE);
				}

			}
		});

		selectButton2 = new JButton("语句提示"); // 设置语句提示
		selectButton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new SelectPage(); // 打开SelectPage类
			}
		});

		tableArea = new JTextArea(9, 18);
		tableArea.setText("当前数据库含有的表:" + "\n"); // 对表设置一系列东西
		tableArea.setFont(new Font("黑体", Font.BOLD, 15));
		tableArea.setEditable(false);
		String s[] = { "TABLE" };
		String left = "";
		DatabaseMetaData dbmd; // 查询数据库当中表的名字
		try {
			dbmd = connection.getMetaData();
			ResultSet tSet = dbmd.getTables(e, null, "%", s);
			while (tSet.next()) {
				left += tSet.getString("TABLE_NAME") + "\n";
			}
			tableArea.append(left);
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		selectPanel.add(selectField);
		selectPanel.add(selectButton);
		addPanel.add(addField);
		addPanel.add(addButton);
		updatePanel.add(updateField);
		updatePanel.add(updateButton);
		deletePanel.add(deleteField);
		deletePanel.add(deleteButton);
		allPanel.add(selectPanel);
		allPanel.add(addPanel);
		allPanel.add(updatePanel);
		allPanel.add(deletePanel);

		newallPanel.add(new JScrollPane(tableArea));
		newallPanel.add(allPanel);

		tablePanel.add(tableLabel);
		tablePanel.add(selectButton2);

		container.add(newallPanel, BorderLayout.SOUTH);
		container.add(scrollPane, BorderLayout.CENTER);
		container.add(tablePanel, BorderLayout.NORTH);
		setBounds(500, 100, 1000, 800);
		setTitle("数据库");
		setVisible(true);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

对数据库操作界面,对当前数据库中存在的表进行增删改查,为了方便复杂的查询语句,这里采用了输入密令的语句。

import java.awt.*;
import javax.swing.*;
public class SelectPage extends JDialog{
	private JTextArea area;
	private String str;
	public SelectPage() {				                       //显示一系列MySQL代码密令,等待被调用
		str= 	"查找:select * from 表名  where 属性名所满足的条件 \r\n" + 
				"添加:insert into 表名 values(数据);\r\n" + 
				"更新:update 表名 set 更新后的内容  where 满足的条件\r\n" + 
				"删除:delete from 表名 where 满足的条件\r\n";
		area=new JTextArea();
		area.setText(str);
		area.setEditable(false);
		Container container=getContentPane();
		container.add(new JScrollPane(area));
		setBounds(1485,100,400,300);
		setTitle("查询语句如下:");
		setVisible(true);
	}
}

一个提示类,提示查询语句。

本程序有很强很强的容错机制。

猜你喜欢

转载自blog.csdn.net/qq_42192693/article/details/80954777