Curso de Diseño Experimental de la Base de Datos del Sistema de Gestión de Bibliotecas

Este curso está diseñado para ser escrito por un estudiante de segundo año en el Departamento de Ingeniería de Software Corrígeme con mi pluma torpe.
Herramientas de desarrollo: Eclipse 2020-12, servidor Microsoft SQL 2012
Lenguaje del programa: Java

Introducción
Tema de selección de temas: sistema de gestión de la biblioteca
Antecedentes de la selección de temas:
(1) Hay varios libros en la biblioteca, con un total de más de 10.000 volúmenes.
(2) Cada libro tiene título, número de libro (ISBN), uno o más autores (traductores), editorial, precio y breve introducción.
(3) La tarjeta de la biblioteca registra el nombre, la unidad, la ocupación, etc. del prestatario.
(4) Préstamo de libros con un certificado de libro, se pueden tomar prestados hasta 8 libros cada vez. El plazo máximo de préstamo es de 30 días.
Funciones requeridas:
(1) Operaciones básicas como entrada, modificación y borrado de la información básica de los libros.
(2) Realizar la función de préstamo de libros.
(3) Realice la función de devolución de libros.
(4) Realice la consulta de clasificación y las estadísticas de clasificación de todos los libros comprados.
(5) El número de libros existentes se puede consultar por clasificación, como el título del libro y el autor.
(6) Puede proporcionar automáticamente información rápida sobre la situación de retraso.
(7) Hay una distinción entre bibliotecarios y prestatarios.
Importancia de la selección de temas: puede profundizar nuestra comprensión y aplicación del conocimiento teórico de los principios del sistema de bases de datos y el diseño de programas. Al diseñar temas reales del sistema de bases de datos, podemos familiarizarnos aún más con la tecnología de operación de los sistemas de administración de bases de datos, mejorar la capacidad práctica, analizar proyectos prácticos y resolver problemas prácticos La capacidad de aprender métodos básicos de programación de bases de datos.

  1. Modelo Conceptual de Base de Datos
    1.1 Análisis de Requerimientos
    1.1.1 Bibliotecario:
    ⑴ Consultar y modificar información personal, como número de contacto.
    ⑵Puede realizar operaciones como consultar, modificar, borrar y clasificar estadísticas de libros.
    (3) Consultar y modificar la información personal de los prestatarios, incluida la información de préstamo, etc.
    ⑷Aumentar y eliminar prestatarios
    1.1.2 Prestatarios:
    ⑴Consultar y modificar información personal, como el número de contacto.
    ⑵ Preguntar sobre la información del libro y el estado del libro, es decir, está libre en el libro o ha sido prestado.
    (3) Préstamo y devolución de libros.
    ⑷Si los libros prestados han excedido el límite de tiempo, debe pedirle al administrador que lo ayude a devolver los libros.
    Se pueden tomar prestados hasta 8 libros cada vez. El plazo máximo de préstamo es de 30 días.
    1.2 Diseño de la estructura conceptual
    1.2.1 Entidades abstractas
    Según el análisis, el sistema de gestión de bibliotecas incluye principalmente tres entidades: bibliotecarios, prestatarios y libros.
    Bibliotecario: número de trabajo, nombre, género, cargo, número de contacto
    Prestatario: número de tarjeta de la biblioteca, nombre, género, número de contacto, ocupación, unidad
    Libros: número de libro, título, autor, editorial, precio, contenido Perfil, estado, categoría

Diccionario de datos:
(6 tablas)
inserte la descripción de la imagen aquí
Nombre de la tabla: Prestatario
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
(la función de esta tabla es: cuando el usuario inicia sesión correctamente, escriba la cuenta de inicio de sesión y la hora de inicio de sesión en la tabla "cuenta de operación" de la base de datos, indicando que el usuario está utilizando actualmente el El sistema es un determinado usuario; por ejemplo, cuando un usuario modifica información personal, el sistema filtra la última hora de inicio de sesión para garantizar que el usuario modifique su propia información).

1.2.2 Diagrama ER parcial (figura omitida)
Bibliotecarios y prestatarios: un bibliotecario puede gestionar varios prestatarios y un prestatario puede ser gestionado por varios bibliotecarios. Así que hay una relación de muchos a muchos entre los dos.

Prestatarios y libros: un prestatario puede tomar prestados hasta 8 libros a la vez, y un libro puede prestarse a diferentes prestatarios varias veces. Así que hay una relación de muchos a muchos entre los dos.

