2015年11月8日 星期日

JDBC - 簡易電影資料(資料表playlist、m_room 、seats)


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

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

class PlaylistVO{
private Timestamp ptime;
private int movieNumber=0;
private String roomid;


public void setPtime(Timestamp ptime){
this.ptime=ptime;
}
    public void setMovidNumber(int movieNumber){
this.movieNumber=movieNumber;
}
    public void setRoomid(String roomid){
    this.roomid=roomid;
    }
   
   
    public Timestamp getTimestamp(){
return ptime;
}
    public int getMovieNumber(){
return movieNumber;
}
   
    public String getRoomid(){
return roomid;
}
   
}
//--------------------------------------------------------------------------------------
class SeatsVO{
private Timestamp ptime;
private int movieNumber=0;
private String seat_num;
private String sold;
private int custID;


public void setTimestamp(Timestamp ptime){
this.ptime=ptime;
}
    public void setMovidNumber(int movieNumber){
this.movieNumber=movieNumber;
}
    public void setSeat_num(String seat_num){
    this.seat_num=seat_num;
    }
    public void setSold(String sold){
    this.sold=sold;
    }
    public void setCustID(int custID){
    this.custID=custID;
    }
   
    public Timestamp getDate(){
return ptime;
}
    public int getMovidNumber(){
return movieNumber;
}
    public String getSeat_num(){
    return seat_num;
    }
    public String getSold(){
    return sold;
    }
    public int getCustID(){
    return custID;
    }
   

   
}

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

class MovieSql {
private static final String SELECT_PLAYLIST ="Select ptime,movie,roomid from playlist";
private static final String INSTER_PLAYLIST ="insert into playlist values (?,?,?)";
private static final String DLELTE_PLAYEIST ="delete  playlist where --------";
// private static final String UPDATE_PLAYEIST ="update playlist set (?,?,?) where ";

private static final String SELECT_SEATS ="Select ptime,movie,roomid from playlist";
private static final String INSTER_SEATS ="insert into seats values (?,?,?,?,?)";
private static final String DLELTE_SEATS ="delete  seats where --------";
// private static final String UPDATE_PLAYEIST ="update playlist set (?,?,?) where";

private static final String SELECT_M_ROOM="select roomid,seat_row,seat_col from m_room where roomid=?";
Connection conn=null;

public  void setConnection() throws SQLException{
String conUrl = "jdbc:sqlserver://localhost:1433;databaseName=movie";
conn=DriverManager.getConnection(conUrl, "sa", "passw0rd");
}

public void insertPalylist(PlaylistVO  play) throws SQLException{
int seat_r=0;
int seat_c=0;
CallableStatement cs=conn.prepareCall(INSTER_PLAYLIST);
cs.setString(1,play.getTimestamp().toString());
cs.setInt(2,play.getMovieNumber());
cs.setString(3,play.getRoomid());
int success=cs.executeUpdate();
System.out.println("Playlist成功更新"+success+"筆");
   String room=play.getRoomid();
     
   cs=conn.prepareCall(SELECT_M_ROOM);
 
   cs.setString(1, room);
 
   ResultSet rs=cs.executeQuery();
 
   if (rs.next()){
//     rs.getString(1);
    seat_r =rs.getInt(2);
    seat_c =rs.getInt(3);
   }else{
     System.out.println("找不到"+rs.getString(1)+"廳");
     System.exit(-1);
   }

//此行新增 有空修改
   cs=conn.prepareCall(INSTER_SEATS);
for(int i=1;i<=seat_r;i++){
for(int j=1;j<=seat_c;j++){
String sitI=null;
String sitJ=null;
if(i>=0 && i<=9){
sitI="0"+i;
}else
sitI=""+i;

if(j>=0 && j<=9){
sitJ="0"+j;
}else
sitJ=""+j;

     cs.setString(1,play.getTimestamp().toString());
     cs.setInt(2,play.getMovieNumber());
     cs.setString(3, sitI+"-"+sitJ);
     cs.setString(4,"0");
     cs.setString(5, null);
     cs.addBatch();
}
}
cs.executeBatch();
if (conn != null)
conn.close();
}
}



public class Procedure1 {

public static void main(String args[]){
String pt=args[0];
String movie=args[1];
String room=args[2];

MovieSql smt1=new MovieSql();
SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm");




PlaylistVO play=new PlaylistVO();
try{
smt1.setConnection();
Timestamp dateTime=new Timestamp(time.parse(pt).getTime());
play.setPtime(dateTime);
play.setMovidNumber(Integer.parseInt(movie));
play.setRoomid(room);
    smt1.insertPalylist(play);

}catch (ParseException e){
System.out.println(e);
}
catch(SQLException e){
System.out.println(e);
}


}


}



以上很多宣告方法還沒用到

JDBC-關閉自動交易,呼叫預存程序

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Procedure2 {

public static void main(String[] args) {
Connection conn=null;
String conUrl="jdbc:sqlserver://localhost:1433;databaseName=movie";
try{
conn=DriverManager.getConnection(conUrl,"sa","passw0rd");    //目前帳號密碼寫死
conn.setAutoCommit(false);                              //設定自動交易為關閉(預設是開啟)
String sql="{call gen_seats('2008-12-25 13:00',1,'A廳')}";  //呼叫DB中的預存程序指令
CallableStatement cs=conn.prepareCall(sql);                    
cs.execute();                                                                
conn.commit();                                                              // 確認交易
System.out.println("交易成功");                                  //當執行到這行無錯誤,則成功
}catch (SQLException e){
System.out.println("交易失敗,資料將不會儲存");   //當發生例外狀況,交易失敗
try{
conn.rollback();                                                           //取消交易(回到原始狀態)
}catch (SQLException e2){
System.out.println(e2);
}
}finally{                                                                    //關閉資源
if (conn !=null)
try{
conn.close();
}catch(SQLException e){
System.out.println(e);
}
}

}
}



問題,如果使用自動確認狀況下,
會導致資料不完全,原因?