1:使用SHOW語(yǔ)句找出在服務(wù)器上當(dāng)前存在什么數(shù)據(jù)庫(kù):
為渝中等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及渝中網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、渝中網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
mysql SHOW DATABASES;
2:2、創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)MYSQLDATA
mysql CREATE DATABASE MYSQLDATA;
3:選擇你所創(chuàng)建的數(shù)據(jù)庫(kù)
mysql USE MYSQLDATA; (按回車鍵出現(xiàn)Database changed 時(shí)說明操作成功!)
4:查看現(xiàn)在的數(shù)據(jù)庫(kù)中存在什么表
mysql SHOW TABLES;
5:創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表
mysql CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表的結(jié)構(gòu):
mysql DESCRIBE MYTABLE;
7:往表中加入記錄
mysql insert into MYTABLE values (”hyq”,”M”);
8:用文本方式將數(shù)據(jù)裝入數(shù)據(jù)庫(kù)表中(例如D:/mysql.txt)
mysql LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
9:導(dǎo)入.sql文件命令(例如D:/mysql.sql)
mysqluse database;
mysqlsource d:/mysql.sql;
10:刪除表
mysqldrop TABLE MYTABLE;
11:清空表
mysqldelete from MYTABLE;
12:更新表中數(shù)據(jù)
mysqlupdate MYTABLE set sex=”f” where name=’hyq’;
以下是無意中在網(wǎng)絡(luò)看到的使用MySql的管理心得,
在windows中MySql以服務(wù)形式存在,在使用前應(yīng)確保此服務(wù)已經(jīng)啟動(dòng),未啟動(dòng)可用net start mysql命令啟動(dòng)。而Linux中啟動(dòng)時(shí)可用“/etc/rc.d/init.d/mysqld start”命令,注意啟動(dòng)者應(yīng)具有管理員權(quán)限。
剛安裝好的MySql包含一個(gè)含空密碼的root帳戶和一個(gè)匿名帳戶,這是很大的安全隱患,對(duì)于一些重要的應(yīng)用我們應(yīng)將安全性盡可能提高,在這里應(yīng)把匿名帳戶刪除、 root帳戶設(shè)置密碼,可用如下命令進(jìn)行:
use mysql;
delete from User where User=”";
update User set Password=PASSWORD(’newpassword’) where User=’root’;
如果要對(duì)用戶所用的登錄終端進(jìn)行限制,可以更新User表中相應(yīng)用戶的Host字段,在進(jìn)行了以上更改后應(yīng)重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),此時(shí)登錄時(shí)可用如下類似命令:
mysql -uroot -p;
mysql -uroot -pnewpassword;
mysql mydb -uroot -p;
mysql mydb -uroot -pnewpassword;
上面命令參數(shù)是常用參數(shù)的一部分,詳細(xì)情況可參考文檔。此處的mydb是要登錄的數(shù)據(jù)庫(kù)的名稱。
在 進(jìn)行開發(fā)和實(shí)際應(yīng)用中,用戶不應(yīng)該只用root用戶進(jìn)行連接數(shù)據(jù)庫(kù),雖然使用root用戶進(jìn)行測(cè)試時(shí)很方便,但會(huì)給系統(tǒng)帶來重大安全隱患,也不利于管理技 術(shù)的提高。我們給一個(gè)應(yīng)用中使用的用戶賦予最恰當(dāng)?shù)臄?shù)據(jù)庫(kù)權(quán)限。如一個(gè)只進(jìn)行數(shù)據(jù)插入的用戶不應(yīng)賦予其刪除數(shù)據(jù)的權(quán)限。MySql的用戶管理是通過 User表來實(shí)現(xiàn)的,添加新用戶常用的方法有兩個(gè),一是在User表插入相應(yīng)的數(shù)據(jù)行,同時(shí)設(shè)置相應(yīng)的權(quán)限;二是通過GRANT命令創(chuàng)建具有某種權(quán)限的用戶。其中GRANT的常用用法如下:
grant all on mydb.* to NewUserName@HostName identified by “password” ;
grant usage on *.* to NewUserName@HostName identified by “password”;
grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”;
grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”;
若 要給此用戶賦予他在相應(yīng)對(duì)象上的權(quán)限的管理能力,可在GRANT后面添加WITH GRANT OPTION選項(xiàng)。而對(duì)于用插入U(xiǎn)ser表添加的用戶,Password字段應(yīng)用PASSWORD 函數(shù)進(jìn)行更新加密,以防不軌之人竊看密碼。對(duì)于那些已經(jīng)不用的用戶應(yīng)給予清除,權(quán)限過界的用戶應(yīng)及時(shí)回收權(quán)限,回收權(quán)限可以通過更新User表相應(yīng)字段, 也可以使用REVOKE操作。
下面給出本人從其它資料()獲得的對(duì)常用權(quán)限的解釋:
全局管理權(quán)限:
FILE: 在MySQL服務(wù)器上讀寫文件。
PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程。
RELOAD: 重載訪問控制表,刷新日志等。
SHUTDOWN: 關(guān)閉MySQL服務(wù)。
數(shù)據(jù)庫(kù)/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限:
ALTER: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。
CREATE: 建立新的數(shù)據(jù)庫(kù)或數(shù)據(jù)表。
DELETE: 刪除表的記錄。
DROP: 刪除數(shù)據(jù)表或數(shù)據(jù)庫(kù)。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的權(quán)限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什么也不允許做。
一、 簡(jiǎn)單查詢
簡(jiǎn)單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的
表或視圖、以及搜索條件等。
例如,下面的語(yǔ)句查詢testtable表中姓名為“張三”的nickname字段和email字段。
復(fù)制內(nèi)容到剪貼板
代碼:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='張三'
(一) 選擇列表
選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號(hào)、表達(dá)式、變量(包括局部變量和全局變量)等構(gòu)成。
1、選擇所有列
例如,下面語(yǔ)句顯示testtable表中所有列的數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT * FROM testtable
2、選擇部分列并指定它們的顯示次序
查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT nickname,email FROM testtable
3、更改列標(biāo)題
在選擇列表中,可重新指定列標(biāo)題。定義格式為:
列標(biāo)題=列名
列名 列標(biāo)題
如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語(yǔ)句使用漢字顯示列
標(biāo)題:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT 昵稱=nickname,電子郵件=email FROM testtable
4、刪除重復(fù)行
SELECT語(yǔ)句中使用ALL或DISTINCT選項(xiàng)來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)
為ALL。使用DISTINCT選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。
5、限制返回的行數(shù)
使用TOP n [PERCENT]選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOP n說明返回n行,而TOP n PERCENT時(shí),說明n是
表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT TOP 2 * FROM `testtable`
復(fù)制內(nèi)容到剪貼板
代碼:SELECT TOP 20 PERCENT * FROM `testtable`
(二) FROM子句
FROM子句指定SELECT語(yǔ)句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,
它們之間用逗號(hào)分隔。
在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列
所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢兩個(gè)表中的cityid時(shí)應(yīng)
使用下面語(yǔ)句格式加以限定:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT `username`,citytable.cityid
FROM `usertable`,`citytable`
WHERE usertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:
復(fù)制內(nèi)容到剪貼板
代碼:表名 as 別名
表名 別名例如上面語(yǔ)句可用表的別名格式表示為:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT `username`,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityidSELECT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語(yǔ)句所返回的結(jié)果集合中查詢數(shù)據(jù)。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT `title_id`,`title`
FROM `titles`
WHERE ` ytd_sales`10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再?gòu)闹袡z索數(shù)據(jù)。
(三) 使用WHERE子句設(shè)置查詢條件
WHERE子句設(shè)置查詢條件,過濾掉不需要的數(shù)據(jù)行。例如下面語(yǔ)句查詢年齡大于20的數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT * FROM usertable WHERE age20 WHERE子句可包括各種條件運(yùn)算符:
比較運(yùn)算符(大小比較):、=、=、、!、!=10 AND age復(fù)制內(nèi)容到剪貼板
代碼:SELECT * FROM `usertable` ORDER BY `age` DESC,`userid` ASC另外,可以根據(jù)表達(dá)式進(jìn)行排序。
二、 聯(lián)合查詢
UNION運(yùn)算符可以將兩個(gè)或兩個(gè)以上上SELECT語(yǔ)句的查詢結(jié)果集合合并成一個(gè)結(jié)果集合顯示,即執(zhí)行聯(lián)
合查詢。
UNION的語(yǔ)法格式為:
復(fù)制內(nèi)容到剪貼板
代碼:select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]其中selectstatement為待聯(lián)合的SELECT查詢語(yǔ)句。
ALL選項(xiàng)表示將所有行合并到結(jié)果集合中。不指定該項(xiàng)時(shí),被聯(lián)合查詢結(jié)果集合中的重復(fù)行將只保留一行。
聯(lián)合查詢時(shí),查詢結(jié)果的列標(biāo)題為第一個(gè)查詢語(yǔ)句的列標(biāo)題。因此,要定義列標(biāo)題必須在第一個(gè)查詢語(yǔ)
句中定義。要對(duì)聯(lián)合查詢結(jié)果排序時(shí),也必須使用第一查詢語(yǔ)句中的列名、列標(biāo)題或者列序號(hào)。
在使用UNION 運(yùn)算符時(shí),應(yīng)保證每個(gè)聯(lián)合查詢語(yǔ)句的選擇列表中有相同數(shù)量的表達(dá)式,并且每個(gè)查詢選
擇表達(dá)式應(yīng)具有相同的數(shù)據(jù)類型,或是可以自動(dòng)將它們轉(zhuǎn)換為相同的數(shù)據(jù)類型。在自動(dòng)轉(zhuǎn)換時(shí),對(duì)于數(shù)值類
型,系統(tǒng)將低精度的數(shù)據(jù)類型轉(zhuǎn)換為高精度的數(shù)據(jù)類型。
在包括多個(gè)查詢的UNION語(yǔ)句中,其執(zhí)行順序是自左至右,使用括號(hào)可以改變這一執(zhí)行順序。例如:
查詢1 UNION (查詢2 UNION 查詢3)
三、連接查詢
通過連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志。
在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在
一個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),通過連接操作查詢出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶帶
來很大的靈活性,他們可以在任何時(shí)候增加新的數(shù)據(jù)類型。為不同實(shí)體創(chuàng)建新的表,爾后通過連接進(jìn)行
查詢。
連接可以在SELECT 語(yǔ)句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時(shí)有助于
將連接操作與WHERE子句中的搜索條件區(qū)分開來。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標(biāo)準(zhǔn)所定義的FROM子句的連接語(yǔ)法格式為:
代碼:FROM join_table join_type join_table [ON (join_condition)]其中join_table指出參與連接操作的表名,連接可以對(duì)同一個(gè)表操作,也可以對(duì)多表操作,對(duì)同一個(gè)表操作的連接又稱做自連接。
join_type 指出連接類型,可分為三種:內(nèi)連接、外連接和交叉連接。
內(nèi)連接(INNER JOIN)使用比較運(yùn)算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。根據(jù)所使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。
交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運(yùn)算符、邏輯運(yùn)算符等構(gòu)成。
無論哪種連接都不能對(duì)text、ntext和image數(shù)據(jù)類型列進(jìn)行直接連接,但可以對(duì)這三種列進(jìn)行間接連接。例如:
代碼:SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)內(nèi)連接
內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。
內(nèi)連接分三種:
1、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
2、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括、=、、!。
3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。
例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:
代碼:SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復(fù)列(city和state):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連接內(nèi)連接時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件
的行。而采用外連接時(shí),它返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。
如下面使用左外連接將論壇內(nèi)容和作者信息連接起來:
代碼:SELECT a.*,b.* FROM `luntan` LEFT JOIN usertable as b
ON a.username=b.username下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
代碼:SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)
據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。
例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數(shù)將等
于6*8=48行。
代碼:SELECT `type`,`pub_name`
FROM `titles` CROSS JOIN `publishers`
ORDER BY `type`
java中怎樣創(chuàng)建MySQL數(shù)據(jù)庫(kù)列表 需要使用jdbc訪問數(shù)據(jù)庫(kù)。
具體步驟如下:
1:加載驅(qū)動(dòng) ,返回連接
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/student";
private static final String DATABASE_USRE = "root";
private static final String DATABASE_PASSWORD = "cs";
/**
* 返回連接
*
* @return Connection
*/
public static Connection getConnection() {
Connection dbConnection = null;
try {
Class.forName(DRIVER_CLASS);
dbConnection = DriverManager.getConnection(DATABASE_URL,
DATABASE_USRE, DATABASE_PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return dbConnection;
}
2:獲取連接,執(zhí)行sql語(yǔ)句
public static List selectAllStudent() {
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
List list = new ArrayList();
String sql = "select * from Student ";
try {
con = ConnectionManager.getConnection();
pstm = con.prepareStatement(sql);
// pstm.setString(1, uname);
rs = pstm.executeQuery();
while (rs.next()) {
Student model = new Student();
model.setStuId(rs.getInt("stuId"));
list.add(model);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnectionManager.closeResultSet(rs);
ConnectionManager.closeStatement(pstm);
ConnectionManager.closeConnection(con);
}
return list;
}
3:調(diào)用獲取列表方法。
JDBC連接數(shù)據(jù)庫(kù)
?創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫(kù)的程序,包含7個(gè)步驟:
1、加載JDBC驅(qū)動(dòng)程序:
在連接數(shù)據(jù)庫(kù)之前,首先要加載想要連接的數(shù)據(jù)庫(kù)的驅(qū)動(dòng)到JVM(Java虛擬機(jī)),
這通過java.lang.Class類的靜態(tài)方法forName(String className)實(shí)現(xiàn)。
例如:
try{
//加載MySql的驅(qū)動(dòng)類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅(qū)動(dòng)程序類 ,加載驅(qū)動(dòng)失??!");
e.printStackTrace() ;
}
成功加載后,會(huì)將Driver類的實(shí)例注冊(cè)到DriverManager類中。
2、提供JDBC連接的URL
?連接URL定義了連接數(shù)據(jù)庫(kù)時(shí)的協(xié)議、子協(xié)議、數(shù)據(jù)源標(biāo)識(shí)。
?書寫形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標(biāo)識(shí)
協(xié)議:在JDBC中總是以jdbc開始
子協(xié)議:是橋連接的驅(qū)動(dòng)程序或是數(shù)據(jù)庫(kù)管理系統(tǒng)名稱。
數(shù)據(jù)源標(biāo)識(shí):標(biāo)記找到數(shù)據(jù)庫(kù)來源的地址與連接端口。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=truecharacterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding設(shè)置為
gb2312或GBK,本參數(shù)必須設(shè)置為true 。characterEncoding=gbk:字符編碼方式。
3、創(chuàng)建數(shù)據(jù)庫(kù)的連接
?要連接數(shù)據(jù)庫(kù),需要向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象,
該對(duì)象就代表一個(gè)數(shù)據(jù)庫(kù)的連接。
?使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的數(shù)據(jù)庫(kù)的路徑、數(shù)據(jù)庫(kù)的用戶名和
密碼來獲得。
例如:
//連接MySql數(shù)據(jù)庫(kù),用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("數(shù)據(jù)庫(kù)連接失敗!");
se.printStackTrace() ;
}
4、創(chuàng)建一個(gè)Statement
?要執(zhí)行SQL語(yǔ)句,必須獲得java.sql.Statement實(shí)例,Statement實(shí)例分為以下3
種類型:
1、執(zhí)行靜態(tài)SQL語(yǔ)句。通常通過Statement實(shí)例實(shí)現(xiàn)。
2、執(zhí)行動(dòng)態(tài)SQL語(yǔ)句。通常通過PreparedStatement實(shí)例實(shí)現(xiàn)。
3、執(zhí)行數(shù)據(jù)庫(kù)存儲(chǔ)過程。通常通過CallableStatement實(shí)例實(shí)現(xiàn)。
具體的實(shí)現(xiàn)方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
其實(shí)你在網(wǎng)上找一下資料就有的.建議:如果你對(duì)jdbc還不是很熟悉的話,先去學(xué)習(xí)一下jdbc的用法,其實(shí)很簡(jiǎn)單,看看就會(huì)了. 這里給出一個(gè)示例代碼,用于向users表中插入一條記錄, users表結(jié)構(gòu)(id:integer auto_increment,login_id:varchar, login_pwd:varchar) import java.sql.*; public class SampleIntro{public static void main(String[] args){try{Connection conn; Statement stmt; //加載Connector/J驅(qū)動(dòng) //這一句也可寫為:Class.forName("com.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver").newInstance(); //建立到MySQL的連接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "guapo"); //執(zhí)行SQL語(yǔ)句
總結(jié)起來就是加載驅(qū)動(dòng),建立連接。
import java.sql.*;
public class DB {
public static Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/shopping?user=rootpassword=123456");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static PreparedStatement prepare(Connection conn, String sql) {
PreparedStatement pstmt = null;
try {
if(conn != null) {
pstmt = conn.prepareStatement(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
}
public static PreparedStatement prepare(Connection conn, String sql, int autoGenereatedKeys) {
PreparedStatement pstmt = null;
try {
if(conn != null) {
pstmt = conn.prepareStatement(sql, autoGenereatedKeys);
}
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
}
public static Statement getStatement(Connection conn) {
Statement stmt = null;
try {
if(conn != null) {
stmt = conn.createStatement();
}
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
}
/*
public static ResultSet getResultSet(Connection conn, String sql) {
Statement stmt = getStatement(conn);
ResultSet rs = getResultSet(stmt, sql);
close(stmt);
return rs;
}
*/
public static ResultSet getResultSet(Statement stmt, String sql) {
ResultSet rs = null;
try {
if(stmt != null) {
rs = stmt.executeQuery(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public static void executeUpdate(Statement stmt, String sql) {
try {
if(stmt != null) {
stmt.executeUpdate(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn) {
try {
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Statement stmt) {
try {
if(stmt != null) {
stmt.close();
stmt = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
一個(gè)簡(jiǎn)單的沒經(jīng)過處理的連接數(shù)據(jù)庫(kù)的例子供你參考
public class DBUtils {
private static String driver;
private static String url;
private static String user;
private static String password;
private static BasicDataSource ds;
static {
try {
Properties props = new Properties();
// 從類路徑中加文件
props.load(DBUtils.class.getClassLoader().getResourceAsStream(
"com/tarena/netctoss/utils/db.properties"));
//這個(gè)地方是你的數(shù)據(jù)庫(kù)連接信息配置
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static Connection getConnection() throws Exception {
Connection con = ds.getConnection();
return con;
}
public static void main(String[] args) throws Exception {
Connection con = getConnection();
System.out.println(con.getClass().getName());
}
}
db.properties 文件中的內(nèi)容
這個(gè)是連接oracle用的
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@192.168.0.26:1521:tarena
user=數(shù)據(jù)庫(kù)
password=密碼
這個(gè)是連接MySQL用的
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/itv_music?useUnicode=truecharacterEncoding=utf8
user=數(shù)據(jù)庫(kù)
password=密碼