这个程序是参考张桂珠的《java实用技术书》上的代码,用它交我java的作业实在是有点小题大做了,但是本着做就要做好的原则,还是原原本本的全都做了一遍,这里面有一些错误,我还没有改正过来,这里可以清晰看见我纠结过的痕迹……后面会附上我的实验报告~~~
Conn.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.*;
/**
*
* @author Xinyue
*/
public class ConnDB{
private Statement stmt=null;
ResultSet rs=null;
private Connection conn=null;
String sql;
// String strurl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Program Files\\Tomcat 7.0\\webapps\\0903\\test.mdb";
//String strurl= "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=F:/Program Files/apache-tomcat-7.0.8/webapps/ROOT/mywebstore/mywebstore.accdb";
//String strurl="jdbc:odbc:DRIVER={MicroSoft Access Driver (*.mdb,*accdb)};DBQ=E:/离洛的自学资料/java/学生成绩管理系统/Student1.mdb";
String url="jdbc:odbc:student";
public ConnDB(){}
//打开数据库连接
/**
*
* @throws Exception
*/
public void OpenConn()throws Exception{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(url,"root","root");
System.out.print("ok");
}
catch(Exception e){
System.err.println("OpenConn:"+e.getMessage());
}
}
//执行SQL语句,返回结果集rs
public ResultSet executeQuery(String sql){
stmt=null;
rs=null;
try{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException e){
System.err.println("executeQuery:"+e.getMessage());
}
return rs;
}
//执行SQL语言
public void executeUpdate(String sql){
stmt =null;
rs=null;
try{
stmt=conn.createStatement();
stmt.executeQuery(sql);
conn.commit();
}
catch (SQLException e){
}
}
//关闭stmt
public void clossStmt(){
try{
stmt.close();
}
catch(SQLException e){
System.err.println("closeStmt:"+e.getMessage());
}
}
//关闭数据库连接
public void closeConn(){
try{
conn.close();
}
catch(SQLException ex){
System.err.println("sql.closeConn:"+ex.getMessage());
}
}
}
LoginDB.java
import java.sql.*;
/**
*
* @author Xinyue
*/
public class LoginDB {
String sql;
ResultSet rs=null;
public LoginDB(){
}
public int Test (String struser,String strpwd){
ConnDB cdb=new ConnDB();
sql= "select count(*) from User_Info where username='"+struser+"'and userpasswd ='"+strpwd+"' ";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs==null)
return 0;
if(rs.next()){
if(rs.getInt(1)>0)
return 1;
else
return 0;
}
}catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return 1;
}
}
StuInfoDB.java
import java.sql.*;
import javax.swing.JOptionPane;
public class StuInfoDB {
String sql;
ResultSet rs=null;
public StuInfoDB(){
}
public void stuUpdate(String strid,String strname,String strsex,String strage,String stryear,String strmajor,String strphone,String straddr){
if(strid==null){
JOptionPane.showMessageDialog(null,"请输入学生编号","系统提示",JOptionPane.ERROR_MESSAGE);
}
else{
ConnDB cdb=new ConnDB();
sql="insert Student_Info(stdiu,stuname,stusex,stuage,stuyear,stumajor,stuphone,stuaddr) values('"+strid+"','"+strname+"','"+strsex+"','"+strage+"','"+stryear+"','"+strmajor+"','"+strphone+"','"+straddr+"')";
try{
cdb.OpenConn();
cdb.executeUpdate(sql);
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
}
}
public String[] stuID(){
ConnDB cdb=new ConnDB();
String[]s=null;
int Reccount=0,i=0;
sql="select stdiu from Student_Info";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
Reccount=rs.getRow();
}
if(Reccount==0){
s=null;
}else{
s=new String[Reccount];
rs.first();
rs.previous();
while(rs.next()){
s[i]=rs.getString("stuid");
i=i+1;
}
}
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//返回某个学生的学号
public String stuID(String strname){
ConnDB cdb=new ConnDB();
String s=null;
int Reccount=0;
sql="select stuid from Student_Info where stuname='"+strname+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
Reccount=rs.getRow();
}
if(Reccount==0){
s=null;
}else{
rs.first();
rs.previous();
while(rs.next()){
s=rs.getString("stuid");
}
}
}
catch(Exception e){
System.out.print(e);
}
finally {
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按学号查询学生信息
public String [][]stuidQuery(String strbegin,String strend){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Student_Info where((stuid<='"+strend+"')and(stuid>='"+strbegin+"'))";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}else{
s=new String[row][8];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按性别查询学生信息
public String[][]stusexQuery(String strsex){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Student_Info where stusex='"+strsex+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][8];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按专业查找学生信息
public String[][]stumjrQuery(String strmjr){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Student_Info where stumajor='"+strmjr+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][8];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按入学时间查询学生信息
public String[][]stuyrQuery(String stryrbegin,String stryrend){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="selesct * from Student_Info where((stuyear<='"+stryrend+"')and(stuyear>='"+stryrbegin+"'))";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row =rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String [row][8];
rs.first();
rs.previous();
while (rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//返回学生的专业
public String[]stuMajor(){
ConnDB cdb=new ConnDB();
String s[]=null;
int Reccount=0,i=0;
sql="select stumajor from Student_Info";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.next()){
Reccount=rs.getRow();
}
if (Reccount==0){
s=null;
}
else{
rs.first();
rs.previous();
s=new String[Reccount];
while(rs.next()){
s[i]=rs.getString("stumajor");
i=i+1;
}
}
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
}
TeaInfoDB.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.*;
import javax.swing.JOptionPane;
/**
*
* @author Xinyue
*/
public class TeaInfoDB {
String sql;
ResultSet rs=null;
public TeaInfoDB(){
}
public void teaUpdate(String strid,String strname,String strsex,String strlevel,String strdepart,String strphone){
if(strid==null){
JOptionPane.showMessageDialog(null, "请输入教师编号!","系统提示",JOptionPane.ERROR_MESSAGE);
}
else{
ConnDB cdb=new ConnDB();
sql="insert Teacher_Info(teaid,teaname,teasex,tealevel,teadptent,teaphone) values('"+strid+"','"+strname+"','"+strsex+"','"+strlevel+"','"+strdepart+"','"+strphone+"')";
try{
cdb.OpenConn();
cdb.executeUpdate(sql);
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
}
}
//返回所有教师编号
public String[] teaID(){
ConnDB cdb=new ConnDB();
String[]s=null;
int Reccount=0;
int i=0;
sql="select teaid from Teacher_Info";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
Reccount=rs.getRow();
}
if(Reccount==0){
s=null;
}
else{
s=new String[Reccount];
rs.first();
rs.previous();
while(rs.next()){
s[i]=rs.getString("teaid");
i=i+1;
}
}
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
}
SubInfoDB.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.*;
import javax.swing.JOptionPane;
/**
*
* @author Xinyue
*/
public class StuInfoDB {
String sql;
ResultSet rs=null;
public StuInfoDB(){
}
public void stuUpdate(String strid,String strname,String strsex,String strage,String stryear,String strmajor,String strphone,String straddr){
if(strid==null){
JOptionPane.showMessageDialog(null,"请输入学生编号","系统提示",JOptionPane.ERROR_MESSAGE);
}
else{
ConnDB cdb=new ConnDB();
sql="insert Student_Info(stdiu,stuname,stusex,stuage,stuyear,stumajor,stuphone,stuaddr) values('"+strid+"','"+strname+"','"+strsex+"','"+strage+"','"+stryear+"','"+strmajor+"','"+strphone+"','"+straddr+"')";
try{
cdb.OpenConn();
cdb.executeUpdate(sql);
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
}
}
public String[] stuID(){
ConnDB cdb=new ConnDB();
String[]s=null;
int Reccount=0,i=0;
sql="select stdiu from Student_Info";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
Reccount=rs.getRow();
}
if(Reccount==0){
s=null;
}else{
s=new String[Reccount];
rs.first();
rs.previous();
while(rs.next()){
s[i]=rs.getString("stuid");
i=i+1;
}
}
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//返回某个学生的学号
public String stuID(String strname){
ConnDB cdb=new ConnDB();
String s=null;
int Reccount=0;
sql="select stuid from Student_Info where stuname='"+strname+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
Reccount=rs.getRow();
}
if(Reccount==0){
s=null;
}else{
rs.first();
rs.previous();
while(rs.next()){
s=rs.getString("stuid");
}
}
}
catch(Exception e){
System.out.print(e);
}
finally {
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按学号查询学生信息
public String [][]stuidQuery(String strbegin,String strend){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Student_Info where((stuid<='"+strend+"')and(stuid>='"+strbegin+"'))";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}else{
s=new String[row][8];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按性别查询学生信息
public String[][]stusexQuery(String strsex){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Student_Info where stusex='"+strsex+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][8];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按专业查找学生信息
public String[][]stumjrQuery(String strmjr){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Student_Info where stumajor='"+strmjr+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][8];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//按入学时间查询学生信息
public String[][]stuyrQuery(String stryrbegin,String stryrend){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="selesct * from Student_Info where((stuyear<='"+stryrend+"')and(stuyear>='"+stryrbegin+"'))";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row =rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String [row][8];
rs.first();
rs.previous();
while (rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("stuname");
s[i][2]=rs.getString("stusex");
s[i][3]=rs.getString("stuage");
s[i][4]=rs.getString("stuyear");
s[i][5]=rs.getString("stumajor");
s[i][6]=rs.getString("stuphone");
s[i][7]=rs.getString("stuaddr");
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//返回学生的专业
public String[]stuMajor(){
ConnDB cdb=new ConnDB();
String s[]=null;
int Reccount=0,i=0;
sql="select stumajor from Student_Info";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.next()){
Reccount=rs.getRow();
}
if (Reccount==0){
s=null;
}
else{
rs.first();
rs.previous();
s=new String[Reccount];
while(rs.next()){
s[i]=rs.getString("stumajor");
i=i+1;
}
}
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
}
ExaInfoDB.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.sql.*;
import javax.swing.JOptionPane;
/**
*
* @author Xinyue
*/
public class ExaInfoDB {
String sql,sqll;
ResultSet rs=null,rsl=null;
public ExaInfoDB(){
}
public void exaUpdate(String strstuid,String strsubid,String strteaid,String strgrade,String strexakind){
if((strstuid==null)||(strsubid==null)||(strteaid==null)){
JOptionPane.showMessageDialog(null, "请选择学生编号、课程编号和教师编号!", "系统提示", JOptionPane.ERROR_MESSAGE);
}
else{
ConnDB cdb=new ConnDB();
sql="insert Grade_info(stuid,subid,teaid,grade,exakind)values('"+strstuid+"','"+strsubid+"','"+strteaid+"','"+strgrade+"','"+strexakind+"')";
try{
cdb.OpenConn();
cdb.executeUpdate(sql);
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
}
}
public String[][] exaidQuery(String strid){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Grade_Info where stuid='"+strid+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][5];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("subid");
s[i][2]=rs.getString("teaid");
s[i][3]=rs.getString("gread");
s[i][4]=rs.getString("exakind");
i++;
}
}
}catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
public String[][] exaidscoQry(String strid){
ConnDB cdb=new ConnDB();
String[][]s=null;
int row=0;
int i=0;
sql="select * from Grade_Info where stuid='"+strid+"'";
try{
cdb.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][5];
rs.first();
rs.previous();
while(rs.next()){
s[i][0]=rs.getString("stuid");
s[i][1]=rs.getString("subid");
s[i][2]=rs.getString("teaid");
s[i][3]=rs.getString("grade");
if(rs.getFloat("grade") >=60){
SubInfoDB sid=new SubInfoDB();
s[i][4]=sid.subScore(s[i][1])+"";
}
else
s[i][4]=0+"";
i++;
}
}
}
catch(Exception e){
}
finally{
cdb.clossStmt();
cdb.closeConn();
}
return s;
}
//统计学生所修学分
public String[][] exascoStat(String strscoLev,String strsubtype){
ConnDB cdb=new ConnDB();
ConnDB cdb1=new ConnDB();
String[][]s=null;
String strsubid=null,strstuid=null,strsubty=null;
int row=0,i=0,intscore=0,isumscore=0;
float fScoVal=0;
sql="select * from Grade_Info";
try{
cdb.OpenConn();
cdb1.OpenConn();
rs=cdb.executeQuery(sql);
if(rs.last()){
row=rs.getRow();
}
if(row!=0){
rs.first();
rs.previous();
while(rs.next()){
strstuid=rs.getString("stuid");
strsubid=rs.getString("subid");
if(rs.getFloat("grade")>=60){
SubInfoDB sid=new SubInfoDB();
intscore=sid.subScore(strsubid);
strsubty=sid.subType(strsubid);
}
sqll="insert Score_Grade(stuid,subid,subtype,subscore)values('"+strstuid+"','"+strsubid+"','"+strsubty+"','"+intscore+"')";
try{
cdb1.executeUpdate(sqll);
}
catch(Exception e){
System.out.print(e);
}
finally{
cdb1.clossStmt();
}
i++;
}
sqll="select sum(subscore),stuid from Score_Grade where subtype='"+strsubtype+"'group by stuid";
try{
rsl=cdb.executeQuery(sqll);
if(rsl.last()){
row=rsl.getRow();
}
if(row==0){
s=null;
}
else{
s=new String[row][3];
rsl.first();
rsl.previous();
i=0;
ConfInfoDB cid=new ConfInfoDB();
fScoVal=cid.GetScoLev();
while(rsl.next()){
isumscore=rsl.getInt(1);
if(strscoLev=="修满学分"){
if(isumscore>=fScoVal){
s[i][0]=rsl.getString("stuid");
s[i][1]=strsubtype;
s[i][2]=isumscore+"";
i=i++;
}
}
if(strscoLev=="未修满学分"){
if(isumscore
创建的MySQl数据库
我的工作界面:
总结:
本次程序从准备到完成历时三周,第一个周主要都是在数据库上下功夫,第二周和第三周都是在打代码。
第一周:
由于个人电脑的问题,致使建好的Access数据库没法用,本人电脑上的数据源驱动程序缺少,如图所示:
在各种搜索翻阅书刊无效后我尝试安装了SQL server数据库 ,但是由于版本问题,没有安装成功。最后安装的是My SQL,在这个过程中真是十分坎坷,很感谢班级群里同学们的交流和共享文件,才使得我的程序终于有数据库可以连接了。值得一说的是由于很长时间没有使用数据库对于SQL语言遗忘得很干净,那段时间真是花了很多时间在研究SQL语言。
第二周&第三周:
在翻越多本书之后决定参照书上的这个成绩信息管理信息系统做了,起初的时候遇到的连接数据库的问题,在我的代码ConnDB中可以看到我尝试了很多种方法,最后才得以克服。在这个过程中我最大的进步大概是会编写小的测试文件,在一开始的时候对于数据源是否可以使用还是代码问题不是很确定,就编写一个新的Text程序测试数据源,发现可以实现连接后再回来查源程序的问题,很快就解决了。因为很多时候IDE的报错都是很不明确的,我一度遇见过Exception in thread "AWT-EventQueue-0"java.lang.NullPointerException这个问题上网查知道是由于操作空对象,但是为什么出现空对象还是不清楚。由于我是参照课本完成的我还可以翻找,但是完全脱离书本编写测试文件就很重要了。
关于连接数据库这块由于我的代码是高度封装的,有一个专门连接的类,所有与连接数据库有关的操作都是通过这个类来实现的,所以对于链接来说只需要修改这部分就可以了,这个实在以后独立编程时要注意的问题。我在连接的代码中加了一行printok的命令,每次连接成功的时候就会在运行面板上打出ok(如下图所示),这样我就知道是不是连接的问题了,然后如果时对数据库操作没有相应的就去查……+DB的类,如果不是就是……Info类,对应查询问题的时候也好做多了。说到这里不得不承认由于刚开始写大程序的代码经常是写了好多才开始测试,这个难度就很大,花很长的时间来找问题,所以以后的话要写一点就测试一下,为以后代码的添加减少麻烦。
在建数据库的时候对于连接代码这面没有多少概念,所以大小写没有注意,这个造成了后期运行时极大地Bug,反复的查找最后发现是字段的大小写问题,My SQL数据库的表单没有大小写的区分这点倒是很让我欣慰。
在打代码的过程中同学推荐我使用了文本编辑器,这个小工具一开始我没有多大兴趣后来发现还是很好使用的,对于那些打过一遍的对象名称什么的它在下一次打的时候有很好的提示功能这个比IDE方便,IDE这面对于类的加载有提示功能是文本编辑器里没有的,所以有时间的话还是用IDE便于学习类与方法之间的应用。
在编码过程中经常会忘记某个类的某个方法的使用方法和目的,这个时候我发现IDE有一个连接的功能,只要按住ctrl键点击就可以查询了,这个方法发现的时候叫我兴奋了好久,速度加快了很多。
完善与提升:
由于完成比较仓促很多问题还没有解决,并不是每一个小模块都能完好的运行,所以下一步的工作是一点点调试程序。除此之外我对于美化它也有很大的兴趣,自己做一套风格图片链接进去,可以使这个版面看起来更漂亮。这是我做的所有的java项目中最费时的一个,也是最上心的一次,所以做完的时候还是很有成就感的.
最后一个很大的问题是由于编码的问题吧,这个数据库的文字显示都是???所以还需要研究设置一点点改善。
后记 :后来知道这个文字问题是要设置charset……
这次的作业应该是把可能出现的问题都出现了一遍……之前我的电脑还是死活装不上MySQL,在一次次博弈后终于装上了……