JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類和接口組成。
JDBC訪問(wèn)數(shù)據(jù)庫(kù)的步驟:
1.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
2.獲得數(shù)據(jù)庫(kù)連接
3.創(chuàng)建SQL語(yǔ)句
4.執(zhí)行查詢
5.遍歷結(jié)果集
6.關(guān)閉數(shù)據(jù)庫(kù)連接
下面看一個(gè)小程序:
package com.jspring.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Demo1
{
public static void main(String args[])

{
query();
}
public static void query()

{
Connection conn=null;
//1.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)

try
{
Class.forName("com.mysql.jdbc.Driver");
//DriverManager 驅(qū)動(dòng)程序管理器 在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接
//2.獲得數(shù)據(jù)庫(kù)連接
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/jdbc_db","root","1234");
//3.創(chuàng)建語(yǔ)句
String sql="select * from UserTbl";
//返回一個(gè)執(zhí)行SQL的語(yǔ)句
Statement stmt = null;
stmt = conn.createStatement();
//返回查詢的
//4.執(zhí)行語(yǔ)句
ResultSet rs = null;
rs = stmt.executeQuery(sql);
//5.遍歷結(jié)果集
while(rs.next())

{
int id=rs.getInt(1);
String username=rs.getString(2);
String password=rs.getString(3);
int age=rs.getInt(4);
System.out.println(id+":"+username+":"+password+":"+age);
}

} catch (Exception e)
{
e.printStackTrace();

}finally
{

if(conn!=null)
{

try
{//5.關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close();

}catch(SQLException e)
{
conn=null;
e.printStackTrace();
}
}
}
}

}


1.此程序首先要在這個(gè)程序所在的工程中插入連接數(shù)據(jù)庫(kù)的jar包(然后右擊選擇build path-----add to build path),然后才能執(zhí)行程序否則會(huì)出現(xiàn)以下錯(cuò)誤提示:
這個(gè)程序通過(guò)執(zhí)行
Class.forName("com.mysql.jdbc.Driver");
這個(gè)語(yǔ)句實(shí)現(xiàn)加載驅(qū)動(dòng),因?yàn)槲矣玫氖荕YSQL的數(shù)據(jù)庫(kù),所以加載的mysql的驅(qū)動(dòng),如果你用的是其他數(shù)據(jù)庫(kù),那就要加載其他數(shù)據(jù)庫(kù)的jar包。
2.和數(shù)據(jù)庫(kù)建立連接通過(guò)
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/jdbc_db","root","1234");
語(yǔ)句,getConnection函數(shù)中三個(gè)參數(shù)分別是url,user,password
3.創(chuàng)建語(yǔ)句,在這個(gè)程序中只建立了一個(gè)查詢語(yǔ)句,我們可以根據(jù)自己的業(yè)務(wù)需求建立其他的語(yǔ)句,例如插入,更新等語(yǔ)句
4.Statement是靜態(tài)的SQL語(yǔ)句,用來(lái)盛放SQL語(yǔ)句,他有一個(gè)子類為PreparedStatement為預(yù)編譯靜態(tài)語(yǔ)句
5.ResultSet 是用來(lái)盛放查詢結(jié)果的一個(gè)集合
程序運(yùn)行結(jié)果:
如果usertbl表中有數(shù)據(jù)就會(huì)打印在控制臺(tái)上如
如果usertbl表中沒(méi)有數(shù)據(jù)那么控制臺(tái)上就沒(méi)有任何數(shù)據(jù)
如果數(shù)據(jù)庫(kù)中沒(méi)有這個(gè)表則會(huì)出現(xiàn)
在使用JDBC時(shí)一定要加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)!
一般情況下,我們會(huì)采用下面這種方法和數(shù)據(jù)庫(kù)進(jìn)行連接
將數(shù)據(jù)庫(kù)的驅(qū)動(dòng)連接和url,user,password都寫(xiě)到配置文件中,通過(guò)從配置文件中讀數(shù)據(jù)來(lái)建立連接,看下面程序

public class ConnectionUtil
{

public Connection openConnection()
{
String driver = "";
String url = "";
String user = "";
String password = "";
Properties prop = new Properties();
Connection conn = null;

try
{
//加載屬性文件
prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
//Class.forName加載驅(qū)動(dòng)
Class.forName(driver);
//DriverManager獲得連接
conn = DriverManager.getConnection(url,user,password);
return conn;

} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}


在和數(shù)據(jù)庫(kù)進(jìn)行連接時(shí),我們只需要調(diào)用這個(gè)類就可以了
在第一個(gè)程序中我們提到了一個(gè)PreparedStatement類,現(xiàn)在我們看一下關(guān)于這個(gè)類的使用情況

public class Main
{


public static void main(String[] args)
{
Customer c = new Customer();
c.setName("hans");
c.setEmail("583480612@qq.com");
TestPrepareStatement.add(c);
}

public static void add(Customer c)
{
Connection conn = new ConnectionUtil().openConnection();
String sql = "insert into CustomerTbl(name,email) values(?,?)";

try
{
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, c.getName());
pstmt.setString(2, c.getEmail());
pstmt.executeUpdate();

} catch (SQLException e)
{
e.printStackTrace();
}
}

}


PreparedStatement為預(yù)編譯靜態(tài)SQL語(yǔ)句,就是在sql語(yǔ)句中留下一個(gè)缺口,由調(diào)用這個(gè)函數(shù)的的成員來(lái)補(bǔ)全。