Java中對(duì)數(shù)據(jù)庫(kù)的操作一般分為三個(gè)步驟
一,加載驅(qū)動(dòng)程序
Class.forName("org.postgresql.Driver");
二,打開連接
String url="jdbc:postgresql:COREJAVA";
String username="dbuser";
String password="secret";
Connection conn=DriverManager.getConnection(url,username,password);
前面兩個(gè)步驟非常的簡(jiǎn)單,對(duì)于任意的數(shù)據(jù)庫(kù)來(lái)講都是這些內(nèi)容,而說(shuō)道比較多的就是第三步了
三,對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
顯而易見對(duì)數(shù)據(jù)庫(kù)的操作就是執(zhí)行SQL命令,首先需要?jiǎng)?chuàng)建一個(gè)Statement對(duì)象。要?jiǎng)?chuàng)建statement對(duì)象,需要使用調(diào)用DriverManager.getConnection方法所獲得的Connection對(duì)象。
Statement stmt=conn.createStatatement();
String command="UPDATE Books SET Price=Price-5.00 WHERE Title NOT LIKE '%Introduction%'";
然后調(diào)用Statement類中的executeUpdate方法: stmt.executeUpdate(command);
executeUpdate方法將返回受SQL命令影響的行數(shù)。列入,在先前的例子中調(diào)用本方法將返回那些降價(jià)5美元的圖書的總數(shù).
executeUpdate方法既可以執(zhí)行諸如INSERT,UPDATE和DELETE之類的操作,也可以執(zhí)行諸如CREATE TABLE和DROP TABLE之類的數(shù)據(jù)命令。
但是,執(zhí)行SELECT查詢時(shí)必須使用executeQuery方法。另外還有一個(gè)execute方法可以執(zhí)行任意的SQL語(yǔ)句。此方法通常只用于用戶提供的交互式查詢。
當(dāng)我們執(zhí)行查詢操作時(shí),通常最感興趣的是查詢結(jié)果。executeQuery方法返回一個(gè)ResultSet對(duì)象,可以通過(guò)它來(lái)每次移行地迭代遍歷所有查詢結(jié)果。 ResultSet rs=stmt.executeQuery("SELECT * FROM Books");
另外當(dāng)你看這點(diǎn)的時(shí)候,我可以告訴你SQL的數(shù)據(jù)類型和Java的數(shù)據(jù)類型并非完全一致,我不是很想完全列出所有的對(duì)照表,因?yàn)槿我獾臅厦婵隙ǘ加邢嚓P(guān)的介紹。只是下面的這幾種你最好還是記住,因?yàn)榉浅S锌赡芫驮谀愕某绦蛑袝?huì)出現(xiàn)錯(cuò)誤,左邊為SQL右邊為Java數(shù)據(jù)類型
Interger或INT int
NUMERIC(m,n),DECIMAL(m,n)或DEC(m,n) java.math.BigDecimal
FLOAT(n) double
REAL float
DOUBLE double
下面介紹一下java.sql.Statement的常用方法,我覺得這個(gè)挺重要的
int executeUpdate(String sql)
執(zhí)行字符串中指定的INSERT,UPDATE,DELETE等SQL語(yǔ)句。還可以執(zhí)行數(shù)據(jù)定義語(yǔ)言(DLL)的語(yǔ)句,如CREATE TABLE.返回受影響的記錄總數(shù),如果是沒有更新計(jì)數(shù)的語(yǔ)句,則返回-1.本著對(duì)大家和自己負(fù)責(zé)的任務(wù)我徹底用了這個(gè)函數(shù),在執(zhí)行INSERT,UPDATE,DELETE的操作的事后返回的的確是影響的函數(shù),一般你執(zhí)行一條INSERT語(yǔ)句的事后返回的肯定是1,此外當(dāng)你執(zhí)行CREATE TABLE操作的時(shí)候返回的是0.至于等于-1的情況我還沒有遇到,等遇到的時(shí)候第一時(shí)間更新此文章。
boolean execute(String sqlStatement)
執(zhí)行字符串中指定的SQL語(yǔ)句。如果該語(yǔ)句返回一個(gè)結(jié)果集則該方法返回true;反之,返回false。使用getResultSet或getUpdateCount方法可以得到語(yǔ)句的執(zhí)行結(jié)果。
int getUpdateCount()
返回受前一條更新語(yǔ)句影響的記錄總數(shù)。如果前一條語(yǔ)句未更新數(shù)據(jù)庫(kù),則返回-1.對(duì)于每一條執(zhí)行過(guò)的語(yǔ)句,該方法只能被調(diào)用一次。
ResultSet getResultSet()
返回前一條查詢語(yǔ)句的結(jié)果集。如果前一條語(yǔ)句未產(chǎn)生結(jié)果集,則返回null值。對(duì)于每一條執(zhí)行過(guò)的語(yǔ)句,該方法只能被調(diào)用一次。
接著簡(jiǎn)單的介紹一下PreparedStatement的用法吧,就不描述了僅給出代碼,大家肯定都會(huì)明白的
string sql = "select * from people p where p.id = ? and p.name = ?";
PreparedStatement pStmt=conn.prepareStatement(sql);
pStmt.setint(1,id);
pStmt.setstring(2,name);
resultset rs = pStmt.executequery();
==========================================================================================
pStmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
pStmt.setString(1,var1);
pStmt.setString(2,var2);
pStmt.setString(3,var3);
pStmt.setString(4,var4);
pStmt.executeUpdate();
一,加載驅(qū)動(dòng)程序
Class.forName("org.postgresql.Driver");
二,打開連接
String url="jdbc:postgresql:COREJAVA";
String username="dbuser";
String password="secret";
Connection conn=DriverManager.getConnection(url,username,password);
前面兩個(gè)步驟非常的簡(jiǎn)單,對(duì)于任意的數(shù)據(jù)庫(kù)來(lái)講都是這些內(nèi)容,而說(shuō)道比較多的就是第三步了
三,對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
顯而易見對(duì)數(shù)據(jù)庫(kù)的操作就是執(zhí)行SQL命令,首先需要?jiǎng)?chuàng)建一個(gè)Statement對(duì)象。要?jiǎng)?chuàng)建statement對(duì)象,需要使用調(diào)用DriverManager.getConnection方法所獲得的Connection對(duì)象。
Statement stmt=conn.createStatatement();
String command="UPDATE Books SET Price=Price-5.00 WHERE Title NOT LIKE '%Introduction%'";
然后調(diào)用Statement類中的executeUpdate方法: stmt.executeUpdate(command);
executeUpdate方法將返回受SQL命令影響的行數(shù)。列入,在先前的例子中調(diào)用本方法將返回那些降價(jià)5美元的圖書的總數(shù).
executeUpdate方法既可以執(zhí)行諸如INSERT,UPDATE和DELETE之類的操作,也可以執(zhí)行諸如CREATE TABLE和DROP TABLE之類的數(shù)據(jù)命令。
但是,執(zhí)行SELECT查詢時(shí)必須使用executeQuery方法。另外還有一個(gè)execute方法可以執(zhí)行任意的SQL語(yǔ)句。此方法通常只用于用戶提供的交互式查詢。
當(dāng)我們執(zhí)行查詢操作時(shí),通常最感興趣的是查詢結(jié)果。executeQuery方法返回一個(gè)ResultSet對(duì)象,可以通過(guò)它來(lái)每次移行地迭代遍歷所有查詢結(jié)果。 ResultSet rs=stmt.executeQuery("SELECT * FROM Books");
另外當(dāng)你看這點(diǎn)的時(shí)候,我可以告訴你SQL的數(shù)據(jù)類型和Java的數(shù)據(jù)類型并非完全一致,我不是很想完全列出所有的對(duì)照表,因?yàn)槿我獾臅厦婵隙ǘ加邢嚓P(guān)的介紹。只是下面的這幾種你最好還是記住,因?yàn)榉浅S锌赡芫驮谀愕某绦蛑袝?huì)出現(xiàn)錯(cuò)誤,左邊為SQL右邊為Java數(shù)據(jù)類型
Interger或INT int
NUMERIC(m,n),DECIMAL(m,n)或DEC(m,n) java.math.BigDecimal
FLOAT(n) double
REAL float
DOUBLE double
下面介紹一下java.sql.Statement的常用方法,我覺得這個(gè)挺重要的
int executeUpdate(String sql)
執(zhí)行字符串中指定的INSERT,UPDATE,DELETE等SQL語(yǔ)句。還可以執(zhí)行數(shù)據(jù)定義語(yǔ)言(DLL)的語(yǔ)句,如CREATE TABLE.返回受影響的記錄總數(shù),如果是沒有更新計(jì)數(shù)的語(yǔ)句,則返回-1.本著對(duì)大家和自己負(fù)責(zé)的任務(wù)我徹底用了這個(gè)函數(shù),在執(zhí)行INSERT,UPDATE,DELETE的操作的事后返回的的確是影響的函數(shù),一般你執(zhí)行一條INSERT語(yǔ)句的事后返回的肯定是1,此外當(dāng)你執(zhí)行CREATE TABLE操作的時(shí)候返回的是0.至于等于-1的情況我還沒有遇到,等遇到的時(shí)候第一時(shí)間更新此文章。
boolean execute(String sqlStatement)
執(zhí)行字符串中指定的SQL語(yǔ)句。如果該語(yǔ)句返回一個(gè)結(jié)果集則該方法返回true;反之,返回false。使用getResultSet或getUpdateCount方法可以得到語(yǔ)句的執(zhí)行結(jié)果。
int getUpdateCount()
返回受前一條更新語(yǔ)句影響的記錄總數(shù)。如果前一條語(yǔ)句未更新數(shù)據(jù)庫(kù),則返回-1.對(duì)于每一條執(zhí)行過(guò)的語(yǔ)句,該方法只能被調(diào)用一次。
ResultSet getResultSet()
返回前一條查詢語(yǔ)句的結(jié)果集。如果前一條語(yǔ)句未產(chǎn)生結(jié)果集,則返回null值。對(duì)于每一條執(zhí)行過(guò)的語(yǔ)句,該方法只能被調(diào)用一次。
接著簡(jiǎn)單的介紹一下PreparedStatement的用法吧,就不描述了僅給出代碼,大家肯定都會(huì)明白的
string sql = "select * from people p where p.id = ? and p.name = ?";
PreparedStatement pStmt=conn.prepareStatement(sql);
pStmt.setint(1,id);
pStmt.setstring(2,name);
resultset rs = pStmt.executequery();
==========================================================================================
pStmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
pStmt.setString(1,var1);
pStmt.setString(2,var2);
pStmt.setString(3,var3);
pStmt.setString(4,var4);
pStmt.executeUpdate();