標籤:finally etl connect man 安全 next mysq ring 通過
JDBCjDBC簡介
Java是通過JDBC技術實現對資料的訪問的,JDBC是java資料庫(Java database connectivity)技術的簡稱,它充當java應用程式與各種不同的資料庫之間的媒介,吧資料持久化,這就是一種持久化機制
JDBC工作原理
JDBC API
由Sun公司提供的,包括java應用程式的各種不同資料庫互動的介面,如connection(串連) Statement(執行sql命令) ResultSet(返回結果集) PreparedStatement介面。
JDBC Driver Manager
JDBC驅動管理程式,負責各種不同的jDBC驅動,把Java應用程式串連到jDBC驅動程式上,位於jdk的java.sql包下面
JDBC驅動
由各廠家提供的,負責串連不同的資料庫,mysql和oracle需要不同的資料庫。
JDBC Api介紹
DriverManager:裝載驅動程式,並且為建立資料庫連接提供支援
Connection:負責串連資料量並且傳輸資料任務
Statement:由connection產生,負責執行sql語句
resultSet:負責儲存Statement執行返回的結果集
preparedStatement:是statement的子介面,由connection產生,也是負責執行sql語句。他的安全性更高,高可讀性
jDBC訪問資料庫的步驟
- 載入JDBC驅動(可能會引發異常,所以用ClassNotFoundExeception來聲明try——catch)
a) Class.forName(“JDBc驅動類名稱”);
- 與資料庫建立串連
a) Connection conn=DriverManager.getConnection(“資料庫連接字串“,”資料庫使用者名稱”,”密碼”);
- 發生sql語句,並且返回結果
a) Statement st=conn.createStatement(); //建立執行sql語句的對象
b) ResultSet rs=statement.executeQuery(“sql語句”); //返回結果集
- 處理返回的結果
While(rs.next()){ //判斷是否有下一行的資料
//讀取
Int id=rs.getInt(“id”); 或者 int id=rs.getInt(0);
};
串連資料庫使用純java方式串連資料庫
需要引入jar包,mysql-connector-java-5.1.0-bin.jar
package cn.jbit.example02;
import java.sql.Connection;
import java.sql.DriverManager;
import org.apache.log4j.Logger;
public class example02 {
private static Logger logger=Logger.getLogger(example02.class.getName());
public static void main(String[] args) {
Connection conn=null;
//載入驅動
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO: handle exception
logger.error(e);
}
try {
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
logger.warn("建立串連成功啦");
System.out.println("建立串連成功啦");
} catch (Exception e) {
// TODO: handle exception
logger.error(e);
}finally {
try {
if(null!=conn) {
conn.close();
System.out.println("關閉串連成功!!");
}
} catch (Exception e) {
// TODO: handle exception
logger.error(e);
}
}
}
}
以上是串連資料庫的步驟
Statement介面和ResultSet介面
Connection介面的方法
|
方法名稱 |
作用 |
|
Void close() |
立即釋放 串連資源 |
|
Statement crementstatement() |
建立一個Statement的對象,來講sql語句發送到資料庫 |
|
PreparedStatement preparedStatement(String sql) |
建立一個preparedStatement對象將參賽化的sql語句發送到資料庫 |
|
Boolean isCloseed() |
查詢connection是否關閉 |
Statement介面的常用方法
|
方法名稱 |
作用 |
|
Result ExecuteQuery(String sql) |
執行sql查詢並且返回ResultSet的對象 |
|
Int executeUpdate(String sql) |
可以執行 insert,update,delete的操作,返回受影響行數 |
|
Boolean execute(String sql) |
可以執行任意的sql語句,若執行Result對象,則返回true,若執行更新計數或者不存在的結果,返回false |
ResultSet介面常用的方法
|
方法名稱 |
作用 |
|
Boolean next() |
判斷,將游標移到當前位置的下一行 |
|
Boolean previous() |
將游標移到上一行 |
|
Void close() |
關閉ResultSet對象 |
|
Int getInt(int CloumnIndex) |
以int 下標的形式擷取該列的值 |
|
Int getInt(int CloumnName) |
以int列名的形式擷取該列的值 |
|
float getFloate(int CloumnIndex) |
以float 下標的形式擷取該列的值 |
|
Float getfloat(int CloumnName) |
以float列名的形式擷取該列的值 |
|
String getString(int CloumnIndex) |
以String下標的形式擷取該列的值 |
|
String getString(int CloumnName) |
以String列名的形式擷取該列的值 |
|
Int getRow() |
得到游標當前所指行的行號 |
|
Boolean absolute(int row) |
將游標移動到指定的行 |
PreparedStatement介面
為了防止sql注入攻擊,原因是statement介面方法是要進行sql語句的拼接.不僅麻煩而且存在安全隱患,PreparedStatement解決了這個問題
使用:PreparedStatement介面
|
方法名稱 |
作用 |
|
Boolean execute() |
`可以執行任意的sql語句,若執行Result對象,則返回true,若執行更新計數或者不存在的結果,返回false |
|
ResultSet executeQuery() |
執行sql查詢,返回ResultSet的對象 |
|
Int executeUpdate() |
可以執行 insert,update,delete的操作,返回受影響行數 |
|
Void setInt(int index,int x) |
將指定的參數設定給java int值,也就是給上面的sql語句的格式(?)設定值,前:下標1開始,後:值 |
|
Void setobject(int index,int x) |
給定對象設定指定參數 |
步驟:
建立PreparedStatement對象
通過connection的preparedStatement(String sql) 方法建立PreparedStatement對象,sql語句可以一個或者多個參數,值用一個?預留位置表示。
String sql=Update dog set name=?,health=? Where id=?
PreparedStatement ps=conn.preparedStatement(String sql);
給每個預留位置的參數設定值
Ps.setInt(int index,int values); //第一個:是下標從1開始,第二個:是值
Ps.setString(int index,Stringvalues); //第一個:是下標從1開始,第二個:是值
執行sql語句
在設定各個參數值後,就可以調用preparedStatement的方法了(resultSet executeQuery), int execute() , boolean execute()
java使用JDBC