用反射完成学生管理系统(包括数据库连接)

今天我终于将坑爹的万能数据库链接做好了第一步了,插入数据。

虽说很简单,但还是应该总结一些问题。

一路的坎坷只能现在表达了。

下面就是一些问题以及过程:

最重要的问题可能就是sql语句了,今天弄了好久的sql语句中的错误。

一、我们需要先来总结我们的sql几个语句:

判断表是否存在:

方法:

ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)

参数:

catalog - 类别名称,因为存储在数据库中,所以它必须匹配类别名称。该参数为 "" 则检索没有类别的描述,为 null 则表示该类别名称不应用于缩小搜索范围

schemaPattern - 模式名称的模式,因为存储在数据库中,所以它必须匹配模式名称。该参数为 "" 则检索那些没有模式的描述,为 null 则表示该模式名称不应用于缩小搜索范围

tableNamePattern - 表名称模式,因为存储在数据库中,所以它必须匹配表名称

types - 要包括的表类型组成的列表,null 表示返回所有类型

返回:

ResultSet - 每一行都是一个表描述

下面是代码:

DatabaseMetaData meta = con.getMetaData();

ResultSet rsTable = meta.getTables(null, null, this.Clazz.getSimpleName(), null);

if(rsTable.next()){

表存在

}

判断完表后,我们就该做做下一步:如果没表,新建,添数据:

新建表的语句:

CREAT TABLE tablename (id varchar(255) , age int(255))

后面的参数是    :      你的变量名 变量类型(变量长度) , ......

添加数据的语句:

insert into tablename (id , age) values (1,1)

这里就不详解了

其他的连接数据库直接上代码:

//----------------------------- 连接数据库 --------------------------------------//

public Connection ConnectingMysql() throws SQLException{

String drivename = "com.mysql.jdbc.Driver";

String url = "jdbc:mysql://localhost:3306/dbhouse";

String userName = "root";//mysql用户名

String password = "root";//mysql用户密码

try {

Class.forName(drivename);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

connection = DriverManager.getConnection(url, userName, password);

return connection;

}

//---------------------------------------------------------------------------------------//

还有个值得注意的地方:

关于最后执行sql语句的时候,statement这个接口下的三个带execute的方法,很容易混淆。

mysql
中execute、executeQuery和executeUpdate之间的区别

http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2fmon_key_dt%2farticle%2fdetails%2f40516043

二、关于反射传递的数据

首先传入的是我要保存的对象名,通过newinstance()方法取出我的对象

Object object = this.Clazz.newInstance();

再来就是循环输出对象中的变量名和变量类型,提示输入

for (Field field : this.Clazz.getDeclaredFields())

System.out.println("please input "+field.getName()+"("+field.getType().getSimpleName()+"):");

String valueString = scanner.nextLine(); //输入数据

Object value = null;

if(field.getType().equals(String.class)) //判断数据类型

{

value = valueString;

}

......还有很多其他的类型判断我就不贴在这里了

每次输入完成,保存对象信息

field.set(object, value);

最后,保存数据给全局变量,以便最后传给数据库做准备

dataName += field.getName() + ","; //所有数据的名字

if(field.getType().equals(Integer.class) || field.getType().equals(int.class)){

data[dataLength ++] = field.getName() + " int(255),"; //为数据库的creat table 做准备

dataType += "int,"; //数据类型

System.out.println("datatype : " + dataType);

dataValue += valueString + ","; //数据值

System.out.println("datavalue : " + dataValue);

}

else {

data[dataLength ++] = field.getName() + " varchar(255),";

dataType += "varchar,";

System.out.println("datatype : " + dataType);

dataValue += valueString + ",";

System.out.println("datavalue : " + dataValue);

}

到这里,基本就已经完成了。数据库中的insert 以及create table 也直接上代码

不上台面的方法大家就睁一只眼闭一只眼吧。

//新建表

String tableMessage = "";

for(int i = 0 ; i < dataLength ; i++){

tableMessage += data[i];

}

String sql_newTable = "CREATE TABLE " + this.Clazz.getSimpleName() + "("

+ tableMessage.substring(0, tableMessage.length() - 1) + ")";

System.out.println(sql_newTable);

statement.execute(sql_newTable);

//插入数据

String sql_add = "insert into " + this.Clazz.getSimpleName() + "("

+ dataName.substring(0, dataName.length() - 1) + ") "//变量名

+ "values(" + dataValue.substring(0, dataValue.length() - 1) +")";//(?,?,?,?)

System.out.println(sql_add);

statement.executeUpdate(sql_add);

小白一枚,有错之处希望大家及时帮我改正。

时间: 10-26

用反射完成学生管理系统(包括数据库连接)的相关文章

用反射完毕学生管理系统(包含数据库连接)

今天我最终将坑爹的万能数据库链接做好了第一步了,插入数据. 虽说非常easy.但还是应该总结一些问题. 一路的坎坷仅仅能如今表达了. 以下就是一些问题以及过程: 最重要的问题可能就是sql语句了.今天弄了好久的sql语句中的错误. 一.我们须要先来总结我们的sql几个语句: 推断表是否存在: 方法: ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types) 參数:

