java之数据管理系统软件
学习java数据库的基础操作:连接,增删查改;css的广泛应用,在此基础上,数据管理系统软件是这些知识点的综合项目
为了掌握和牢固java数据库的知识点,在空闲之余写了这个软件,数据库使用的是Mysql小型数据库,需要安装WAMP软件。也可以使用大型数据库甲骨文数据库,不知为何,中型的SQL Serve 2012数据库我一直没有连接成功。
本软件完成所需要的材料:
- java编译器 我的是Eclipse
- JDBC数据库连接池驱动包 sqljdbc42.jar
- javaFX环境 GUI界面编程
- wamp软件
- 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)+"),");}elsesql.append(tabName_and_columnName.get(i+1)+" "+language.get(i)+",");elseif(language.get(i).equals("char")) {sql.append(tabName_and_columnName.get(i+1)+" "+language.get(i)+" ("+length.get(i)+") )");}elsesql.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)+",";elsesqlCommand = 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学习的
可以留言
java之数据管理系统软件相关推荐
- JAVA查询用户卡包,一种Java卡包数据管理方法
一种Java卡包数据管理方法 [技术领域] [0001] 本发明涉及计算机技术领域,具体涉及一种Java卡包数据管理方法. [背景技术] [0002] 随着金融电子化的全面发展,为解决用户对一卡多用的 ...
- SLG手游Java服务器数据管理方案
前言 这一年左右的时间,我参与并完成了一款SLG手游的研发,我负责游戏的服务端研发.这是一款以三国为题材的游戏,除了有三国名将的卡牌养成.多种多样装备养成.PVE,玩家竞技场等常见玩法外,我们的游戏的 ...
- java内存数据管理
准确的说应该是java8以前的内存管理方式 区别在永久代(方法区)上 public class RamManager {//1.a存储于永久代public static int a =1;privat ...
- 第二期阿里巴巴 Java Meetup 来北京了。你来么?
在互联网.云计算.物联网高速发展的今天,Java以其良好的安全性.开放性.稳定性.跨平台性等特性,始终保持着领先地位.阿里巴巴和国内很多公司一起,积极主动得参与Java生态的建设,贡献了许多优秀的开源 ...
- java图形化界面操作和命令行操作,常用的命令行指令
第1章 JAVA语言概述 系统软件即操作系统 做开发需要掌握一定的命令行指令 Java程序执行需要借助命令行 打开cmd方式 一 点击搜索输入cmd 二 按window键加R键,弹出窗口后再输入cm ...
- BDB 入门篇 第1章 Berkeley DB Java Edition简介
1. Berkeley DB Java Edition 简介 Berkeley DB Java Edition官网 Berkeley DB Java Edition官网文档 JE是一个100%用Jav ...
- 基于JAVA疫苗预约系统设计与实现 开题报告
本科生毕业论文 基于Java疫情疫苗预约系统springboot框架 开题报告 学 院: 专 业: 计算机科学与技术 年 级: 学生姓名: 指导教师: XXXX大学本科生毕业 ...
- (附源码)ssm无人机数据管理系统 毕业设计 111022
ssm无人机数据管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采 ...
- linux搭建ca服务器搭建,linux下安装EJBCA 搭建私有CA服务器
linux下安装EJBCA 搭建私有CA服务器 EJBCA是一个全功能的JAVA的CA系统软件,我们可以用此搭建私有CA服务器: 一:首先我的测试环境: 1. linux mint18.3 62位: ...
最新文章
- “光名字就想了一年”,苹果三位高管谈M1芯片
- 一年以来我最好的创意
- pycharm 皮肤主题及个性化设置
- 学习笔记 - 002
- python为mysql设置id自增长_python mysql自增字段AUTO_INCREMENT值的修改方式
- sqlserver sql行专列_Sqlserver 列转行 行转列
- 招聘笔试行测题之图形推理题解题思路汇总
- java 英文题_java英文试题
- 怎么把qlv格式转成mp4
- 《编码:隐匿在计算机软硬件背后的语言》一书勘误
- 网络爬虫爬取时,被封的原因以及防止被封IP策略
- Anchor box坐标(Sac,Sar,Eac,Ear)到Precdict box坐标(Spc,Spr,Epc,Epr)关系推导
- F28335的DSP中主频的配置
- Python生成透明背景图片
- 15k的php会什么,【后端开辟】15k的php须要控制什么手艺
- Android手机图片上传 选择不了本地照片 解决方案
- 解决win10下 git闪退的问题(或者使用git命令报错fatal: open /dev/null or dup failed)
- HDU 6608:Fansblog(威尔逊定理)
- InputStream 和OutputStream
- 《数据结构》实验报告七:查找
热门文章
- 自定义线程池拒绝策略
- CVPR 2022上人脸识别相关的论文分类整理
- 一款功能强大的客户端研发助手,适用于 iOS 、Android、微信小程序 !移动端开发必备...
- [Re]南邮ctf平台逆向题
- brafteditor防抖_braft-editor
- STM32之ADM706驱动
- 树莓派python工业数据采集系统
- Fanuc数据控机床数据采集Focus2基于c#的数据采集
- Creo导入电路生成的emn格式文件并编辑标注尺寸-提示不重新生成模型错误-解决
- [DCDC](DC-DC 电感)纹波率r是难题?来我这里来学习