JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。
JDBC訪問數據庫的步驟:
1.加載數據庫驅動
2.獲得數據庫連接
3.創建SQL語句
4.執行查詢
5.遍歷結果集
6.關閉數據庫連接
下面看一個小程序:
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.加載數據庫驅動

try
{
Class.forName("com.mysql.jdbc.Driver");
//DriverManager 驅動程序管理器 在數據庫和相應驅動程序之間建立連接
//2.獲得數據庫連接
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/jdbc_db","root","1234");
//3.創建語句
String sql="select * from UserTbl";
//返回一個執行SQL的語句
Statement stmt = null;
stmt = conn.createStatement();
//返回查詢的
//4.執行語句
ResultSet rs = null;
rs = stmt.executeQuery(sql);
//5.遍歷結果集
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.關閉數據庫連接
conn.close();

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

}


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

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加載驅動
Class.forName(driver);
//DriverManager獲得連接
conn = DriverManager.getConnection(url,user,password);
return conn;

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


在和數據庫進行連接時,我們只需要調用這個類就可以了
在第一個程序中我們提到了一個PreparedStatement類,現在我們看一下關于這個類的使用情況

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為預編譯靜態SQL語句,就是在sql語句中留下一個缺口,由調用這個函數的的成員來補全。