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了
轉載于:https://www.cnblogs.com/FenixRen/p/8909137.html