java之数据管理系统软件

1 篇文章 0 订阅
1 篇文章 0 订阅

学习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连接数据库的代码部分为:
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数据库的增加(新建数据库)

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

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

java数据库之删表操作

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

在这里插入图片描述在这里插入图片描述在这里插入图片描述这样 成绩表就删完了

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;
	}

在这里插入图片描述
进入删除模式
在这里插入图片描述在这里插入图片描述id为15和19的已删除

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

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

//用户的每个字段我用ArrayList<String>来储存,长度值,字段类型同理
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数据库操作之增加数据

新的表建好了,我们可以往这个表添加数据,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’>数组,得到了就可以确定输入数据的字段数是多少了,
每个字段的类型是什么,长度限制等等

结果如下:

在这里插入图片描述系统自动判断了该表有8个字段 ,每个字段的类型 ,每个字段类型的长度,下面进行添加数据

在这里插入图片描述
在这里插入图片描述好了,数据插入成功有提示,提示 或者不提示你成功插入数据 可以在设置里改(后面有说明)

在这里插入图片描述
在这里插入图片描述
刷新后我们就可以看到插入的数据

在这里插入图片描述

java数据库之查找

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

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

结果如下:

在这里插入图片描述
在这里插入图片描述

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

为了让用户体验更好 可以对软件进行一些属性设置
在这里插入图片描述可以设置字体和大小

在这里插入图片描述背景和皮肤
在这里插入图片描述

目录
在这里插入图片描述Boss键

在这里插入图片描述一些限制设置,按钮风格,各种颜色

在这里插入图片描述
总的来说,消化这些知识点是需要一定时间的,如果有什么功能想知道怎么实现或者需要代码包jar学习的
可以留言

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值