学生管理系统初步总结

之前我们已经学过了windows窗体应用的一些基本控件.今天我们就用我们用我们所学的一些知识来写一写学生管理系统! 登录窗体 首先程序已启动我们所看到的就是登录窗体.它包括文本框.标签.和按钮.那么密码框是怎么实现的呢? 只需要将文本框的passwordchar属性该成任意但个字符那么这个文本框就会变成密码框并且该密码框中输入的字符会用您设定的字符代替如图所示: 将该属性的值设置为’●’那么您在密码框中输入的任意字符都会以’●’代替显示! 窗体的事件 按钮一般都会出发一些事件,而我们的这个项目中

精美学生管理系统

半个学期即将完美结束,精美的学生管理系统也终于亮相啦,哈哈! 话不多说,切入正题. 首先,要了解完成学生管理系统的步骤: 总共有几个模块,我就逐一讲解: 一:完成登录页面模块 判断“登录”是否成功的代码: 1 private void btnLogin_Click(object sender, EventArgs e) 2 { 3 string str = DBHelper.str; 4 SqlConnection con = new SqlConnection(str); 5 string s

Java 图形界面开发--图文并茂建立学生管理系统

图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作. 这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统.虽然说不入大神法眼,但这确实是费了自己不少心血.对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调.在此分享出来希望对和我一样的菜鸟有帮助. 程序完整代码下载地址见: https://github.com/chaohuangtianjie994/The-Sys

【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

基于双向循环链表的学生管理系统

基于双向循环链表实现的学生管理系统,包括初始化,插入,删除,查抄,保存,自动按照姓名排序功能,退出并保存功能. 实现思想是将程序的各个部分划分为三个层次.主函数为界面层,即客户端层:其中后缀为Student的一般是某个功能的调度函数,属于逻辑层的内容:在调度函数之下有相应的被调度的函数,也就是相应功能的实现函数,一般后缀名为Node,意思就是这个函数直接操作链表中的结点,可以简单的划分为实现层: 这样分层实现呢有利于代码维护和个功能之间对包含或者重叠功能的直接调用,从而提高代码重用度,而降低代码

学生管理系统——基于双向循环链表

基于双向循环链表实现的学生管理系统,包括初始化,插入,删除,查抄,保存,自动按照姓名排序功能,退出并保存功能. 实现思想是将程序的各个部分划分为三个层次.主函数为界面层,即客户端层:其中后缀为Student的一般是某个功能的调度函数,属于逻辑层的内容:在调度函数之下有相应的被调度的函数,也就是相应功能的实现函数,一般后缀名为Node,意思就是这个函数直接操作链表中的结点,可以简单的划分为实现层: 这样分层实现呢有利于代码维护和个功能之间对包含或者重叠功能的直接调用,从而提高代码重用度,而降低代码

C语言 学生管理系统

//学生成绩管理系统 //用户名:enjoy65 //密码: enjoy65 #include<stdio.h> #include<string.h> #include<stdlib.h> //定义全局变量x,i,j,n char x; int i,j, n; struct student //定义结构体 { int id ; char name[20]; float Math; float English; float Chinese; float average;

JDBC应用、控制台连MySQL接数据库实现学生管理系统的登录注册、增删改查

**=====================连接数据库=====================** package com.sore.jdbc; import java.sql.*; public class Jdbc { static Connection conn=null; //创建连接桥 public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); //加载驱动 S