Bibliotecarios y libros: un bibliotecario puede administrar varios libros y un libro puede ser administrado por varios bibliotecarios. Así que hay una relación de muchos a muchos entre los dos.

1.2.3 El diagrama ER general (se omite el diagrama, se puede obtener combinando los diagramas ER parciales)

2 Modelo lógico de base de datos
2.1 Transformar diagrama ER en modelo relacional
Bibliotecario (número de empleado, nombre, género, cargo, número de contacto) es el modelo relacional correspondiente a la entidad bibliotecaria, donde el número de empleado es la clave principal de la relación bibliotecaria.
El prestatario (número de tarjeta de biblioteca, nombre, género, número de contacto, ocupación, unidad) es el modelo de relación correspondiente a la entidad prestataria, y el número de tarjeta de biblioteca es la clave principal de la relación con el prestatario.
Los libros (número de libro, título, autor, editor, precio, introducción de contenido, estado, clasificación) son los esquemas de relación correspondientes a las entidades de libro, y el número de libro es la clave principal de la relación de libro.
Préstamo de libros (número de carné de biblioteca, número de libro, tiempo de préstamo, nombre, título) es el modelo de relación correspondiente a la conexión "préstamo de libros". Dado que el préstamo de libros es una relación de muchos a muchos entre bibliotecarios, prestatarios y libros, el atributo principal de los bibliotecarios, los prestatarios y los libros y el atributo "tiempo de préstamo" del propio libro en préstamo constituyen el préstamo. Los atributos del modelo de relación de libros, donde la combinación del número de tarjeta de la biblioteca, el número de libro y el tiempo de préstamo es la clave principal de la relación de préstamo de libros.
La devolución de libros (número de carné de biblioteca, número de libro, tiempo de préstamo, hora de devolución, nombre, título del libro) es el modelo de relación correspondiente a la conexión "devolución de libros", porque la devolución de libros es la relación entre bibliotecarios, prestatarios y libros Muchos a muchas relaciones, por lo que el atributo principal del bibliotecario, el prestatario y el libro y el atributo "tiempo de devolución" del libro prestado en sí constituyen los atributos del modelo de relación de devolución, en el que el número de tarjeta de biblioteca, número de libro, libro prestado La combinación de El tiempo y el tiempo de devolución del libro es la clave principal de la relación de devolución del libro.

3 Diseño e implementación física de la base de datos
3.1 Crear base de datos
inserte la descripción de la imagen aquí
3.2 Crear y administrar tablas básicas
3.2.1 Crear tablas básicas
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
4 Diseño de programas
4.1 Crear formularios
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
4.1.1 Administrador

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Book Query
inserte la descripción de la imagen aquí
Book Add
1. La operación falló: el ISBN está duplicado con los datos ya almacenados en la base de datos, el estado no es "prestado" o "libre en el libro" y hay un artículo vacío 2. La operación es exitosa:
no Edición de
inserte la descripción de la imagen aquí
libros
1. Ingresar datos Modificación normal
2. Ingresar un ISBN ilegal o inexistente - "no existe tal libro en la base de datos"
3. Dejar el ISBN en blanco - "requerido"
inserte la descripción de la imagen aquí
Gestión de préstamo
1. El administrador ingresa un ISBN legal y existente, la operación es exitosa, cambie el estado del libro a libre y muévalo al registro de devolución de libros
2. Ingrese un número de libro ilegal, inexistente o vacío, la operación falla
3. Haga clic en "Devolución de libros registro" para ver la tabla de débito
inserte la descripción de la imagen aquí
Lector consultar y editar
Eliminar
texto Si el número de cuenta ingresado en el cuadro es válido, significa "operación exitosa", de lo contrario "operación fallida"
inserte la descripción de la imagen aquí
Modificar/Agregar
Modificación
1. Complete el número de tarjeta de biblioteca legal y se puede ejecutar sin problemas, si no ingresa el número de la tarjeta de la biblioteca o el número de la tarjeta de la biblioteca ilegal, se mostrará el indicador de la etiqueta 2. El género está
limitado a "masculino" o "femenino". Si ocurre un error , no se puede ejecutar la indicación de la etiqueta
Agregar
1. La operación es exitosa: cada elemento se completa y el género se limita a "masculino" o "femenino".
2. La operación falla: hay un elemento vacío o el género es no limitado, muestra "Cada elemento es obligatorio"inserte la descripción de la imagen aquí

