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);
}
}

}
}



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


2015年10月28日 星期三

JDBC-基本篇


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//自動載入driver方式,在driver.sqljdbc42.jar.META-INF.services中建一個檔案叫java.sql.Driver
//裡面內容寫com.microsoft.sqlserver.jdbc.SQLServerDriver
//微軟的SQLServe是這樣寫的(一般都這樣寫)   com代表營利公司,microsoft代表公司名稱
//ORACLE的寫法特殊   oracle.jdbc.OracleDriver
public class QueryText1 {

public static void main(String[] args) {
String drivename="jdbc:sqlserver://localhost:1433;databaseName=db01";      //*****經常打錯,注意,若要連接多個資料庫,要再多宣告一個String
try(Connection conn=DriverManager.getConnection(drivename, "sa", "passw0rd");){  //自動關閉conn
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");             //JavaSE1.6   JDBC4,之後,有自動載入Database可以不用寫,可是記得要設
String sql="select * from student";                                        //sql指令
PreparedStatement prestm=conn.prepareStatement(sql);                       //prepareStatement()可以直接在此下指令
ResultSet res=prestm.executeQuery();                                       //因為prestm已經有包含指令了,executeQuery()所以不用下
while(res.next()){                                                         //是否有下一個(回傳true或false)
System.out.println(res.getString(1)+"   "+res.getString(2));
}


}catch (ClassNotFoundException e){
System.out.println("ClassNotFoundException");                    

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

}
}
}

2015年10月3日 星期六

Java 初心者 - 第一隻程式,打個招呼吧

你看到此還沒正式寫程式,
之前只是在設定、安裝、管理資料
現在開始正式跟Java這領域打招呼吧!!



首先,先創一個class (類別) ,
在剛創的右邊的package(看你剛剛取什麼名字)滑鼠右鍵→new→class


填寫class名稱 HelloWorld
選擇public (公開的) 、 public static void main (String[] args)
然後按下Finish
就完成第一步驟,創造一個class





其實你已經寫完了程式的90%了,驚訝吧!!
這就是eclipse已經幫你準備好了基本架構

解釋一下 package是你剛剛創的package名字,目前先暫時不管他,留著


程式基本架構是
public class  class名稱 {
 
}

然而所有程式都是寫在這裡面,
class名稱(或變數命名)有一些限定,基本上只能使用  英文、_、$
而且英文字大小寫也是看作不一樣的
(比如說  Love  跟 love  在java眼裡就是不一樣)

還是有些需要注意
1.  命名時第一個不能是數字
2.  別用_當開頭
3.  盡量別用$命名


然而class名稱命名時,
我們習慣 每個單字第一個字母大寫(看起來有水準)
例如:HelloWorld



public static void main (String[] arge){

}

此為程式進入點,也就是以後程式都是在這裏面執行,


public class  class名稱 {
   public static void main (String[] arge){

    }
}
請把這架構背起來!



System.out.println();
此為Java標準輸出格式,記得結尾要有 ;
代表這段命令結束
然而加上 "  "之間可以放 想要的字
System.out.println("Hello World !!");  
所以整體意思是,執行程式時印出 Hello World !!




左邊是存檔,右邊是執行。
記得在執行前都要存檔


結果輸出狀況就是 Hello World !!

JAVA初心者 - 建立Java資料夾(管理資料)

在JAVA的學習過程中,
一定有很多需要學習並且實際操作程式,撰寫程式碼
eclipse這套軟體可以幫助管理資料,並且分類(好溫馨)

所以首先我們要建立一個新的Java Project,

選擇 File → New → JavaProject (等於是建立資料夾,以後東西會放這裡面)


 在Project Name 中輸入自己想要的名稱後按Finish,如此就創好了JavaProject





接下來再創一個package
(就像建立專案,以後你接到 公司 要你寫一個專案,可以這樣創)
因為一個案子可能要用很多個程式組合,
於是這是把那些程式管理再一起成一個專案,
如果以後依需求可以增加

在sre滑鼠右鍵→new→package


 在name內輸入自己要的package名稱(英文),
如果想要創的名字,不會英文的時候請去google一下就知道了。
之後請都打英文

順便跟英文培養感情



JAVA初心者 - 開發軟體eclipse


Java是一款能夠跨平台物件導向程式,
開發軟體選擇使用eclipse,這是一款免費軟體
(當然想要功能更多更齊全的可以選擇付費)

點此



接下來點右上角橘色  DownLoad
找到IDE for Java EE Developers  旁邊選擇 符合您Windows的位元
(如果不知道32還64位元,到桌面"我的電腦"滑鼠右鍵→內容)

點選後就會跳出下載,下載完成後直接解壓縮
最後打開eclipse資料夾,執行eclipse

直接點選ok (或者你想改變儲存路徑也可以)
然後會出現
選擇點選右上角的縮到最小

恭喜進入Java程式設計的大門

JAVA初心者 - Java環境設定

Java是需要設定環境變數,在Java環境底下才能夠編譯、執行Java

首先打開控制台 → 系統安全性 → 系統
(或者我的電腦右鍵,系統,進階系統)

進階系統設定點進去

選擇進階,底下有個環境變數
下方找變數 Path並且選擇 編輯

在變數值地方,最前方多加%java_home%\bin;
(是C:\......前方多加,千萬別修改到C\....裡面的內容)
之後按確定

環境設定完成