數據庫和接口設計
1、 分析
設計了以下數據庫模型。此次數據庫采用較為簡單的MS SQL,主要有五個表單,Tab_Station(汽車停靠站點),Tab_RegBus(班車時刻信息),Tab_Bus(汽車信息表),Tab_Admin(管理員信息),Tab_System(系統信息)。
2、 數據庫基本表單
Tab_Station:
列名 數據類型 允許空 備注
StaID Int No 站點編號
StaName Varchar(25) 站點名
StaLati Float 經度
StaLongi Float 緯度
Tab_ReguBus
列名 數據類型 允許空 備注
RegID Int no 班車時刻編號
RegDocking Varchar(25) 停靠站
RegDrivInterval Varchar(50) 行車區間
RegPickUp Varchar(25) 上車地點
RegFirstTime Time 首發時間
RegDriveDirect Varchar(100) 行車路線
RegTeam Varchar(25) 所屬車隊
Tab_Bus
列名 數據類型 允許空 備注
BusID Int No 汽車編號
BusLati Float 經度
BusLongi Float 緯度
BusTime Time 時間
Property Varchar(100) 記錄汽車屬性(待定)
Tab_Admin
列名 數據類型 允許空 備注
AdmID Int No 管理員編號
AdmName Varchar(25) No 管理員姓名(賬號)
AdmPWD Varchar(25) No 密碼
LoginIP Varchar(25) 登陸IP
LoginLog Varchar(100) 操作日志
LogTime time 記錄時間
Tab_System
列名 數據類型 允許空 備注
SysID int no 系統信息編號
LoginIP Varchar(25) 事件對應IP地址
SysTime Time 事件發生時間
SysLog Varchar(100) 系統操作
IsAdmin Int 是否為管理員
Property Varchar(25) 拓展
3、 SQL
Create database BD_DB GO use BD_DB GO create table Tab_Station (StaID int identity(1,1) primary key not null, StaName varchar(25), StaLati float, StaLongi float ); GO create table Tab_RegBus (RegID int identity(1,1) primary key not null, RegDocking varchar(25) not null, RegDrivInterval varchar(25), RegPickUp varchar(25), RegFirstTime time, RegDriveDirect varchar(100), RegTeam varchar(25) ); GO create table Tab_Bus (BusID int identity(1,1) primary key not null, BusLati float, BusLongi float, BusTime time, Property varchar(25) ); GO Create table Tab_Admin (AdmID int identity(1,1) primary key not null, AdmName varchar(25) not null, AdmPWD varchar(25) not null, LoginIP varchar(25), LoginLog varchar(100), LogTime time ); GO Create table Tab_System (SysID int identity(1,1) primary key not null, LoginIP varchar(25), SysTime time, SysLog varchar(100), IsAdmin int, property varchar(25) ); PL/SQL
/站點信息查詢/
create procedure sp_Select_Sta @staid int as begin select * from Tab_Station where @staid=staid end GO
/站點信息插入/
create procedure sp_Insert_Sta @staname varchar(25), @stalati float, @stalongi float as begin insert into Tab_Station(staname,stalati,stalongi) values (@staname,@stalati,@stalongi) end GO
/車輛時刻信息查詢/
create procedure sp_Select_RegBus @regid int as begin select * from Tab_RegBus where @regid=Regid end GO
/車輛時刻信息插入/
create procedure sp_Insert_Reg @RegDocking varchar(25), @RegDrivInterval varchar(50), @RegPickUp varchar(25), @RegFirstTime time, @RegDriveDirect varchar(100), @RegTeam varchar(25) as begin insert into Tab_ReguBus(RegDocking,RegDrivInterval,RegPickUp,RegFirstTime,RegDriveDirect,RegTeam) values (@RegDocking,@RegDrivInterval,@RegPickUp,@RegFirstTime,@RegDriveDirect,@RegTeam) end GO
/車輛信息查詢/
create procedure sp_Select_Bus @busid int as begin select * from Tab_Bus where @busid=busid end GO
/車輛信息插入/
create procedure sp_Insert_Bus @BusID Int, @BusLati Float, @BusLongi Float, @BusTime Time, @Property Varchar(100) as begin insert into Tab_Bus(BusLati,BusLongi,BusTime,Property) values (@BusLati,@BusLongi,@BusTime,@Property) end GO
/管理員信息查詢/
create procedure sp_Select_Admin @admid int as begin select * from Tab_Admin where @admid=Admid end GO
/管理員信息插入/
create procedure sp_Insert_Admin @AdmName Varchar(25), @AdmPWD Varchar(25), @LoginIP Varchar(25), @LoginLog Varchar(100), @LogTime time as begin insert into Tab_Admin(AdmName,AdmPWD,LoginIP,LoginLog,LogTime) values (@AdmName,@AdmPWD,@LoginIP,@LoginLog,@LogTime) end GO
/系統信息查詢/
create procedure sp_Select_Sys @Sysid int as begin select * from Tab_System where @sysid=sysid end GO
/系統信息插入/
create procedure sp_Insert_System @LoginIP Varchar(25), @SysTime Time, @SysLog Varchar(100), @IsAdmin Int, @Property Varchar(25) as begin insert into Tab_System(LoginIP,SysTime,SysLog,IsAdmin,Property) values (@LoginIP,@SysTime,@SysLog,@IsAdmin,@Property) end GO
4、 數據庫基本操作
1) 數據庫連接
import java .sql.*; public class sql { public static void main(String[] args) { try { String address = “jdbc:microsoft:sqlserver://localhost:1433”; //驅動類型+目標數據庫ip+數據庫端口 String user=”sa”;//數據庫用戶密碼 String passwd=”“;//口令 String database = “pubs”;//目標數據庫 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();//驅動申明 Connection con = DriverManager.getConnection(address,user,passwd);//建立鏈接 con.setCatalog(database);//確定目標數據庫 Statement smt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //建立描述,設定結果集支持滾動光標且敏感,不可編輯 String selCode = “SELECT test1,test2 FROM test”;//查詢語句 ResultSet rs = smt.executeQuery(selCode);//結果集 if(rs.last()) {//從第一條往後依次取結果集中的記錄 String userId = rs.getString(1);//等同rs.getString(“userId”),即第一個字段數據 String userName = rs.getString(2);//同上,第二個字段,全部取其為String類型 //若是中文字段,一般需要轉碼 //userName = new String(userName.getBytes(“ISO-8859-1”),”gb2312”); System.out.println(userId+”:”+userName);//輸出此條記錄的查詢結果 } rs.close();//釋放資源 smt.close(); con.close(); } catch(Exception e) { System.out.println(e);//捕捉異常 } } }
2) 執行SQL語句和存儲過程
具體我想寫一個操作基本數據庫的包,請准備開發中間件組的同學是否可以給出所需基本函數?因為時間關系,我沒考慮好具體寫哪些操作過程,如果上面存儲過程和數據庫修改的話,我會給出新的數據庫和存儲過程。具體的基本數據庫操作包還是需要的,大家先看看,然後給我答復。
5、 存在的問題
1) 上面的SQL語句直接執行,然後就可以建立一個基本的數據庫了,然後執行PL/SQL就可以建立所有的存儲過程了,執行存儲過程是
Exec 存儲過程名字 [參數],…..
2) 這樣設計的數據庫是空數據庫,大家隨便寫一些信息就行了
3) 數據庫中的Property是說,有些數據是什麼我還沒想清楚,但是一定會拓展的。
4) 大家會發現數據庫中沒有約束性要求,是因為我們需要簡單的測試,如果添加太多約束,會導致系統不穩定和提高開發的復雜性。
5) 代碼的大小寫沒有關系,MS SQL大小寫都可以,我只是按照我自己的寫法寫的大小寫,如有個別差錯,可以正常使用。
6) 代碼我在MS SQL2008上測試過,可以使用!