使用者故事:作為一個排球比賽的觀衆,我希望獲得一場比賽的得分,以便了解比賽的結果。
由使用者故事拆成任務:
1.根據觀衆要求,顯示某一場比賽的局分;(表現)
2.記分員輸入每一局比賽的分數,并儲存;(表現)
3.根據局分判斷輸赢;
4.連接配接資料庫儲存局分。
根據使用者故事,建立以下包,類。
util包:做資料連接配接。
DBUtil.java類:
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
public static Connection getConn(){
Connection conn=null;
try {
//加載驅動
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//連接配接資料庫 conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=MySqlGames","sa","sa");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("驅動加載失敗");
} catch (SQLException e) {
System.out.println("資料庫連接配接失敗");
return conn;
}
//釋放資源
public static void closeAll(Connection conn,Statement statement,ResultSet rs){
try {
if(rs!=null){
rs.close();
if(statement!=null){
statement.close();
if(conn!=null){
conn.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("釋放資源出現異常");
}
User包下:bean包,和dao包:
bean 包下GamesInfo類(get,set):
package com.user.bean;
public class GamesInfo {
private int gID;//比賽場次
private String gTeam1;//隊伍1
private int gOne;//第一局
private int gTwo;
private int gThree;
private int gFour;
private int gFive;
private int gResult1;//隊伍1結果
private String gTeam2;//隊伍2
private int gResult2; //隊伍2結果
/**
* 構造方法
* */
public GamesInfo() {
super();
public GamesInfo(int gID, String gTeam1, int gOne, int gTwo, int gThree,
int gFour, int gFive, int gResult1, String gTeam2, int gResult2) {
this.gID = gID;
this.gTeam1 = gTeam1;
this.gOne = gOne;
this.gTwo = gTwo;
this.gThree = gThree;
this.gFour = gFour;
this.gFive = gFive;
this.gResult1 = gResult1;
this.gTeam2 = gTeam2;
this.gResult2 = gResult2;
public int getgID() {
return gID;
public void setgID(int gID) {
public String getgTeam1() {
return gTeam1;
public void setgTeam1(String gTeam1) {
public int getgOne() {
return gOne;
public void setgOne(int gOne) {
public int getgTwo() {
return gTwo;
public void setgTwo(int gTwo) {
public int getgThree() {
return gThree;
public void setgThree(int gThree) {
public int getgFour() {
return gFour;
public void setgFour(int gFour) {
public int getgFive() {
return gFive;
public void setgFive(int gFive) {
public int getgResult1() {
return gResult1;
public void setgResult1(int gResult1) {
public String getgTeam2() {
return gTeam2;
public void setgTeam2(String gTeam2) {
public int getgResult2() {
return gResult2;
public void setgResult2(int gResult2) {
Dao包下,接口類GamesInfoDao和GamesInfoDaoImpl包:
GamesInfoDao.Java類:
package com.user.dao;
import com.user.bean.GamesInfo;
public interface GamesInfoDao {
/**
* 接口
* */
//添加比賽
boolean insertGame(GamesInfo gamesInfo);
//根據場次查詢比賽
GamesInfo getgameByID(int id);
GamesInfoDaoImpl包下GamesInfoDaoImpl接口實作類繼承DBUtil
GamesInfoDaoImpl.java類:
package com.user.dao.impl;
import java.sql.PreparedStatement;
import com.user.dao.GamesInfoDao;
import com.util.DBUtil;
* 接口實作類
public class GamesInfoDaoImpl extends DBUtil implements GamesInfoDao {
public GamesInfo getgameByID(int id) {
GamesInfo game=null;
PreparedStatement pstatement=null;
ResultSet rs=null;
conn=getConn();
String sql="select *from games where gID=?";
pstatement=conn.prepareStatement(sql);
pstatement.setInt(1, id);
rs=pstatement.executeQuery();
if(rs.next()){
int gID=rs.getInt("gID");
String gTeam1=rs.getString("gTeam1");
int gOne=rs.getInt("gOne");
int gTwo=rs.getInt("gTwo");
int gThree=rs.getInt("gThree");
int gFour=rs.getInt("gFour");
int gFive=rs.getInt("gFive");
int gResult1=rs.getInt("gResult1");
String gTeam2=rs.getString("gTeam2");
int gResult2=rs.getInt("gResult2");
game=new GamesInfo(gID, gTeam1, gOne, gTwo, gThree,gFour,gFive,gResult1,gTeam2,gResult2);
}
//抛出異常
}finally{
closeAll(conn, pstatement, rs);//釋放資源
return game;
public boolean insertGame(GamesInfo gamesInfo) {
boolean flag=false;
try{
String sql="set identity_insert games ON;insert into games(gID,gTeam1,gOne,gTwo,gThree,gFour,gFive,gResult1,gTeam2,gResult2) values(?,?,?,?,?,?,?,?,?,?)";
pstatement = conn.prepareStatement(sql);
pstatement.setInt(1, gamesInfo.getgID());
pstatement.setString(2, gamesInfo.getgTeam1());
pstatement.setInt(3, gamesInfo.getgOne());
pstatement.setInt(4, gamesInfo.getgTwo());
pstatement.setInt(5, gamesInfo.getgThree());
pstatement.setInt(6, gamesInfo.getgFour());
pstatement.setInt(7, gamesInfo.getgFive());
pstatement.setInt(8, gamesInfo.getgResult1());
pstatement.setString(9, gamesInfo.getgTeam2());
pstatement.setInt(10, gamesInfo.getgResult2());
int rowNum=pstatement.executeUpdate();
if(rowNum==1){
flag=true;
}catch (SQLException e) {
e.printStackTrace();
}finally{
closeAll(conn, pstatement, null);//釋放資源
}
return flag;
Test包:表現層
TestGetGameByID類:使用者根據id場次查詢結果:
package com.test;
import java.util.Scanner;
import com.user.dao.impl.GamesInfoDaoImpl;
public class TestGetGameByID {
public static void main(String[] args) {
* 使用者查詢比賽
GamesInfoDao gamesInfoDao=new GamesInfoDaoImpl();//執行個體化接口實作類
Scanner input=new Scanner(System.in);//輸入實作類
System.out.println("請輸入比賽場次:");
int RA=input.nextInt();//接收使用者輸入查詢場次
GamesInfo gamesInfo=gamesInfoDao.getgameByID(RA);//查詢場次為RA的比賽詳細資訊
System.out.println("比賽場次:"+gamesInfo.getgID());
int one=gamesInfo.getgOne();
int two=gamesInfo.getgTwo();
int three=gamesInfo.getgThree();
int four=gamesInfo.getgFour();
int five=gamesInfo.getgFive();
if(one+two+three+four+five>3){
System.out.println(gamesInfo.getgTeam1()+":勝利");
System.out.println(gamesInfo.getgTeam2()+":失敗");
}else{
System.out.println(gamesInfo.getgTeam1()+":失敗");
System.out.println(gamesInfo.getgTeam2()+":勝利");
運作效果圖如下:
測試資料為:比賽場次為1;
隊伍一名稱為:1;
隊伍二名稱為:1;(随便寫入的,這資料有點尴尬 = - =)
TestInsertGame.Java類,記分員寫入比賽資料:
public class TestInsertGame {
*
* 接收教練輸入比賽資訊
Scanner input=new Scanner(System.in);
int RA=input.nextInt();
System.out.println("請輸入第一隊伍名稱");
String Team1=input.next();
System.out.println("請輸入第二隊伍名稱");
String Team2=input.next();
int[] game=new int[5];
int sum=0;
int gResult1=0;
int gResult2=1;
for(int i=0;i<5;i++){
System.out.println("請輸入第"+(i+1)+"局"+Team1+"勝負情況。1/0(勝/負):");
game[i]=input.nextInt();
sum=sum+game[i];
if(sum>=3){
gResult1=1;
gResult2=0;
game[3]=0;
game[4]=0;
break;
}
GamesInfo gamesInfo=new GamesInfo(RA,Team1,game[0],game[1],game[2],game[3],game[4],gResult1,Team2,gResult2);
boolean flag=gamesInfoDao.insertGame(gamesInfo);//執行添加
if(gResult1==1){
System.out.println(Team1+"勝利");
System.out.println(Team2+"勝利");
if(flag){
System.out.println("添加成功");
System.out.println("添加失敗");
運作效果圖:
資料庫資料添加成功:
到此功能就完成的差不多了,接下來說說要注意的事項,以及在過程中遇到的問題:
1.資料庫連接配接驅動jar包,不要忘了提前準備好,放在WEB-INF的lib下,myeclipse會自動加載到上面。
2.配置環境變量。不然資料庫還是連不上(剛裝系統的我已嘗試過了 >=< ),這個随後我要寫個傻瓜式操作。
遇到的問題:
1.有圖有真相
在寫入資料庫時不讓寫主鍵辨別列
解決辦法:
在寫SQL語句時把它設為ON
2.本以為要過的時候報錯。(已搬個小馬紮去反思 ==||)
第五個總是過不去,判斷都去了還是不行,最後找到了:
看到沒,數組下标是從0開始的。
3.還有一個沒有解決的問題:
資料庫是硬傷:來看看我建的表就知道了
能看懂嗎,連我自己都淩亂了。我知道這個肯定不行,僅限于這第一次能用,看了這麼多,還希望各位小主給點建議and意見。
總結下:我覺得最後表現層寫的比較亂,都寫在test裡了,應該在寫個邏輯工具類,這樣關系應該更加明了了(就是傳說中的高内聚低耦合吧)。
總體下來思考了好幾天(更多是做其他的了),最後否了自己的空想雲雲,按步驟下來,花了我一個午飯和一個晚飯的時間寫下來。
哦,no,還有我的現在,晚安。