1.資料庫的連接方式: ①建立JDBC-ODBC橋接器 應用程式只需建立JDBC和ODBC之間的連接,和資料庫的連接由ODBC完成; 優點:使得JDBC有能力訪問幾乎所有類型的資料庫。 缺點:依賴於ODBC,移植性較差。 ②載入純Java資料庫驅動程式 優點:不依賴於平臺。 //驅動程式由資料庫廠家 ...
1.資料庫的連接方式:
①建立JDBC-ODBC橋接器
應用程式只需建立JDBC和ODBC之間的連接,和資料庫的連接由ODBC完成;
優點:使得JDBC有能力訪問幾乎所有類型的資料庫。
缺點:依賴於ODBC,移植性較差。
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e){ System.out.println(e); }
②載入純Java資料庫驅動程式
優點:不依賴於平臺。
//驅動程式由資料庫廠家提供
2.建立連接:
使用java.sql.Connection類聲明一個對象,再使用類DriverManager調用它的靜態方法getConnection創建連接對象:
try{ Connection con=DriverManager.getConnection("jdbc:odbc:數據源名字","loginName","password"); } catch(SQLException e){}
3.查詢操作:
使用Statement聲明一個SQL語句對象,讓連接對象con調用方法createStatment()創建SQL語句對象:
try{ Statement sql=con.createStatement(); } catch(SQLException e){}
查詢結果存放於ResultSet類聲明的對象中:
ResultSet rs=sql.executeQuery(SQL);
ResultSet對象的方法:
boolean next()
byte getByte(int columnIndex或String columnIndex)
Date getDate(int columnIndex或String columnIndex)
double getDouble(int columnIndex或String columnIndex)
float getFloat(int columnIndex或String columnIndex)
int getInt(int columnIndex或String columnIndex)
long getLong(int columnIndex或String columnIndex)
String getString(int columnIndex或String columnIndex)
(1)順序查詢:
①連接對象con調用getMetaData()返回一個DatabaseMetaData對象:
DatabaseMetaData metadata=con.getMetaData();
②MetaData對象再調用getColumns可以將表的欄位信息以行列的形式存儲在一個ResultSet對象中:
ResultSet tableMessage=metadata.getColumns(資料庫名,資料庫擴展名,表名,欄位名);
③游標獲取信息:
//游標初始位置在第1行之前
tableMessage對象調用next()使游標向下移動一行(順序查詢)
④控制游標:
Statement對象使用連接對象的createStatement(int type,int concurrency)方法可返回一個可滾動的結果集;
type的取值決定滾動方式:
ResultSet.TYPE_FORWORD_ONLY //結果集的游標只能向下滾動;
ResultSet.TYPE_SCROLL_INSENSITIVE //結果集的游標可以上下移動(當資料庫變化時,當前結果集不變);
ResultSet.TYPE_SCROLL_SENSITIVE //結果集的游標可以上下移動(當資料庫變化時,當前結果集同步改變);
concurrency的取值決定是否可以用結果集更新資料庫:
ResultSet.CONCUR_READ_ONLY //不能用結果集更新資料庫中的表;
ResultSet.CONCUR_UPDATABLE //能用結果集更新資料庫中的表;
ResultSet對象的方法:
public boolean previous()
將游標向上移動,當移到結果集第一行之前時返回false;
public void beforeFirst()
將游標移動到結果集的初始位置,即在第一行之前;
public void afterLast()
將游標移到結果集最後一行之後;
public void first()
將游標移到結果集的第一行;
public void last()
將游標移到結果集的最後一行;
public boolean isAfterLast()
判斷游標是否在最後一行之後;
public boolean isBeforeFirst()
判斷游標是否在第一行之前;
public boolean isFirst()
判斷游標是否指向結果集的第一行;
public boolean isLast()
判斷游標是否指向結果集的最後一行;
public int getRow()
得到當前游標所指行的行號,行號從1開始,如果結果集沒有行,返回0;
public boolean absolute(int row)
將游標移到參數row指定的行(負值為倒數的行數);
(2)排序查詢:
SQL語句:SELECT * FROM 表名 ORDER BY 欄位名
(3)模糊查詢:
SQL語句:SELECT * FROM 表名 WHERE 欄位名 LIKE '[含有的字元]%' //%代表0個或多個字元
4.更新、添加與刪除操作:
更新:
SQL語句:UPDATE <表名> SET <欄位名> = 新值 WHERE <條件子句>
如:UPDATE goods SET price = 3009 WHERE name='海爾電視機'
ResultSet結果集: ①結果集對象調用absolute()方法移動游標到第n行: rs.absolute(n); ②結果集對象調用以下方法更新第n行第p列的值: updateInt(String p,int x) , updateInt(int p,int x) updateLong(String p,long x) , updateLong(int p,long x) updateDouble(String p,double x) , updateDouble(int p,double x) updateString(String p,String x) , updateString(int p,String x) updateBoolean(String p,boolean x) , updateBoolean(int p,boolean x) updateDate(String p,Date x) , updateDate(int p,Date x) ③結果集對象調用updateRow()方法更新第n行記錄: rs.updateRow();
添加:
SQL語句:INSERT INTO 表(欄位列表) VALUES (對應的具體的記錄)
如:INSERT INTO goods(number,name,madeTime,price) VALUES ('A009','手機','2010-12-20',3976)
ResultSet結果集: ①結果集對象移動游標到插入行(暫存區域): rs.moveToInsertRow(); ②結果集對象調用以下方法更新插入行的列值: rs.updateString(1,"c002"); rs.updateDate(2,Date()); rs.updateDouble(3,5356); ③結果集對象調用insertRow()方法向資料庫表中插入一行新紀錄: rs.insertRow();
刪除:
SQL語句:DELETE FROM <表名> WHERE <條件子句>
如:DELETE FROM goods WHERE number='B002'
5.預處理語句:
//將SQL語句解釋為資料庫底層的內部命令,直接讓資料庫去執行這個命令,提高了訪問資料庫的速度
連接對象con調用prepareStatement(String sql)方法對參數sql指定的SQL語句進行預編譯處理;
該prepareStatement對象調用的方法:
ResultSet executeQuery()
boolean execute()
int executeUpdate()
對SQL進行預處理時可使用通配符"?"來代替欄位的值:
預處理語句設置通配符"?"的值的常用方法:
void setDate(int parameterIndex,Date x)
void setDouble(int parameterIndex,double x)
void setFloat(int parameterIndex,float x)
void setInt(int parameterIndex,int x)
void setLong(int parameterIndex,long x)
void setString(int parameterIndex,String x)
6.事務(一組SQL語句):
事務處理:應用程式保證事務中的SQL語句要麼全部都執行,要麼一個都不執行。
①連接對象con調用setAutoCommit(boolean autoCommite)方法,將參數autoCommit取值false來關閉自動提交模式;
②連接對象con調用commit()方法讓事務中的SQL語句全部生效;
③連接對象con調用rollback()方法處理事務失敗,即事務中任何一個SQL語句未能生效,拋出SQLException異常,調用rollback()方法撤銷事務所有的語句;
7.批處理:
Statement對象調用executeBatch()方法可以一次執行多條SQL語句;
事先讓Statement對象調用addBatch(String sql)方法將要執行的SQL語句添加到該對象中;
8.CachedRowSetImol類
//解決連接對象con關閉後,ResultSet對象中的數據消失問題(避免長時間占用資料庫的連接資源)
com.sun.rowset.CachedRowSetImol類(實現了CachedRowSet介面)
CachedRowSetImpl對象調用populate(Resultset rs)方法保存ResultSet對象中的數據:
如:ResultSet rs=sql.executeQuery(SQL); CachedRowSetImpl rowSet=new CachedRowSetImpl; rowSet.populate(rs); con.close();