|
Mysql是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。在2008年1月16日被Sun公司收購。目前MySQL被廣泛地應用在internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開發(fā)源碼這一特點,許多中小網(wǎng)站為了降低網(wǎng)站總體擁有成本選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。 連接數(shù)據(jù)命令:mysql –u用戶名 –p密碼 查看mysql幫助命令:, 創(chuàng)建數(shù)據(jù)庫:creat database 數(shù)據(jù)庫名稱; 刪除數(shù)據(jù)庫:drop database 數(shù)據(jù)庫名稱; 使用數(shù)據(jù)庫:use 數(shù)據(jù)名稱; 創(chuàng)建數(shù)據(jù)庫表:creat table 表名(字段名1 字段類型 [DEFAULT 默認值] [約束], 字段名2 字段類型 [DEFAULT 默認值] [約束], 。。。 字段名n 字段類型 [DEFAULT 默認值] [約束]); 例如:creat table mytable(id int auto_increment primery key, name varchar(14) not aull, password varchar(32) not null, age int not null); 刪除數(shù)據(jù)庫表:drop table 表名稱; 查看表結(jié)構(gòu):desc 表名稱; 查看全部數(shù)據(jù)庫: show databases; 查看一個數(shù)據(jù)庫的全部表:show tables; 運行SQL腳本:. ***.ql SQL語法基礎: SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)是一個功能強大的數(shù)據(jù)庫語言。SQL通常用于與數(shù)據(jù)庫的通訊。ANSI(美國國家標準學會)聲稱,SQL是關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標準語言?,F(xiàn)在的數(shù)據(jù)庫系統(tǒng)中,基本上都支持標準的SQL語法的。 SQL分類:SQL功能強大,概括起來,它可以分成以下幾組: DML(Data Manipulation Language,數(shù)據(jù)操作語言)-----用于檢索或者修改數(shù)據(jù);--是開發(fā)中經(jīng)常使用到的。 DDL(Data Definition Language,數(shù)據(jù)定義語言)-----用于定義數(shù)據(jù)結(jié)構(gòu),如創(chuàng)建、修改或者刪除數(shù)據(jù)庫對象; DCL(Data Control Language,數(shù)據(jù)控制語言)-----用于定義數(shù)據(jù)庫用戶的權(quán)限。 插入表信息:insert into 表名稱 values(按字段順序及對應類型分別為各字段賦值); 執(zhí)行以上插入信息:commit; Mysql的數(shù)據(jù)類型 1  mysql數(shù)據(jù)類型(2)  增加數(shù)據(jù): Insert into 表名稱(字段1,字段2,字段3,。。。,字段n)values(值1,值2,值3,。。。,值n); 刪除數(shù)據(jù):delete from 表名稱[刪除條件];//若未指出刪除條件,則表示刪除一張表的全部數(shù)據(jù),一般在描述條件時都是使用id表示。 更新數(shù)據(jù):update 表名稱 set 字段1=值1,。。。字段n=值n [where更新條件]; 簡單查詢語句:select {* |column alias} from 表名稱 [where condition(s)]; 對于數(shù)據(jù)庫操作而言,查詢是最復雜的了,查詢分為以下幾種: 簡單查詢 限定查詢,指定查詢的條件 多表查詢 分組統(tǒng)計 子查詢 交、并、補 例如1: //查詢出姓名或密碼中包含字母“m”的用戶。 select * from user where nam like ‘%m%’ or password like ‘%m%’; 例如2://查詢部分數(shù)據(jù),有分頁功能 select * from user where name like ‘%m%’or password like ‘%m%’ limt 10,5; JDBC操作步驟及數(shù)據(jù)庫連接操作 目標: , 掌握JDBC的操作步驟 , 掌握數(shù)據(jù)庫驅(qū)動程序的配置方法 , 可以使用JDBC進行數(shù)據(jù)庫連接 JDBC本身是一個標準,所以其操作步驟是固定的,以后需要修改很少的一部分代碼就可以達到不同數(shù)據(jù)庫間的連接轉(zhuǎn)換功能。 JDBC操作步驟 數(shù)據(jù)庫安裝并配置完成后,就可以按照以下的步驟進行數(shù)據(jù)庫的操作了: (1) 加載數(shù)據(jù)庫驅(qū)動程序:各個數(shù)據(jù)庫都會提供JDBC的驅(qū)動程序開發(fā)包,直接把 JDBC操作所需要的開發(fā)包(一般為*.jar或*.zip)直接配置到classpath路徑即可 。 (2) 連接數(shù)據(jù)庫:根據(jù)各個數(shù)據(jù)庫的不同,連接的地址也不同,此連接地址將由 數(shù)據(jù)庫廠商提供,一般在使用JDBC連接數(shù)據(jù)庫的時候都要求用戶輸入數(shù)據(jù)庫 連接的用戶名和密碼,本章使用的是mysql數(shù)據(jù)庫,所以用戶名為“root”,密 ,用戶在取得連接之后才可以對數(shù)據(jù)庫進行查詢或更新的碼為“mysqladmin” 操作。 (3) 使用語句進行數(shù)據(jù)庫操作:數(shù)據(jù)庫操作分為更新和查詢兩種操作,除了可以 使用標準的SQL語句之外,對于各個數(shù)據(jù)庫也可以使用其自己提供的各種命 令。 (4) 關(guān)閉數(shù)據(jù)庫連接:數(shù)據(jù)庫操作完畢之后需要關(guān)閉連接以釋放資源。 注意:如果要想連接數(shù)據(jù)庫,則肯定要使用連接地址。而且數(shù)據(jù)庫的連接時非常有限  的,所以打開 之后一定要關(guān) 閉。 JDBC操作步 驟 (1)配置數(shù) 據(jù)庫的驅(qū)動程 序 數(shù)據(jù)庫的驅(qū)動程序是由各個數(shù)據(jù)庫生產(chǎn)商提供,只要在java中要想連接數(shù)據(jù)庫,則肯 定各個DB要有所支持。 下載地址:;ads/connector/j/5.1.html 假如將下載好的驅(qū)動程序放在C盤目錄中。所以此時直接修改classpath即可,在windo ws中的環(huán)境中直接修改即可,如果沒有classpath則自己增加一個新的。  3 (2)加載驅(qū)動程序 通過Class.forName()語句可以加載一個驅(qū)動程序。 Class實例化需要一個完整的包.類名稱,此:“包.類”名稱的路徑就應該是驅(qū)動程序的名稱。 例如: public class ConnectionDemo01{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; public static void main(String args[]){ try{ Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 }catch(ClassNotFoundException e){ e.printStackTrace() ; } } } (3)連接及關(guān)閉數(shù)據(jù)庫 數(shù)據(jù)庫驅(qū)動程序可以正常加載的話,下面就可以連接數(shù)據(jù)庫了,使用DriverManager類進行連接操作,DriverManager類中的常用方法如下:  注意:在DriverManger中,提供的主要操作就是得到一個數(shù)據(jù)庫的連接,getConnection()方法就是取得連接對象,此方法返回的類型是Connection對象,不管使用哪種方式連接,都必須提供一個數(shù)據(jù)庫的連接地址,如果在連接數(shù)據(jù)庫的時候需要用戶名和密碼,則還需要將用戶名和密碼設置上。 數(shù)據(jù)庫在連接的時候肯定需要一個連接地址,這些連接地址將由各個數(shù)據(jù)庫生產(chǎn)商提供的。 Mysql數(shù)據(jù)庫的連接地址格式:jdbc:mysql://IP地址:端口號/數(shù)據(jù)庫名稱 數(shù)據(jù)庫連接地址的形式: JDBC雖然提供了與平臺無關(guān)的數(shù)據(jù)庫操作,但是各個數(shù)據(jù)庫的連接地址是有差異的,JDBC的連接地址實際上是由以下的三個部分組成。  jdbc協(xié)議:JDBC URL中的協(xié)議總是jdbc;  子協(xié)議:驅(qū)動程序或數(shù)據(jù)庫連接機制(這種機制可由一個或多個驅(qū)動程序支 持)的名稱,例如:mysql  子名稱:一種標識數(shù)據(jù)庫的方法。必須遵循“//主機名:端口/子協(xié)議”的標 準URL命名約定,例如://localhost:3306/mldn 4 Connection:通過DriverManager取得Connection對象之后,實際上就表示數(shù)據(jù)庫連接上了, 連接上數(shù)據(jù)庫之后就可以進行數(shù)據(jù)庫的更新及查詢操作,但是操作的最后數(shù)據(jù)庫連接必須 關(guān)閉。 例如:ConnectionDeMO02.java import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; public class ConnectionDemo02{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; // MySQL數(shù)據(jù)庫的連接密碼 public static final String DBPASS = "mysqladmin" ; public static void main(String args[]){ Connection conn = null ; // 數(shù)據(jù)庫連接 try{ Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 }catch(ClassNotFoundException e){ e.printStackTrace() ; } try{ conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; }catch(SQLException e){ e.printStackTrace() ; } System.out.println(conn) ; // 如果此時可以打印表示連接正常 try{ conn.close() ; // 數(shù)據(jù)庫關(guān)閉 }catch(SQLException e){ e.printStackTrace() ; } } } 執(zhí)行數(shù)據(jù)庫的更新操作 目標: , 可以使用Connection對象取得Statement實例 , 可以使用Statement進行數(shù)據(jù)增加、修改、刪除操作 Statement接口: 數(shù)據(jù)庫可以連接之后,下面就可以進行數(shù)據(jù)庫的具體操作了,如果要想對數(shù)據(jù)庫進行操作, 則肯定要使用Statement接口完成,此接口可以使用Connection接口中提供的createStateme 5 nt()方法實例化。此接口中定義了以下的常用方法:  以user表為例,user表的建立如下:  范例:InsertDemo01.java import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.Statement ; public class InsertDemo01{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; // MySQL數(shù)據(jù)庫的連接密碼 public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception { // 所有的異常拋出 Connection conn = null ; // 數(shù)據(jù)庫連接 Statement stmt = null ; // 數(shù)據(jù)庫操作 Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 String sql = "INSERT INTO user(name,password,age,sex,birthday) "+ " VALUES ('李興華','www.mldn.cn',30,'男','2008-08-27')" ; conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; stmt = conn.createStatement() ; // 實例化Statement對象 stmt.executeUpdate(sql) ; // 執(zhí)行數(shù)據(jù)庫更新操作 stmt.close() ; // 關(guān)閉操作 6 conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } 注意:一般JDBC中要進行正著打開,倒著關(guān)閉。 ResultSet接口  掌握ResultSet接口的主要作用  使用ResultSet接口查詢數(shù)據(jù) 數(shù)據(jù)庫的操作中要分為更新和查詢操作,查詢操作的時候會將全部的查詢結(jié)果返回給用戶。 使用SQL中的select語句可以將數(shù)據(jù)庫的全部結(jié)果查詢出來,在JDBC的操作中數(shù)據(jù)庫的所有查詢記錄將使用ResultSet進行接收,并使用ResultSet顯示內(nèi)容。  在操作的時候使用Statement中的executeQuery()方法進行數(shù)據(jù)庫的查詢操作。此方法的返回值就是ResultSet接口。 范例:ResultSetDemo01.java import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.sql.Statement ; import java.sql.ResultSet ; public class ResultSetDemo01{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; 據(jù)庫的連接密碼 // MySQL數(shù) public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception { Connection conn = null ; // 數(shù)據(jù)庫連接 Statement stmt = null ; // 數(shù)據(jù)庫的操作對象 ResultSet rs = null ; // 保存查詢結(jié)果 String sql = "SELECT id,name,password,age,sex,birthday FROM user" ; Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; stmt = conn.createStatement() ; 7 rs = stmt.executeQuery(sql) ; while(rs.next()){ // 依次取出數(shù)據(jù) int id = rs.getInt("id") ; // 取出id列的內(nèi)容,也可以通過編號比如rs.getInt(1)獲得 String name = rs.getString("name") ; // 取出name列的內(nèi)容 String password = rs.getString("password") ; // 取出password列的內(nèi)容 int age = rs.getInt("age") ; // 取出age列的內(nèi)容 String sex = rs.getString("sex") ; // 取出sex列的內(nèi)容 java.util.Date d = rs.getDate("birthday") ; // 取出birthday列的內(nèi)容 System.out.print("編號:" + id + ";") ; System.out.print("姓名:" + name + ";") ; System.out.print("密碼:" + password + ";") ; System.out.print("年齡:" + age + ";") ; System.out.print("性別:" + sex + ";") ; System.out.println("生日:" + d + ";") ; System.out.println("-----------------------") ; } rs.close() ; stmt.close() ; conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } PreparedStatement接口 , 掌握PreparedStatemen接口的工作原理 , 可以使用PreparedStatemen進行數(shù)據(jù)庫的更新及查詢操作 PreparedStatemen是Statement的子接口,屬于預處理操作,與直接使用Statement不同的是,PreparedStatemen在操  作時,是先在數(shù)據(jù)表之中準 備好了一條SQL語句,但是此 SQL語句的具體內(nèi)容暫時不設 置,而是之后再進行設置, 以插入數(shù)據(jù)為例,使用Prep aredStatemen插入數(shù)據(jù)時,數(shù) 據(jù)表中的指針首先指向最后一條數(shù)據(jù)之后,但是里面的內(nèi)容不不知道的,而是等待用戶分 別設置。 PreparedStatemet的基本操作方法 8  注意:(1)關(guān)于日期的輸入問題,在正常情況下都使用java.util.Date表示日期,但是在PreparedStatement中如果想使用日期則必須使用java.sql.Date類型。 (2)在PreparedStatement中定義了setDate()方法,此方法可以設置日期內(nèi)容,但是此方法使用時,后面的Date類型變量是java.sql.Date,而不是java.util.Date,所以如果要想將一個java.util.Date類型的內(nèi)容變?yōu)閖ava.sql.Date類型的內(nèi)容應該使用如下的語句形式: 例如:String birthday=“2011-01-08”; Java.util.Date temp=null; //通過SimpleDateFormat類將一個字符串變?yōu)閖ava.util.Date類型 temp=new SimleDateFormat(“YYYY-MM-dd”)。parse(birthday); //通過java.util.Date取出具體的日期數(shù),并將其變?yōu)閖ava.sql.Date類型 java.sql.Date bir=new java.sql.Date(temp.getTime()); 范例:使用PreapredStatement執(zhí)行數(shù)據(jù)庫的插入操作,PreparedStatementDemo01。Java import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.sql.PreparedStatement ; import java.text.SimpleDateFormat ; public class PreparedStatementDemo01 { // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; 據(jù)庫的連接密碼 // MySQL數(shù) public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception{ // 所有異常拋出 Connection conn = null ; // 數(shù)據(jù)庫連接 PreparedStatement pstmt = null ; // 數(shù)據(jù)庫操作 String name = "李興華" ; // 姓名 String password = "www.mldnjava.cn" ; // 密碼 int age = 30 ; // 年齡 String sex = "男" ; // 性別 String birthday = "2007-08-27" ; // 生日 java.util.Date temp = null ; 9 temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday) ; java.sql.Date bir = new java.sql.Date(temp.getTime()) ; String sql = "INSERT INTO user(name,password,age,sex,birthday) VALUES (?,?,?,?,?) " ; Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; pstmt = conn.prepareStatement(sql) ; // 實例化PreapredStatement對象 pstmt.setString(1,name) ; pstmt.setString(2,password) ; pstmt.setInt(3,age) ; pstmt.setString(4,sex) ; pstmt.setDate(5,bir) ; int t = pstmt.executeUpdate() ; // 執(zhí)行更新 System.out.println(t); pstmt.close() ; conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } 范例2:通過PreparedStatement進行查詢操作 import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.sql.ResultSet ; import java.sql.PreparedStatement ; import java.text.SimpleDateFormat ; public class PreparedStatementDemo02 { // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; // MySQL數(shù)據(jù)庫的連接密碼 public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception{ // 所有異常拋出 Connection conn = null ; // 數(shù)據(jù)庫連接 PreparedStatement pstmt = null ; // 數(shù)據(jù)庫操作 String keyWord = "李" ; // 設置查詢關(guān)鍵字 ResultSet rs = null ; // 接收查詢結(jié)果 String sql = "SELECT id,name,password,age,sex,birthday " + " FROM user WHERE name LIKE ? OR password LIKE ? OR sex LIKE ?" ; Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; pstmt = conn.prepareStatement(sql) ; // 實例化PreapredStatement對象 pstmt.setString(1,"%"+keyWord+"%") ; 10 pstmt.setString(2,"%"+keyWord+"%") ; pstmt.setString(3,"%"+keyWord+"%") ; rs = pstmt.executeQuery() ; // 執(zhí)行查詢 while(rs.next()){ int id = rs.getInt(1) ; String name = rs.getString(2) ; String pass = rs.getString(3) ; int age = rs.getInt(4) ; String sex = rs.getString(5) ; java.util.Date d = rs.getDate(6) ; System.out.print("編號:" + id + ";") ; System.out.print("姓名:" + name + ";") ; System.out.print("密碼:" + pass + ";") ; System.out.print("年齡:" + age + ";") ; System.out.print("性別:" + sex + ";") ; System.out.println("生日:" + d + ";") ; System.out.println("-------------------------") ; } rs.close() ; pstmt.close() ; conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } 在開發(fā)中到底是使用PreapredStatemet還是Statement接口操作呢,實際開發(fā)中不會使用Sta tement接口的。因為其采用的是拼湊的SQL語句形式,那么這樣一來就有可能造成SQL的注 入漏洞。 CallableStatemet接口  了解MySQL存儲過程的建立  了解存儲過程中參數(shù)傳遞的三種方式  了解CallableStatement調(diào)用存儲過程的操作 CallableStatement接口的常用方法  由于現(xiàn)在在開發(fā)過程中,存儲過程用的是越來越少了,因此制作了解。 CallableStatement主要是調(diào)用數(shù)據(jù)庫中的存儲過程,它也是Statement接口的子接口, 在使用CallableStatement的時候可以接收過程的返回值。 建立存儲過程: DELIMITER // 11 DROP PROCEDURE myproc // -- 刪除過程 CREATE PROCEDURE myproc(IN p1 int,INOUT p2 int,OUT p3 int) BEGIN SELECT p1,p2,p3 ; -- 輸出p1、p2、p3的內(nèi)容 SET p1=10 ; SET p2=20 ; SET p3=30 ; END // DELIMITER ; SET @x1=70 ; -- 定義變量x1,內(nèi)容為70 SET @x2=80 ; -- 定義變量x2,內(nèi)容為80 CALL myproc(@x1,@x2,@x3) ; SELECT @x1,@x2,@x3 ; 范例: import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.sql.CallableStatement ; import java.sql.Types ; public class ProcDemo{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; // MySQL數(shù)據(jù)庫的連接密碼 public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception{ // 所有異常拋出 Connection conn = null ; // 數(shù)據(jù)庫連接 CallableStatement cstmt = null ; // 數(shù)據(jù)庫操作 String sql = "{CALL myproc(?,?,?)}" ; // 調(diào)用過程 Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; cstmt = conn.prepareCall(sql) ; cstmt.setInt(1,70) ; // 設置第一個參數(shù)是70 cstmt.setInt(2,80) ; // 設置第二個參數(shù)是80 cstmt.registerOutParameter(2,Types.INTEGER) ; cstmt.registerOutParameter(3,Types.INTEGER) ; cstmt.execute() ; // 執(zhí)行過程 System.out.println("INOUT的返回值:" + cstmt.getInt(2)) ; 12 System.out.println("OUT的返回值:" + cstmt.getInt(3)) ; cstmt.close() ; conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } 使用元數(shù)據(jù)分析數(shù)據(jù)庫 DatabaseMetaData,使用元數(shù)據(jù)可以分析數(shù)據(jù)庫的基本信息,包括版本,數(shù)據(jù)庫的名稱等等,或者得到指定表的主鍵,常用方法包括:  范例: import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.sql.DatabaseMetaData ; import java.sql.ResultSet ; public class DatabaseMetaDataDemo{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; // MySQL數(shù)據(jù)庫的連接密碼 public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception{ // 所有異常拋出 Connection conn = null ; // 數(shù)據(jù)庫連接 DatabaseMetaData dmd = null ; // 數(shù)據(jù)庫元數(shù)據(jù) ResultSet rs = null ; Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; dmd = conn.getMetaData() ; // 實例化對象 System.out.println("數(shù)據(jù)庫名稱:" + dmd.getDatabaseProductName() ) ; System.out.println("數(shù)據(jù)庫版本:" + dmd.getDatabaseMajorVersion() + "." + dmd.getDatabaseMinorVersion()) ; 13 rs = dmd.getPrimaryKeys(null,null,"user") ; // 取得user表的主鍵 while(rs.next()){ System.out.println("表類別:" + rs.getString(1)) ; System.out.println("表模式:" + rs.getString(2)) ; System.out.println("表名稱:" + rs.getString(3)) ; System.out.println("列名稱:" + rs.getString(4)) ; System.out.println("主鍵序列號:" + rs.getString(5)) ; System.out.println("主鍵名稱:" + rs.getString(6)) ; } conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } ResultSetMetaData:使用它可以獲取關(guān)于ResultSet對象中列的類型和屬性信息的對象,ResultSetMetaData存儲了ResultSet的MetaData,可以通過以下的方法取得一些ResultSet的信息。  范例: import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.sql.ResultSetMetaData ; import java.sql.PreparedStatement ; public class ResultSetMetaDataDemo{ // 定義MySQL的數(shù)據(jù)庫驅(qū)動程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; // 定義MySQL數(shù)據(jù)庫的連接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; // MySQL數(shù)據(jù)庫的連接用戶名 public static final String DBUSER = "root" ; // MySQL數(shù)據(jù)庫的連接密碼 public static final String DBPASS = "mysqladmin" ; public static void main(String args[]) throws Exception{ // 所有異常拋出 Connection conn = null ; // 數(shù)據(jù)庫連接 ResultSetMetaData rsmd = null ; // 數(shù)據(jù)庫元數(shù)據(jù) PreparedStatement pstmt = null ; Class.forName(DBDRIVER) ; // 加載驅(qū)動程序 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; String sql = "SELECT id,name,password,age,sex,birthday FROM user" ; pstmt = conn.prepareStatement(sql) ; // 實例化對象 14 rsmd = pstmt.getMetaData() ; System.out.println("一共返回" + rsmd.getColumnCount() + "條數(shù)據(jù)。") ; if(rsmd.isAutoIncrement(1) ){ System.out.println(rsmd.getColumnName(1)+"列是自動增長的。") ; } conn.close() ; // 數(shù)據(jù)庫關(guān)閉 } } 15
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|