20165212第八周課上測試補做
阿新 • • 發佈:2018-04-22
tcl void man utf-8 args code ram source cor
20165212第八周補做
相關知識點
JDBC
- 加載JDBC橋連接
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
- 建立和dataSource數據源的鏈接
- Connection con=DriverManager.getConnection("jdbc:odbc:dataSource","loginName","password");
- 得到statement語句
- Statement sql=con.creatStatement();
- 向數據源發送SQL語句,必要時返回resultset對象
- ResultSet rs=sql.executeQuery
查詢操作
- where子語句
- slect 字段 from 表明 where 條件 例如:select * from country where population>15000
課上測試的幾個提交點都是以上述語句為核心,Example11_3為模板
補做內容截圖
(數據庫導入圖片已經提交。。就沒再放那個圖)
教材碼分析(因為我認為課後編程題基本涵蓋了例題的知識點,所以只寫了每一題例題是用來幹嘛的,而且,書上也有重要語句的解釋)
- Example11_1 :順序查詢
- Example11_2 :控制遊標查詢
- Example11_3 :條件查詢
- Example11_4 :更、添、刪操作
- Example11_5 :預處理、通配符使用
- Example11_6 :通用查詢(也是作業編程題裏用的)
- Example11_7 :JDBc事務處理
- Exmaple11_8 :Apache裏的derby數據庫
第十一章編程題目
第一題
import java.sql.*; import java.sql.*; public class Example11_2 { public static void main(String args[]) { Connection con; Statement sql; ResultSet rs; con = GetDBConnection.connectDB("students","root",""); if(con == null ) return; String sqlStr="select * from mess order by birthday"; try { sql=con.createStatement rs = sql.executeQuery(sqlStr); while(rs.next()) { String number=rs.getString(1); String name=rs.getString(2); Date date=rs.getDate(3); float height=rs.getFloat(4); System.out.printlf("%s\t",number); System.out.printlf("%s\t",name); System.out.printlf("%s\t",date); System.out.printlf("%.2f\n",height); } con.close(); } catch(SQLException e) { System.out.println(e); } } }
GetDBConnection 類
import java.sql.*; public class GetDBConnection { public static Connection connectDB(String DBName,String id,String p) { Connection con = null; String uri = "jdbc:mysql://localhost:3306/"+DBName+"?useSSL=true&characterEncoding=utf-8"; try{ Class.forName("com.mysql.jdbc.Driver");//加載JDBC-MySQL驅動 } catch(Exception e){} try{ con = DriverManager.getConnection(uri,id,p); //連接代碼 } catch(SQLException e){} return con; } }
第二題
import javax.swing.*; public class BianCheng2 { public static void main(String args[]) { String [] tableHead; String [][] content; JTable table; JFrame win= new JFrame(); Query findRecord=new Query; findRecord.setDatabaseName(args[0]); findRecord.setSQL("select * from "+args[1]); content = findRecord.getRecord(); tableHead=findRecord.getColumnName(); table = new JTable(content,tableHead); win.add(new JScrollPane(table)); win.setBounds(12,100,400,200); win.setVisible(true); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Query類
import java.sql.*; public class Query { String databaseName=""; //數據庫名 String SQL; //SQL語句 String [] columnName; //全部字段(列)名 String [][] record; //查詢到的記錄 public Query() { try{ Class.forName("com.mysql.jdbc.Driver");//加載JDBC-MySQL驅動 } catch(Exception e){} } public void setDatabaseName(String s) { databaseName=s.trim(); } public void setSQL(String SQL) { this.SQL=SQL.trim(); } public String[] getColumnName() { if(columnName ==null ){ System.out.println("先查詢記錄"); return null; } return columnName; } public String[][] getRecord() { startQuery(); return record; } private void startQuery() { Connection con; Statement sql; ResultSet rs; String uri = "jdbc:mysql://localhost:3306/"+ databaseName+"?useSSL=true&characterEncoding=utf-8"; try { con=DriverManager.getConnection(uri,"root",""); sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs=sql.executeQuery(SQL); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount();//字段數目 columnName=new String[columnCount]; for(int i=1;i<=columnCount;i++){ columnName[i-1]=metaData.getColumnName(i); } rs.last(); int recordAmount =rs.getRow(); //結果集中的記錄數目 record = new String[recordAmount][columnCount]; int i=0; rs.beforeFirst(); while(rs.next()) { for(int j=1;j<=columnCount;j++){ record[i][j-1]=rs.getString(j); //第i條記錄,放入二維數組的第i行 } i++; } con.close(); } catch(SQLException e) { System.out.println("請輸入正確的表名"+e); } } }
遇到的問題:
編程題第二題提示:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0,怎麽調試都無法編譯
解決:一個字母一個字母,一句一句扣幾遍,邏輯、順序上都沒什麽問題,,才想到是要帶命令行參數並運行...然後在這裏操作一下子就ok了
20165212第八周課上測試補做