Modificar información personal
inserte la descripción de la imagen aquí
Cambiar contraseña
1. Ingrese contraseñas legales en los tres cuadros de contraseña - "modificado con éxito"
2. Ingrese contraseñas ilegales en cualquiera de los tres cuadros de contraseña - "Error de entrada, verifique"
inserte la descripción de la imagen aquí

	4.1.2借书者

inserte la descripción de la imagen aquí
consulta de libro
inserte la descripción de la imagen aquí

Préstamo de Libros
Operación exitosa
1. Ingrese el ISBN de "Libro Libre", y no hay más de 8 libros en préstamo
Operación Fallida
1. Ingrese un ISBN "prestado", inexistente o vacío
2. El número de libros en préstamo ha llegó a 8
inserte la descripción de la imagen aquí

Devolución de libro
Operación exitosa
1. Ingrese el número de libro que se está prestando, y el tiempo de préstamo no es mayor a 30 días
Operación fallida
1. Ingrese el número de libro que no está en uso, ilegal o vacío
2. Ingrese el número de libro que está siendo prestado, pero el tiempo de préstamo ha excedido el cielo de 30 días
inserte la descripción de la imagen aquí

Modificar información personal
inserte la descripción de la imagen aquí

cambiar la contraseña
inserte la descripción de la imagen aquí

4.2连接数据库
package Testv1;

import java.sql.*;

public class Testv10 {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		{
    
    
		  String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
		  String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";//个人数据库名称
		  String userName="sa";		//个人用户名
		  String userPwd="QWEASDZXC000000";			//个人密码
		 try
		{
    
    
			Class.forName(driverName);
			System.out.println("加载驱动成功!");
		}catch(Exception e){
    
    
			e.printStackTrace();
			System.out.println("加载驱动失败!");
		}
		try{
    
    
			Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);
				System.out.println("连接数据库成功!");
		}catch(Exception e)
		{
    
    
			e.printStackTrace();
			System.out.print("SQL Server连接失败!");
		}		
		}

Video de demostración completo
https://www.bilibili.com/video/BV1C34y1H7NH?share_source=copy_web&vd_source=532622d453c2953506dbf894f3498777
Agregar descripción del enlace: demostración de uso del sistema

consulta de libro

