1. 程式人生 > >20165212第八周課上測試補做

20165212第八周課上測試補做

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第八周課上測試補做