程序整體框架 :
?
一.數(shù)據(jù)庫表格建立:
?
? ? ? ? (本項(xiàng)目使用到了數(shù)據(jù)庫的可視化軟件DataGrip,需要同學(xué)們自行下載并配置環(huán)境)
首先我們需要在DataGrip中建立一個student的框架
????????????????????????????????????????????????????????然后建立一個studenttable表?
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????? 建立列用來存儲學(xué)生信息?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????整體框架? ? ???????????????
?
?????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????數(shù)據(jù)格式的編寫? ? ? ????????
???????????????
?
?
?
?
?這樣數(shù)據(jù)庫方面的就已經(jīng)處理完成啦
二.代碼部分
?main類:
public class Main {
public static void main(String[] args){
JDBC win=new JDBC();
//調(diào)用窗口類,創(chuàng)建窗口
Windows1 system=new Windows1();
system.setVisible(true);
}
}
?Window1類
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
public class Windows1 extends JFrame implements ActionListener {
JLabel label1,label2,label3,label4,label5,label6;
JTextField field1,field2,field3,field4,field5,field6;
JButton button1,button2,button3,button4;
JPanel panel1,panel2,panel3;
JTable table;
DefaultTableModel model;
public Windows1(){
//設(shè)置窗口屬性
setTitle("學(xué)生信息管理系統(tǒng)");
setSize(800,650);
//窗口居中
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//設(shè)置組件
label1=new JLabel("學(xué)號");
label2=new JLabel("姓名");
label3=new JLabel("性別");
label4=new JLabel("年齡");
label5=new JLabel("專業(yè)");
label6=new JLabel("班級");
field1=new JTextField(10);
field2=new JTextField(10);
field3=new JTextField(10);
field4=new JTextField(10);
field5=new JTextField(10);
field6=new JTextField(10);
button1=new JButton("添加");
button2=new JButton("刪除");
button3=new JButton("查找");
button4=new JButton("修改");
//設(shè)置表格
String[] str={"學(xué)號","姓名","性別","年齡","專業(yè)","班級"};
model=new DefaultTableModel(str,0);
table=new JTable(model);
JScrollPane scrollPane=new JScrollPane(table);
//設(shè)置布局
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
panel1.setLayout(new GridLayout(6,2));
panel1.add(label1);
panel1.add(field1);
panel1.add(label2);
panel1.add(field2);
panel1.add(label3);
panel1.add(field3);
panel1.add(label4);
panel1.add(field4);
panel1.add(label5);
panel1.add(field5);
panel1.add(label6);
panel1.add(field6);
panel2.setLayout(new FlowLayout());
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
panel2.add(button4);
panel3.setLayout(new BorderLayout());
panel3.add(panel1,BorderLayout.CENTER);
panel3.add(panel2,BorderLayout.NORTH);
panel3.add(scrollPane,BorderLayout.SOUTH);
add(panel3);
JDBC jdbc=new JDBC();
jdbc.fetchData(model);
//按鍵監(jiān)聽器
button1.addActionListener( this);
button2.addActionListener( this);
button3.addActionListener( this);
button4.addActionListener( this);
}
@Override
public void actionPerformed(ActionEvent e){
SQLHelp sqlhelp=new SQLHelp();
//添加
if(e.getSource()==button1){
try{
sqlhelp.addStudent(field1.getText(),field2.getText(),field3.getText(),field4.getText(),field5.getText(),field6.getText());
JOptionPane.showMessageDialog(Windows1.this,"添加成功");
}catch (SQLException e1){
if(e1.getSQLState().equals("23000")){
JOptionPane.showMessageDialog(Windows1.this,"添加失敗,該生已存在");
}
e1.printStackTrace();
}
String[] data1={field1.getText(),field2.getText(),field3.getText(),field4.getText(),field5.getText(),field6.getText()};
model.addRow(data1);
}
//刪除
else if(e.getSource()==button2){
int selectedRow=table.getSelectedRow();
if(selectedRow!=-1){
String id= (String) table.getValueAt(selectedRow,0);
try{
sqlhelp.deletestudent(id);
JOptionPane.showMessageDialog(Windows1.this,"刪除成功");
}catch(SQLException e2){
JOptionPane.showMessageDialog(Windows1.this,"刪除失敗");
e2.printStackTrace();
}
model.removeRow(selectedRow);
}
}
//查找
else if(e.getSource()==button3){
String keyword=JOptionPane.showInputDialog(this,"請輸入學(xué)生學(xué)號");
for (int i = 0; i < model.getRowCount(); i++) {
if (model.getValueAt(i, 0).toString().contains(keyword)) {
table.setRowSelectionInterval(i, i);
}
}
}
//修改
else if (e.getSource()==button4) {
int selectedRow=table.getSelectedRow();
if(selectedRow!=-1)
{
model.setValueAt(field1.getText(),selectedRow,0);
model.setValueAt(field2.getText(),selectedRow,1);
model.setValueAt(field3.getText(),selectedRow,2);
model.setValueAt(field4.getText(),selectedRow,3);
model.setValueAt(field5.getText(),selectedRow,4);
model.setValueAt(field6.getText(),selectedRow,5);
try{
sqlhelp.changeStudent(
field1.getText(),
field2.getText(),
field3.getText(),
field4.getText(),
field5.getText(),
field6.getText()
);
JOptionPane.showMessageDialog(this,"修改成功");
} catch (SQLException e3) {
throw new RuntimeException(e3);
}
}
}
}
}
?JDBC類:
import javax.swing.table.DefaultTableModel;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class JDBC {
public void fetchData(DefaultTableModel model) {
int numsrow=1;
List data=new ArrayList<>();
try {
// 注冊 JDBC 驅(qū)動
Class.forName("com.mysql.cj.jdbc.Driver");
// 打開鏈接
Connection conn = DriverManager.getConnection
(
"jdbc:mysql://localhost:3306/MySQL",
"root",
"123456"
);
// 執(zhí)行查詢
Statement stmt = conn.createStatement();
String sql = "SELECT ID,Name,Gender,Age,Expertise,Class FROM student.studenttable";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData metaData= rs.getMetaData();
int numberOfrow=metaData.getColumnCount();
Windows1 win=new Windows1();
while(rs.next()) {
Objects[] rowDta = new Objects[numberOfrow];
String id = rs.getString("ID");
String name = rs.getString("Name");
String gender = rs.getString("Gender");
String age = rs.getString("Age");
String expertise = rs.getString("Expertise");
String room = rs.getString("Class");
String[] data1 = {id, name, gender, age, expertise, room};
model.addRow(data1);
}
// 釋放資源
rs.close();
stmt.close();
conn.close();
} catch(SQLException | ClassNotFoundException e){
e.printStackTrace();
}
}
}
SQLhelp類:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SQLHelp {
public static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
public static final String DB_URL = "jdbc:mysql://localhost:3306/MySQL";//這里的jdbc:mysql://localhost:3306/一般是固定的,MySQL根據(jù)你自己的數(shù)據(jù)庫名稱來修改
public static final String username = "root";//數(shù)據(jù)庫用戶名
public static final String password = "123456";//數(shù)據(jù)庫密碼
private Connection connection = null;
private PreparedStatement pStatement = null;
private ResultSet rSet = null;
// 加載驅(qū)動
// 靜態(tài)初始化塊
static {
//JDBC驅(qū)動
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 鏈接數(shù)據(jù)庫
public void connectDB() {
try {
connection = DriverManager.getConnection(DB_URL,username,password);
System.out.println("數(shù)據(jù)庫鏈接成功");
} catch (SQLException e) {
System.out.println("數(shù)據(jù)庫鏈接失敗");
e.printStackTrace();
}
}
// 關(guān)閉資源
public void close() {
if(rSet != null) {
try {
rSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pStatement != null) {
try {
pStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void addStudent(String id,String name,String gender, String age,String expertise,String room) throws SQLException {
// try finally 無論是否拋出異常都將執(zhí)行 finally 中的語句
try {
// 先鏈接到數(shù)據(jù)庫
connectDB();
// sql 語句
// 靜態(tài) sql 語句需要進(jìn)行字符串拼接
// 動態(tài) sql 語句
//這里的student是我們在DataGrip創(chuàng)建的一個框架,studenttable是一個表的名稱
String addsql = "insert into student.studenttable values(?, ?, ?, ?, ?,?)";
pStatement = connection.prepareStatement(addsql);
pStatement.setString(1, id);
pStatement.setString(2, name);
pStatement.setString(3, gender);
pStatement.setString(4, age);
pStatement.setString(5, expertise);
pStatement.setString(6,room);
pStatement.executeUpdate();
} finally {
close();
}
}
public void changeStudent(String id, String name, String gender, String age, String expertise,String room) throws SQLException {
try {
connectDB();
String changesql = "update student.studenttable set name = ?, gender = ?, age = ?, expertise = ?,class=? where id = ?";
pStatement = connection.prepareStatement(changesql);
pStatement.setString(1, name);
pStatement.setString(2, gender);
pStatement.setString(3, age);
pStatement.setString(4, expertise);
pStatement.setString(5, room);
pStatement.setString(6,id);
pStatement.executeUpdate();
} finally {
close();
}
}
public void deletestudent(String id) throws SQLException {
try {
connectDB();
String deleteString = " delete from student.studenttable where id = ?";
pStatement = connection.prepareStatement(deleteString);
pStatement.setString(1, id);
pStatement.execute();
} finally {
close();
}
}
}
三.代碼運(yùn)行:
運(yùn)行前要:
使用JDBC之前需要先導(dǎo)入JDBC驅(qū)動包確定已經(jīng)與數(shù)據(jù)庫構(gòu)建了連接
?
?
添加模塊:
?
?刪除模塊:
選擇需要刪除學(xué)生的行
?點(diǎn)擊刪除鍵
?查找模塊:
?找到的信息會高亮顯示:
?修改模塊:
先輸入需要修改的信息,再選擇需要修改信息的行數(shù),點(diǎn)擊修改鍵
?驗(yàn)證存儲功能:
先關(guān)閉程序后,再打開
文章來源:http://www.zghlxwxcb.cn/news/detail-763261.html
數(shù)據(jù)依舊存在。?文章來源地址http://www.zghlxwxcb.cn/news/detail-763261.html
到了這里,關(guān)于【Java】手把手教你寫學(xué)生信息管理系統(tǒng)(窗口化+MYSQL)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!