package Testv1;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class BookFind extends JFrame {
    
    

	private JPanel contentPane;
	private JTextField textField_2;
	private JTextField textField_3;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
    
    
		EventQueue.invokeLater(new Runnable() {
    
    
			public void run() {
    
    
				try {
    
    
					BookFind frame = new BookFind();
					frame.setVisible(true);
				} catch (Exception e) {
    
    
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public BookFind() {
    
    
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 581, 391);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		textField_2 = new JTextField();
		textField_2.setBounds(23, 7, 139, 21);
		contentPane.add(textField_2);
		textField_2.setColumns(10);
		
		
		JButton btnNewButton_2 = new JButton("\u8FD4\u56DE");
		btnNewButton_2.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
				setVisible(false);
			}
		});
		btnNewButton_2.setBounds(462, 319, 93, 23);
		contentPane.add(btnNewButton_2);
		
		JLabel lblNewLabel = new JLabel("\u5171\u6709\uFF08\u672C\uFF09");
		lblNewLabel.setBounds(23, 323, 70, 15);
		contentPane.add(lblNewLabel);
		
		textField_3 = new JTextField();
		textField_3.setBounds(82, 320, 66, 21);
		contentPane.add(textField_3);
		textField_3.setColumns(10);
		
		
		JPanel panel = new JPanel();
		panel.setBounds(23, 38, 532, 271);
		contentPane.add(panel);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 46, 300, 150);
		panel.add(scrollPane);
		
		String []Name = {
    
    "书号", "书名", "作者", "出版社","定价","内容简介","状态","分类"};
		Object [][] rowData = new Object [100][8];           
		JTable table = new JTable(rowData, Name);
		table.setBounds(297, 179, -279, -124);
		table.setRowHeight(30);                          //设置行高
		table.getColumnModel().getColumn(0).setPreferredWidth(110); //第一列列宽
		table.setPreferredScrollableViewportSize(new Dimension(500 ,300));    //设置滚动面板视口大小(超过该大小的行数据需要拖动滚动条)
		scrollPane.setViewportView(table);
		//把数据库表的内容显示到页面的表格
		try {
    
    
			String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";
			String userName="sa";
			String userPwd="QWEASDZXC000000";
			Connection dbConn = null;
			
			Statement state = null;
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
			state = dbConn.createStatement();
			String sql0 = "select * from 图书";
			ResultSet rs = state.executeQuery(sql0);
			
			Statement stateCnt = dbConn.createStatement();
			String sql1 = "select count(*) from 图书";
			ResultSet rs_1 = stateCnt.executeQuery(sql1);
			while(rs_1.next()) {
    
    
				textField_3.setText(rs_1.getString(1));
			}//统计
			
			int i = 0;
			while(rs.next() && i<rowData.length) {
    
    
					
				rowData[i][0] = rs.getString(1);
				rowData[i][1] = rs.getString(2);   
				rowData[i][2] = rs.getString(3);   
				rowData[i][3] = rs.getString(4);   
				rowData[i][4] = rs.getString(5);
				rowData[i][5] = rs.getString(6);
				rowData[i][6] = rs.getString(7);
				rowData[i][7] = rs.getString(8);
				i++;
			}
			dbConn.close();
		} catch (SQLException e1) {
    
    
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
    
    
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		String []item = new String[] {
    
    "书号","书名","作者","出版社","定价","内容简介","状态","分类"};
				
		JComboBox comboBox = new JComboBox(item);
		comboBox.addItemListener(new ItemListener() {
    
    //不必要监听器
			public void itemStateChanged(ItemEvent e) {
    
    
				//textField_2.setText(e.getItem());
			}
		});
		comboBox.setBounds(172, 6, 139, 23);
		contentPane.add(comboBox);
		
		
		JButton btnNewButton = new JButton("\u67E5\u8BE2");
		btnNewButton.addActionListener(new ActionListener() {
    
    		//查询
			public void actionPerformed(ActionEvent e) {
    
    
				String str = new String(textField_2.getText());					//列元素
				String str_1 = new String((String) comboBox.getSelectedItem());//列名
				//从文本框下拉列表读取要查询的分类
				try {
    
    
					String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";
					String userName="sa";
					String userPwd="QWEASDZXC000000";
					Connection dbConn = null;
					Statement state = null;
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
					dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
					state = dbConn.createStatement();
					
					String sql0 = "select * from 图书 where "+str_1+"='"+str+"'" ;
					ResultSet rs = state.executeQuery(sql0);		
					
					Statement stateCnt = dbConn.createStatement();
					String sql1 = "select count(*) from 图书 where "+str_1+"='"+str+"'"; 
																//填入列名,	列元素
					ResultSet rs_1 = stateCnt.executeQuery(sql1);
					int n = 0;
					while(rs_1.next()) {
    
    
						textField_3.setText(rs_1.getString(1));
						n= Integer.parseInt(rs_1.getString(1));
					}//统计数量
					
					int i = 0;
					while(rs.next() && i<rowData.length) {
    
    	//显示到表格中
						rowData[i][0] = rs.getString(1);
						rowData[i][1] = rs.getString(2);   
						rowData[i][2] = rs.getString(3);   
						rowData[i][3] = rs.getString(4);   
						rowData[i][4] = rs.getString(5);
						rowData[i][5] = rs.getString(6);
						rowData[i][6] = rs.getString(7);
						rowData[i][7] = rs.getString(8);
						i++;
					}
					while(i>=n && i<rowData.length) {
    
    
						rowData[i][0] = null;
						rowData[i][1] = null;
						rowData[i][2] = null;
						rowData[i][3] = null;
						rowData[i][4] = null;
						rowData[i][5] = null;
						rowData[i][6] = null;
						rowData[i][7] = null;
						i++;
					}
				//刷新
					TableModel tml = new DefaultTableModel(rowData,Name);
					table.setModel(tml);
				
					dbConn.close();
				} catch (SQLException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
		
			}
		});
		btnNewButton.setBounds(363, 6, 93, 23);
		contentPane.add(btnNewButton);
		
		
		JButton btnNewButton_1 = new JButton("\u53D6\u6D88");
		btnNewButton_1.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
				try {
    
    
					String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";
					String userName="sa";
					String userPwd="QWEASDZXC000000";
					Connection dbConn = null;
					
					Statement state = null;
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
					dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
					state = dbConn.createStatement();
					String sql0 = "select * from 图书";
					ResultSet rs = state.executeQuery(sql0);
					
					Statement stateCnt = dbConn.createStatement();
					String sql1 = "select count(*) from 图书";
					ResultSet rs_1 = stateCnt.executeQuery(sql1);
					while(rs_1.next()) {
    
    
						textField_3.setText(rs_1.getString(1));
					}//统计
					
					int i = 0;
					while(rs.next() && i<rowData.length) {
    
    
							
						rowData[i][0] = rs.getString(1);
						rowData[i][1] = rs.getString(2);   
						rowData[i][2] = rs.getString(3);   
						rowData[i][3] = rs.getString(4);   
						rowData[i][4] = rs.getString(5);
						rowData[i][5] = rs.getString(6);
						rowData[i][6] = rs.getString(7);
						rowData[i][7] = rs.getString(8);
						i++;
					}
					TableModel tml = new DefaultTableModel(rowData,Name);
					table.setModel(tml);
					
					dbConn.close();
				} catch (SQLException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		btnNewButton_1.setBounds(462, 7, 93, 23);
		contentPane.add(btnNewButton_1);
		
	}
}

**4.1.2出现的问题及做法**
		1.用户通过个人账号使用该系统,则用户的操作都绑定在该账号,如修改信息时,只能修改本账号信息而不能修改他人信息。
		对此,我的做法是:在用户登录成功时,将登录的账号、登录时间写入数据库的“操作账号”表,表示当前正在使用该系统的是某某用户。

Oyente de inicio de sesión de administrador

JButton btnNewButton_1 = new JButton("\u767B\u5F55");
		btnNewButton_1.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
				String strP = new String(passwordField.getPassword());//密码
				String strT = new String(textField.getText());//工号
				
				String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";
				String userName="sa";
				String userPwd="QWEASDZXC000000";
				Connection dbConn = null;
				String sql = "select 工号,密码 from 图书管理员";
				
				try {
    
    
					Statement state = null;
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
					dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
					state = dbConn.createStatement();
					ResultSet rs = state.executeQuery(sql);
					while (rs.next()) {
    
    
						//System.out.println(rs.getString(1)+" "+rs.getString(2));
						if(strT.equals(rs.getString(1)) && strP.equals(rs.getString(2))) {
    
    
							
							Calendar c = Calendar.getInstance();
							
							M_mainPage mPage = new M_mainPage();
							mPage.setVisible(true);
							lblNewLabel_3.setVisible(false);
							PreparedStatement pst = null;
							pst = dbConn.prepareStatement("insert into 操作账号 values(?,?)");//记录当前正在使用的用户
							pst.setString(1, strT);//插入账号
							pst.setTimestamp(2, new Timestamp(c.getTimeInMillis()));//插入时间戳
							pst.addBatch();
							pst.executeBatch();

							lblNewLabel_3.setVisible(false);
						}
						else {
    
    
							lblNewLabel_3.setVisible(true);
						}
					}
					dbConn.close();
					
				} catch (SQLException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});

Modificar oyente de información personal

JButton btnNewButton_1 = new JButton("\u4FDD\u5B58");		//保存修改信息
		btnNewButton_1.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
				String name = new String(textField.getText());//姓名
				String work = new String(textField_2.getText());//职称
				String sex = new String(textField_1.getText());//性别
				String phone = new String(textField_3.getText());//电话号码
				String num = new String();//工号
				
				String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";
				String userName="sa";
				String userPwd="QWEASDZXC000000";
				Connection dbConn = null;
				
				try {
    
    
					Statement state = null;
					Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
					dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
					state = dbConn.createStatement();
				//通过获得“操作账号”表的最后一行(最新一行)得到当前正在使用系统的用户是......
					String sql0 = "select top 1* from 操作账号 order by 时间 desc";
					ResultSet rs = state.executeQuery(sql0);		//最后一行
					String s1 = new String();
					while(rs.next()) {
    
    
						s1 = rs.getString(1);
					}
					
					num = s1;//工号
					
					PreparedStatement pst = null;
					//如果文本框内容不为空,则据此修改数据库表内容
					if (name.equals("") == false) {
    
    
						String sql = "update 图书管理员 set 姓名=? where 工号=?";
						pst = dbConn.prepareStatement(sql);
						pst.setString(1, name);
						pst.setString(2, num);//工号是当前登录的账号,来自“操作账号”表
						pst.executeUpdate();
						
					}
					if(sex.equals("") == false) {
    
    
					//性别限定在“男”、“女”,出错时通过标签显示告知使用者
						try {
    
    
							String sql = "update 图书管理员 set 性别=? where 工号=?";
							pst = dbConn.prepareStatement(sql);
							pst.setString(1, sex);
							pst.setString(2, num);
							pst.executeUpdate();
							lblNewLabel_4.setVisible(false);
						}
						catch(Exception ee) {
    
    
							// TODO Auto-generated catch block
							ee.printStackTrace();
							lblNewLabel_4.setVisible(true);
							lblNewLabel_5.setVisible(false);
						}
					}
					if(work.equals("") == false) {
    
    
						String sql = "update 图书管理员 set 职称=? where 工号=?";
						pst = dbConn.prepareStatement(sql);
						pst.setString(1, work);
						pst.setString(2, num);
						pst.executeUpdate();
						
					}
					if(phone.equals("") == false) {
    
    
						String sql = "update 图书管理员 set 联系电话=? where 工号=?";
						pst = dbConn.prepareStatement(sql);
						pst.setString(1, phone);
						pst.setString(2, num);
						pst.executeUpdate();
						
					}
					
					Statement stateCnt = dbConn.createStatement();
					String sql1 = "select * from 图书管理员 where 工号='"+num+"'";
					ResultSet rs_1 = stateCnt.executeQuery(sql1);
					
					int i = 0;
					while(rs_1.next() && i<rowData.length) {
    
    
						rowData[i][0] = rs_1.getString(1);
						rowData[i][1] = rs_1.getString(2);   
						rowData[i][2] = rs_1.getString(3);   
						rowData[i][3] = rs_1.getString(4);   
						rowData[i][4] = rs_1.getString(5);
						i++;
					}
					//刷新表格
					TableModel tml = new DefaultTableModel(rowData,Name);
					table.setModel(tml);
				
					pst.close();
					dbConn.close();
					if(lblNewLabel_4.isVisible()) {
    
    
						lblNewLabel_5.setVisible(false);
					}else {
    
    
						lblNewLabel_5.setVisible(true);
					}
					
				} catch (SQLException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (ClassNotFoundException e1) {
    
    
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			
			}
		});

