《資料庫系統應用程式開發》考試
考試的主要內容是JDBC Programing with Java,除了第一大題的簡單JDBC語句,還涉及實驗報告和Java程式設計的內容。
我屆考試題目與往年極其相似,後悔沒有好好看題。。呵呵
下面附上考試真題,造福全人類。(^_^) 看完可以考滿分了。
《2016-2017年度吉林大學第一學期資料庫程式開發考試》
一.寫出java程式片段
- 建立資料庫連線的語句,物件自定義。
- . 定義一個結果集物件,該物件將執行的查詢語句是“查詢表staff,獲取員工編號為10的員工名字(name)工作(job)和工資(salary)”,寫出具體執行程式碼
- 寫出結果集中下一行的方法,假設物件為rs,寫出具體執行程式碼。
- Sql=“SELECT name FROM Temp WHERE id=? ”執行這種sql語句時,該建立什麼物件?若物件名為pstmt,寫出具體的程式片段。
- 已知sql更新語句“UPDATE temp SET salary=salary*5”,寫出具體執行程式碼.count為executeUpdate()的執行結果,count=3,但查詢原表並未改變,這是為什麼?
- 假設Connection,Statement,ResultSet類的物件分別是con,stmt,rs,在程式結束之前,應該按什麼順序關閉這三個物件,請以此寫出具體語句。
7.將一個圖片“e:\photo\a.jpg”插入到表student的photo列(BOLB屬性)中,寫出主要的操作語句,物件自定義。
二.
題目給出一個表結構 一個表的GUI介面。(自行腦補)
(1)寫出實現表GUI介面所需的主要包或介面
(2)寫出根據使用者的輸入選擇任意行進行升序或降序排列的具體執行程式碼。
(3)寫出使用者可以選擇按任意行,任意列進行排序的流程圖,並寫出具體執行程式碼。
- 編寫JAVA程式
模擬銀行的ATM系統,account(acc_number,balance,date).
- 使用者輸入使用者名稱和密碼,當密碼輸入超過三次不正確時,退出系統。
- 正確後進入存取款介面,使用者可以選擇存款或取款,存取款後均提示介面是否繼續存取款。
- 取款時,可以讓使用者自主選擇取款金額。
- 一次取款不得超過3000,每天ATM取款總額不得超過30000.
資料庫應用程式設計
一.5*6=30
- 載入用於application的DB2程式
static
{ try
{ Class.forName ("COM.ibm.db2.jdbc.app.DB2Driver");
}
catch (Exception e)
{ System.out.println ("\n Error loading DB2 Driver...\n");
System.out.println (e);
System.exit(1); }
}
- 無引數標記的SQL語句,應呼叫哪個類中什麼方法例項化一個Statement物件,物件名自行定義
Connection con = DriverManager.getConnection(“jdbc:db2:sample”,”db2admin”,”db2admin”);
Statement stmt = con.createStatement();
- 定義一個結果集物件,該物件查詢語句是“查詢表staff,獲取員工編號為10 的名字(name),工作(job),工資(salary)”
ResultSet rs = stmt.executeQuery(“select NAME, JOB, SALARY from administrator.staff where empno = 10”);
- 將程式設定為不自動提交SQL語句
con.setAutoCommit(false);
- 假設Connection,Statement,ResultSet類物件分別為,con,stmt,rs,應該按什麼順序關閉物件,寫出具體語句
rs.close();
stmt.close();
con.close();
- 寫出讀取結果集下一行的語句,如何判空
rs.next();
while(rs.next()){
......
}
rs.wasNull();
注:結果集
first()移到第一行
last()移到最後一行
previous():移動到前一行
beforeFirst():移動到第一行之前,常用於從頭開始讀取行
afterLast():移動到最後一行之後
absolute(int rowNumber):移動到行數為rowNumber的行;如果rowNumber為負值,則以最後一行為首、第一行為尾
relative(int relativeRowNumber):相對結果集當前所在行,移動行數為relativeRowNumber的行
二.8*5=40
1.編寫程式片段,完成修改操作“根據使用者輸入的部分編號(dept)將表staff中的工資(salary)上漲5%”,最後輸出被成功修改的行數,假設變數mydeptno用來存放使用者輸入的部門編號
String deptno = "";
String s = " ";
int mydeptno = 0;
String sqlstmt = "UPDATE ADMINISTRATOR.STAFF SET SALARY = SALARY * 1.05 WHERE DEPT = ?";
BufferedReader in = new BufferedReader( new InputStreamReader (System.in));
Connection sample = DriverManager.getConnection("jdbc:db2:sample","db2admin","db2admin");
System.out.println(“input deparement no”);
s = in.readLine();
int updateCount=0;
While(s!=null){
deptno = s.substring(0,2);
mydeptno = Integer.parseInt(deptno);
PreparedStatement pstmt = sample.prepareStatement( sqlstmt );
pstmt.setInt(1, mydeptno);
updateCount += pstmt.executeUpdate();
System.out.println(“input deparement no”);
s = in.readline();
}
System.out.println("\nNumber of rows updated: " + updateCount);
- 編寫程式片段,針對1題,當輸入的部門編號有誤時,以GUI的形式提示“您所輸入的部門編號有誤”需要考慮異常的處理
try{
PreparedStatement pstmt = sample.prepareStatement( sqlstmt );
pstmt.setInt(1, mydeptno);
updateCount += pstmt.executeUpdate();
System.out.println("\nNumber of rows updated: " + updateCount);
JOptionPane.showMessageDialog(null, "共修改"+ updateCount, "54130409", JOptionPane.INFORMATION_MESSAGE);
}catch( SQLException x ){
SQLCode = x.getErrorCode();
SQLState = x.getSQLState();
String Message = x.getMessage();
System.out.println("\nSQLCODE: " + SQLCode );
System.out.println("\nSQLSTATE: " + SQLState);
System.out.println("\nSQLERRM: " + Message);
JOptionPane.showMessageDialog(null, "輸入部門編號有誤", "54130409", JOptionPane.INFORMATION_MESSAGE);
}
- 有如下的DDL:
create table templ(empno char(6),firstname varchar(20),lastname varchar(20),salary decimal(7,2)birthday date);
現有一新員工Roth(可看作是lastname的值)等待插入表TEMP,其中員工編號為000110,工資是50000,請編寫該程式片段
String sql = “INESRT INTO TEMPL (lastname ,empno ,SALARY) VALUES (ROTH ,000110,50000)”;
Statement stmt = Connection.createStatement();
Int i = stmt.executeUpdate(sql);
4.先對錶EMP進行查詢,獲取包含LASTNAME,FIRSTNAME兩列的結果集,然後只針對LASTNAME是“SMITH”的行進行修改,將該行的FIRSTNAME改為使用者輸入的字串;
String mySelect = "SELECT LASTNAME, FIRSTNME FROM EMP";
String myUpdate = "UPDATE EMP SET FIRSTNME = ? WHERE CURRENT OF ";
String cursorName = null;
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(mySelect);
cursorName = rs.getCursorName();
PreparedStatement ps = con.prepareStatement(myUpdate + cursorName);
While (rs.next()) {
String lastname = rs.getString(1);
String firstnme = rs.getString(2);
if (lastname.equals("SMITH")) {
String newFirstnme = "George";
ps.setString( 1, newFirstnme);
ps.executeUpdate();
}
}
rs.close();
ps.close();
stmt.close();
5.編寫程式片段,完成查詢語句“SECLET EMPNO,LASTNAME,EDLEVEL,FROM EMP”,並將查詢結果進行輸出,當EDLEVEL是否為空值時,提示給使用者相關資訊,例如如果職工編號為0100的員工沒有Edlevel值,則顯示:“Edlevel is null forEMPNO 0100”.
ResultSet rs = stmt.executeQuery(“SECLET EMPNO,LASTNAME,EDLEVEL,FROM EMP”);
While(rs.next()){
String empno = rs.getString(1);
String lastname = rs.getString(2);
String edlevel = rs.getString(3);
If(edlevel==null){
“輸入為空”;}
System.out.println(empno+lastname+edlevel);
}
三、15*2=30
如圖所示sample資料庫的部分表結構以及他們之間的參照關係,其中表格中標有下劃線的是主鍵,傾斜字型的為外來鍵。編寫完整的程式程式碼,實現如下操作:
(1)新員工的插入操作,其中:
新員工的入職照片所在路徑為“e:\empphoto”,照片的型別可以是jaeg,gif,bmp三種類型;
當照片的大小超出限制時,要提示給使用者;
員工的其他資訊應該由使用者通過鍵盤輸入、
(2)員工的查詢功能:根據使用者輸入的部門名稱和工齡,顯示出該部門中大於此工齡的員工姓名、工齡和電話,並按照工齡升序排列。