java之数据管理系统软件

学习java数据库的基础操作:连接,增删查改;css的广泛应用,在此基础上,数据管理系统软件是这些知识点的综合项目

为了掌握和牢固java数据库的知识点,在空闲之余写了这个软件,数据库使用的是Mysql小型数据库,需要安装WAMP软件。也可以使用大型数据库甲骨文数据库,不知为何,中型的SQL Serve 2012数据库我一直没有连接成功。

本软件完成所需要的材料:

  1. java编译器 我的是Eclipse
  2. JDBC数据库连接池驱动包 sqljdbc42.jar
  3. javaFX环境 GUI界面编程
  4. wamp软件
  5. exe4j 很好用的jar打包软件,用来将jar文件打包成exe

数据管理系统软件可以让用户自定义需要创建的表,自定义表的字段的类型,属性,轻松插入数据,修改数据,查找数据,删除数据,利用各种统计图选择属性进行比较和走向趋势。例如管理学生信息,成绩和绩点比较,还可以将数据导出成为表格文件并利用打印机打印出来。

java数据库的连接

java连接mysql数据库需要相关的驱动,因为要连接mysql数据库,需要导入相关的封装好的类就是封装好的jar包,叫sqljdbcxx.jar,由于jdk版本不一样,所以需要不一样的xx版本对应的jar,在这里我使用的是sqljdbc42.jar,各种版本百度随便一搜就有了.
在这里插入图片描述
wamp状态为绿色则表示配置ok,可以正常使用sql服务,图如下
在这里插入图片描述

做好这些准备后我们就可以尝试连接数据库了

  • 我们先登入到mysql数据库,新建一个数据库,然后创建一个表,再往其中插入数据
    在这里插入图片描述
    java之数据管理系统软件_第1张图片java连接数据库的代码部分为:
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.microsoft.sqlserver.jdbc.SQLServerException;
import com.mysql.jdbc.PreparedStatement;
//连接数据库要导入的一些模块

Connection ct = null;   //新建一个连接对象
String dbURL="jdbc:mysql://localhost:3306/"+dbURL_+"?useUnicode=true&characterEncoding=UTF8";  //定义好要连接sql的数据库和一些字符编码设置
String sql = "select * from greens;"; //等会执行的sql语句 greens是要查询数据的表
try {
	//加载驱动
	Class.forName("com.microsoft.mysql.jdbc.mysqlDriver").newInstance();
	} catch (InstantiationException e) {
		wamp.setContentText("加载驱动有错误");
	}
ct = DriverManager.getConnection(dbURL,"root",""); //连接数据库 mysql phpadmin默认的管理员是root,密码为空
if(ct!=null) {  //如果连接的数据库不存在或者登入失败,dbURL语法错误(端口占用等等)
	try {
	
			re = ct.createStatement().executeQuery(sql); //执行sql语句,对表greens进行查询
			
		} catch (SQLException e) {
			wamp.setContentText("sql语句执行失败");
		}
	}	

如果没有问题(返回的ct不为空),那么将成功查询到greens中的数据
java之数据管理系统软件_第2张图片
在软件中,我使用了用户输入来登入并连接数据库的输入框
java之数据管理系统软件_第3张图片
登入成功后将显示连接的数据库和表
java之数据管理系统软件_第4张图片右边的表选择器有这个数据库的所有表

java之数据管理系统软件_第5张图片java之数据管理系统软件_第6张图片

java数据库的增加(新建数据库)

首先 ,我们需要知道新建数据库的java代码,如下:

sqlCommand = "Create database "+newDB;  //新建数据库的名
//先连接数据库
/*..上面的代码..*/
//连接成功后执行语句,更上面一样
ct.createStatement().execute(sqlCommand); //执行了之后新建的数据库就在

java之数据管理系统软件_第7张图片
java之数据管理系统软件_第8张图片

java之数据管理系统软件_第9张图片

java数据库之删表操作

//先进行连接数据库
	String SQLcommand = "delete from "+tab+" where "+column1+" = "+column1Value+";";
//然后执行SQLcommand 语句
ct.createStatement().execute(SQLcommand);

