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);
}
}
一个提示类,提示查询语句。
本程序有很强很强的容错机制。