**4.3.0增删改查**

aumentar

PreparedStatement pst = null;
pst = dbConn.prepareStatement("insert into 图书 values(?,?,?,?,?,?,?,?)");
pst.setString(1, num);//书号
pst.setString(2, name);//书名
pst.setString(3, writer);//作者
pst.setString(4, publish);//出版社
pst.setString(5, price);//定价
pst.setString(6, intro);//内容简介
pst.setString(7, status);//状态
pst.setString(8, cla);//分类
pst.addBatch();
pst.executeBatch();
dbConn.close();
	

borrar

String sql0 = "delete from 图书 where 书号= ?";
	PreparedStatement pst = dbConn.prepareStatement(sql0);
	pst.setString(1, num);//书号
	pst.addBatch();
	pst.executeBatch();
	lblNewLabel_4.setVisible(true);//显示删除成功
	dbConn.close();
		

cambiar

PreparedStatement pst = null;
if (name.equals("") == false) {
    
    
	String sql = "update 图书 set 书名=? where 书号=?";
	pst = dbConn.prepareStatement(sql);
	pst.setString(1, name);
	pst.setString(2, num);							
	pst.executeUpdate();
}

controlar

try {
    
    
			String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManagement";
			String userName="sa";
			String userPwd="QWEASDZXC000000";
			Connection dbConn = null;
			
			Statement state = null;
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
//连接数据库
			state = dbConn.createStatement();
			String sql0 = "select * from 图书";
			ResultSet rs = state.executeQuery(sql0);
			
			Statement stateCnt = dbConn.createStatement();
			String sql1 = "select count(*) from 图书";
			ResultSet rs_1 = stateCnt.executeQuery(sql1);
			while(rs_1.next()) {
    
    
				textField_3.setText(rs_1.getString(1));
			}//统计总数
			
			int i = 0;//查询结果显示到Java表格组件
			while(rs.next() && i<rowData.length) {
    
    
				rowData[i][0] = rs.getString(1);
				rowData[i][1] = rs.getString(2);   
				rowData[i][2] = rs.getString(3);   
				rowData[i][3] = rs.getString(4);   
				rowData[i][4] = rs.getString(5);
				rowData[i][5] = rs.getString(6);
				rowData[i][6] = rs.getString(7);
				rowData[i][7] = rs.getString(8);
				i++;
			}
			dbConn.close();
		} catch (SQLException e1) {
    
    
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
    
    
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

código fuente completo

Archivos compartidos a través de Baidu Netdisk: Book Management System V1...
Enlace: https://pan.baidu.com/s/1NQczvOX0n0_g0pDx3iiIXw Código de extracción: po48 Copie este contenido y abra "Baidu Netdisk APP para obtenerlo"

Supongo que te gusta

Origin blog.csdn.net/Are_you_kidding_/article/details/126015108
Recomendado
Clasificación