java之数据管理系统软件_第10张图片java之数据管理系统软件_第11张图片java之数据管理系统软件_第12张图片这样 成绩表就删完了

java删表的数据的操作

一般来说,表的第一个字段就是它的id,id是每个数据的身份证,在数据库中找到它并且执行语句就可以将id符合的删除.函数返回了一个字符串用来告诉用户删除是否成功,函数代码如下:

public String deleteTableData(String user,String pass,String db,String tab,String column1,String column1Value) {
		//                           用户账号     密码        数据库     表       字段名          字段值
		//大多数默认情况是第一列是身份证标识,不可以存在重复的数据,不然将匹配多个。
		String result = "删除成功!";
		String dbURL = "jdbc:mysql://localhost:3306/"+db+"?seUnicode=true&characterEncoding=UTF8";
		String SQLcommand = "delete from "+tab+" where "+column1+" = "+column1Value+";";  //主要sql语句知识点
		Connection ct = null;
		try {
			ct = DriverManager.getConnection(dbURL, user, pass);
			if(ct!=null) {
				ct.createStatement().execute(SQLcommand);
				result = "删除完毕!";
			}
		} catch (SQLException e) {
			result = "SQL连接失败";
		}
		return result;
	}

java之数据管理系统软件_第13张图片
进入删除模式
java之数据管理系统软件_第14张图片java之数据管理系统软件_第15张图片id为15和19的已删除

java的建表操作,创建一个新的表

建表比较复杂,它需要收集用户建立的字段数和字段属性,字段属性长度,数据判断是否合法,类型之间的关系
代码如下:

//用户的每个字段我用ArrayList来储存,长度值,字段类型同理
fullOfTabDataName = new ArrayList<>();
fullOfTabDataType = new ArrayList<>();
fullOfTabDataLength = new ArrayList<>();
//...一些方法收集用户的数据
//然后提交
public String tabCreate(String db,String user,String pass,
			ArrayList<String> tabName_and_columnName,ArrayList <String> type,
				ArrayList<String> length) {
		//参数有(数据库  用户  密码   表的名和字段名整合的一个arraylist数组 字段类型数组  字段长度数组)
		String result = "新建表成功!";
		Connection ct = null;
		ArrayList<String> language = new ArrayList<>();
		String dbURL="jdbc:mysql://localhost:3306/"+db+"?useUnicode=true&characterEncoding=UTF8";
		//尝试加载驱动
		try {
			ct = DriverManager.getConnection(dbURL,user,pass);
		} catch (SQLException e) {
			//System.out.println("连接失败:\n"+e.getMessage()+"\n"+e.getSQLState()+"\n"+e.getErrorCode()+"\n"+e.getLocalizedMessage());
			result = "连接数据库时有错误,错误类型1:"+e.getMessage();
		}
			
			if(ct == null) {
				result = "连接数据库"+db+"不成功。";
			}
			else {
				//类型转高级语言码
				//这里我只写了两种类型的语言转化,后面更新软件的版本会继续添加更多类型
				for(int j = 0;j<type.size();j++) {
					if(type.get(j).equals("文本")) {
						language.add("char");
					}
					else if(type.get(j).equals("整数")) {
						language.add("int");
					}
					else {
						language.add("char");
					}
					
				}

				
			}
				StringBuilder sql = new StringBuilder();   //确定建表时将要执行的sql语句
				sql.append("create table "+tabName_and_columnName.get(0).toString()+"(");
				for (int i = 0;i<(tabName_and_columnName.size()-1);i++) {//因为 0是表名 所以-1  再-1是为了控制格式
					if(i<(tabName_and_columnName.size()-1)-1)
						if(language.get(i).equals("char")) {
							sql.append(tabName_and_columnName.get(i+1)+" "+language.get(i)+" ("+length.get(i)+"),");
						}
						else
							sql.append(tabName_and_columnName.get(i+1)+" "+language.get(i)+",");
					else
						if(language.get(i).equals("char")) {
							sql.append(tabName_and_columnName.get(i+1)+" "+language.get(i)+" ("+length.get(i)+") )");
						}
						else
							sql.append(tabName_and_columnName.get(i+1)+" "+language.get(i)+")");
				}
				try {
					
					sql.append(" engine= Innodb charset=utf8;");
					System.out.println(sql); 
					ct.createStatement().execute(sql.toString());
				} catch (SQLException e) {
					result = "执行语句失败,原因可能有如下等\n1.表名跟数据库里所拥有的表重复\n2.中文(表/字段)名没有加双引号\n3.执行的sql语句错误";
				}
	
		return result;
	}


