怎麼建立JDBC語句物件來執行SQL語句(詳解)
JDBC執行SQL語句:
一旦獲得了連結,我們可以與資料庫進行互動。JDBC Statement和PreparedStatement 介面定義了使 您能傳送SQL命令並從資料庫 進行接收資料的方法和屬性。
1.Statement:建立語句物件
在使用Statement物件執行SQL語句之前,需要使用Connection物件的createStatement()方法來建立
在建立Statement物件後,可以使用Connection物件的createStatement()方法來執行 一個SQL語句,其中有三個執行方法
其1.boolean execute(String SQL):
如果可以檢索到ResultSet物件,則返回一個布林值true,否則,返回false;使用此方法執行SQL DDL語句或需要使用真正的動態SQL。
其2. int executeUpate(String SQL):返回受SQL語句 影響的行數。使用此方法執行預期會影響多個行的SQL語句,例如 insert、update、或delete語句
其3.Result
關閉Statement物件(如果先關閉Connection物件,她也會關閉Statement物件。但是,應始終顯示關閉Statement物件,以保證正確清理)。
2.SQL 注入
就是通過把SQL命令插入到web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺負伺服器執行惡意的SQL語句。具體來說,它是利用現有應用程式,將(惡意的)SQL命令注入到後臺資料庫引擎執行的能力,它可以通過在web表單輸入(惡意的)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計師意圖去執行SQL語句。比如先前的很多影視網站洩露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊。
3.PreparedStatement
該PreparedStatement的介面擴充套件了Statement介面,它提供了一個通用的Statement物件有兩個優點附加功能。此語句可以動態的提供引數。
關閉PreparedStatement物件。
String string="insert student values(?,?,?)"; ps=connection.prepareStatement(string); ps.setInt(1,stu.getId()); ps.setString(2, stu.getName()); ps.setInt(3, stu.getSid());
JDBC 中的所有引數都由?表示,這被稱為引數標記。在執行SQL語句之前,必須為每個引數提供值。
所述的setXXX()方法將值繫結到所述引數,其中XXX代表要繫結到輸入引數的值的java資料型別。如果忘記提供值,將收到一個SQLException。
每個引數標記的由其順序位置引用,。第一標記表示位置1,下一個位置2等等。該方法與java陣列索引不同,java是從0開始。
4.ResultSet物件:
Result語句是從資料庫中選擇行並在結果集中檢視行的標準方法。該java.sql.ResultSet中的介面表示結果集資料庫查詢。
ResultSet物件維護指向結果集中當前行的遊標。術語“結果集”是指包含在ResultSet物件中的行和列的資料。
如果沒有制定任何ResultSet型別,將自動獲得一個typeforwardonly。
ResultSet.typeforwardonly 游標只能在結果集中向前移動。
ResultSet.typescrollinsensitive 游標可以向前移動和向後移動,結果集對建立結果集後發生的資料庫的其他更改不敏感。
ResultSet.typescrollsensitive 游標可以向前和向後移動,結果集對建立結果集之後發生的其他資料庫的其他更改敏感。
5.JDBC(java database Connection)
(1)常用API:
1.DriverManager類
public static Connection getConnection(String url,String user,String password)
//獲取資料庫連線物件
2.Connection(資料庫連線物件)
//用增來舉例
String string=“insert student values(?,?,?)”;
PreparedStatement ps=Connection.PrepareStatement(string);
//將SQL語句通過Connection物件的PrepareStatement方法傳給資料庫
3.PreparedStatement(表示預編譯的SQL語句的物件,使用此物件操作資料庫)
setInt(int ParameterIndex,int x)//將指定引數設定為給定java的int值
//注意:parameterIndex第一個引數是1
setFloat(int parameterIndex,float x)
setDouble(int parameeterIndex,double x)
int executeUpdate()//執行增、刪、改操作。返回:影響表中記錄的行數
ResultSet executeQuery()//執行查詢操作 返回:ResultSet結果集
void close()//關閉操作物件
4.ResultSet (表示 結果集的資料表)
boolean next() //將游標從當前位置向下移一行。ResultSet游標最初位於第一行之前;
//返回:如果新的當前行有效,則返回true
通過結果集的列標籤獲取值
int getInt(String columnLable)
String getString(String columnLable)
double getDouble(String columnLable)
Class.forName("org.gjt.mm.mysql.driver");//載入驅動程式
connection =DriverManager,getConnection("url","user","password");
5.JDBC操作資料庫的具體步驟:以在student表中增加一列為例
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.mysql.jdbc.Connection;
public class stuUtil {//建立增刪改查
private static Connection connection=null;
//該物件表示與資料庫之間的物理連線
private static PreparedStatement ps=null;//建立一個物件
//建立一個方法專門來獲取連結
public static Connection getConnection() {
//先載入驅動
try {
Class.forName("org.gjt.mm.mysql.Driver");
//再獲取連結
connection=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "123456");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();//列印報錯資訊
}
return connection;
}
//增
public static void Zeng(stu stu) {
getConnection();//呼叫方法獲取連結
try {
String string="insert student values(?,?,?)";
ps=connection.prepareStatement(string);
//
ps.setInt(1,stu.getId());
ps.setString(2, stu.getName());
ps.setInt(3, stu.getSid());
int executeUpdate = ps.executeUpdate();
System.out.println(executeUpdate);
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
}
//刪
public static void shan(int tt) {
getConnection();
try {
String string="delete from student where id="+tt;
ps=connection.prepareStatement(string);
int executeUpdate = ps.executeUpdate();
System.out.println(executeUpdate);
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
}
//改
public static void Update(int a,int b) {//將a改成b
getConnection();
try {
String string="update student set id="+b+" where sid="+a;
ps= connection.prepareStatement(string);
int executeUpdate = ps.executeUpdate();
System.out.println(executeUpdate);
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
}
//查
public static ArrayList<stu> read(){
getConnection();
ArrayList<stu> arrayList = new ArrayList<stu>();
try {
String string="select * from student";
ps=connection.prepareStatement(string);
//查詢
ResultSet rset = ps.executeQuery();
while(rset.next()) {
stu ss=new stu(rset.getInt("id"),rset.getString("name"),rset.getInt("sid"));
arrayList.add(ss);
}
} catch (Exception e) {
// TODO: handle exception
}finally {
close();
}
return arrayList;
}
//關閉
public static void close() {
if(connection!=null) {
try {
connection.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
}