结果如下:

java之数据管理系统软件_第16张图片
系统会自动判断表名和每个输入框的值,数据是否符合要求

java之数据管理系统软件_第17张图片
填写一些属性

java之数据管理系统软件_第18张图片
点击确定时提示建的表的所有字段
java之数据管理系统软件_第19张图片java之数据管理系统软件_第20张图片这时候我们返回到主界面查看所建立的表

java之数据管理系统软件_第21张图片新的表已经建好

java数据库操作之增加数据

新的表建好了,我们可以往这个表添加数据,java的数据库增加数据代码主要如下:

//最基本的知识点
		String result = "执行成功,成功插入";
		Connection ct = null;
		String sqlCommand = "insert into "+tab+" values(";
		for(int i  = 0;i<insert_column_data.size();i++) {
			if(i <insert_column_data.size()-1)
				sqlCommand = sqlCommand+insert_column_data.get(i)+",";
			else
				sqlCommand = sqlCommand+insert_column_data.get(i)+")";
			
		}
		//sqlCommand是 将要执行的sql语句
		
		//下面进行连接数据库 和 执行sqlCommand语句
		String db_reference = "jdbc:mysql://localhost:3306/"+db+"?useUnicode=true&characterEncoding=UTF8";
		
		try {
			ct = DriverManager.getConnection(db_reference, user, pass);
			if(ct!=null) {
				try {
					
					ct.createStatement().execute(sqlCommand);
				}
				catch(Exception error2) {
					result = "执行的时候出错,请检查数据合法性";
				}
			}
			else {
				result = "数据库出差错了。";
			}
		}catch(Exception e) {
			result = "连接数据库时出错了。";
		}
		
		
		return result;
	}

我们使用GUI界面编程的时候怎么知道这个表有多少个字段 或者字段类型 字段长度呢?
代码如下:

ArrayList<String>wait_insert_column_eachName = new ArrayList<>();
ArrayList<String>wait_insert_column_eachType ;
ArrayList<String>wait_insert_column_eachType_size ; //大小
//下面类的三个方法 分别得到 
//表的每个字段的名字
//表的每个字段类型  比如 int
//表的每个字段的类型的长度
column_eachName = SQL.getColumnName(curr_db, curr_user, curr_pass, curr_tab);
wait_insert_column_eachType= SQL.each_getColumn_type(curr_db, curr_user, curr_pass, curr_tab);
wait_insert_column_eachType_size = SQL.each_getColumn_type_size(curr_db, curr_user, curr_pass, curr_tab);

三个方法具体实现如下

public List<String>getColumnName(String dbURL_2,String name_2,String pass_2,String sql2){
		//参数:                               数据库                                     用户名                            密码                               表
		List<String>name= new ArrayList<>();  //返回所有字段名字
		Connection ct = null;
		String dbURL="jdbc:mysql://localhost:3306/"+dbURL_2+"?useUnicode=true&characterEncoding=UTF8";
		ResultSet re2 = null;
		sql2 = "select * from "+sql2+";";
		try {
			try {
				try {
					Class.forName("com.microsoft.mysql.jdbc.mysqlDriver").newInstance();
					System.out.println("连接成功、");
				} catch (InstantiationException e) {
					
				} catch (IllegalAccessException e) {
					
				}
				//System.out.println("加载数据库成功");
			} catch (ClassNotFoundException e) {
				//System.out.println("加载数据库失败了");
				
			}
			ct = DriverManager.getConnection(dbURL,name_2,pass_2);
		} catch (SQLException e) {
			//System.out.println("连接失败:\n"+e.getMessage()+"\n"+e.getSQLState()+"\n"+e.getErrorCode()+"\n"+e.getLocalizedMessage());
			
		}
		if(ct!=null) {
			try {
				re2 = ct.createStatement().executeQuery(sql2);
				ResultSetMetaData data = re2.getMetaData();
				for(int i = 0;i<data.getColumnCount();i++) {
					name.add(data.getColumnName(i+1));
				}
			} catch (SQLException e) {
				re2 = null;
			}
			try {
				ct.close();
			} catch (SQLException e) {
				System.out.println("关闭失败");
			}
		}
		
		return name;
	}
public ArrayList<String>each_getColumn_type(String dbURL_2,String name_2,String pass_2,String sql2){
												//       数据库                              用户名                           密码                                表
		ArrayList<String> resu = new ArrayList<>();
		Connection ct = null;
		String dbURL="jdbc:mysql://localhost:3306/"+dbURL_2+"?useUnicode=true&characterEncoding=UTF8";
		ResultSet re2 = null;
		sql2 = "select * from "+sql2+";";
		try {
			ct = DriverManager.getConnection(dbURL,name_2,pass_2);
		} catch (SQLException e) {
			System.out.println("出错");
		}
		if(ct!=null) {
			try {
				re2 = ct.createStatement().executeQuery(sql2);
				ResultSetMetaData data = re2.getMetaData();
				for(int i = 0;i<data.getColumnCount();i++) {
					resu.add(data.getColumnTypeName(i+1));
				}
			} catch (SQLException e) {
				re2 = null;
			}
			try {
				ct.close();
			} catch (SQLException e) {
				System.out.println("关闭失败");
			}
		}
		return resu;
	}
public ArrayList<String>each_getColumn_type_size(String dbURL_2,String name_2,String pass_2,String sql2){
		//       数据库                              用户名                           密码                                表
			ArrayList<String> resu = new ArrayList<>();
			Connection ct = null;
			String dbURL="jdbc:mysql://localhost:3306/"+dbURL_2+"?useUnicode=true&characterEncoding=UTF8";
			ResultSet re2 = null;
			sql2 = "select * from "+sql2+";";
			try {
				ct = DriverManager.getConnection(dbURL,name_2,pass_2);
			} catch (SQLException e) {
				System.out.println("出错");
			}
			if(ct!=null) {
				try {
					re2 = ct.createStatement().executeQuery(sql2);
					ResultSetMetaData data = re2.getMetaData();
					for(int i = 0;i<data.getColumnCount();i++) {
						resu.add(String.format("%d",data.getColumnDisplaySize(i+1)));
					//	System.out.println(String.format("%d",data.getColumnDisplaySize(i+1)));
					}
				} catch (SQLException e) {
				re2 = null;
				}
				try {
					ct.close();
				} catch (SQLException e) {
				System.out.println("关闭失败");
				}
				}
			return resu;
			}

三个函数返回的都是装满了数据的arrayList<‘string’>数组,得到了就可以确定输入数据的字段数是多少了,
每个字段的类型是什么,长度限制等等

结果如下:

java之数据管理系统软件_第22张图片系统自动判断了该表有8个字段 ,每个字段的类型 ,每个字段类型的长度,下面进行添加数据

在这里插入图片描述
java之数据管理系统软件_第23张图片好了,数据插入成功有提示,提示 或者不提示你成功插入数据 可以在设置里改(后面有说明)

java之数据管理系统软件_第24张图片
java之数据管理系统软件_第25张图片
刷新后我们就可以看到插入的数据

java之数据管理系统软件_第26张图片

java数据库之查找

有时候需要查找并且删除详细资料,代码流程如下:

//连接数据库
//执行语句
//获取结果

结果如下:

java之数据管理系统软件_第27张图片
java之数据管理系统软件_第28张图片

java 持久化操作之 设置和配置

为了让用户体验更好 可以对软件进行一些属性设置
java之数据管理系统软件_第29张图片可以设置字体和大小

java之数据管理系统软件_第30张图片背景和皮肤
java之数据管理系统软件_第31张图片

目录
java之数据管理系统软件_第32张图片Boss键

java之数据管理系统软件_第33张图片一些限制设置,按钮风格,各种颜色

java之数据管理系统软件_第34张图片
总的来说,消化这些知识点是需要一定时间的,如果有什么功能想知道怎么实现或者需要代码包jar学习的
可以留言

你可能感兴趣的:(java,持久化,数据库)