00 36Java高級之Statement數據庫操作接口

1 Statement接口簡介

當獲取了java.sql.Connection接口對象之後,那麼其核心目的一定不是只爲了連接,而是爲了進行數據庫的操作,而進行數據庫的開發操作應該使用標準SQL語句來完成,所以需要有一個SQL的執行器,而這個執行器就可以利用Statement接口完成。

java.sql.Statement是JDBC之中提供的數據庫的操作接口,利用其可以實現數據的更新與查詢的處理操作,該接口定義如下:

public interface Statement extends Wrapper, AutoCloseable

該接口是AutoCloseable子接口,所以可以得出結論:每一次進行數據庫操作完成之後都應該關閉Statement操作,即一條SQL的執行一定是一個Statement接口對象,但是如果要想獲取Statement接口對象,那麼必須依靠Connection接口提供的方法:
(1)獲取Statement接口對象:Statement createStatement() throws SQLException
|——此時拋出的SQLException是JDBC數據開發之中的最大異常;

當獲取了Statement接口對象之後,就可以使用SQL進行處理了,而這裏面需要兩個方法的支持:
(1)數據更新處理(INSERT、UPDATE、DELETE):int executeUpdate​(String sql) throws SQLException
(2)數據查詢處理(SELECT、統計查詢、複雜查詢):ResultSet executeQuery​(String sql) throws SQLException
這兩個數據庫的操作方法裏面都需要接收SQL的字符串,也就是說Statement接口可以直接使用SQL語句實現開發。

2 Statement實現數據更新

在SQL語句之中數據的更新操作一共分爲三種:增加(INSERT)、修改(UPDATE)、刪除(DELETE)。Statement接口的最大特點是可以直接執行一個標準的SQL語句。
範例:實現數據的增加處理
(1)增加SQL語句:INSERT INTO 表名稱(字段,字段,…) VALUES(值,值,…);

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = " INSERT INTO PERSON_INFO_TABLE(id,name,dateofbirth,idnumber,placeoforigin) "
				+ " VALUES(1000, 'LKS', DATE('1996-10-15'), '123456199610153546', '河南') ";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		int num = stat.executeUpdate(sql);
		System.out.println(num);
		conn.close();
	}
}

對於SQL語句而言,由於一般都比較長,所以一定要考慮換行編寫,一旦換行了,強烈建議在每個字符串的前後多追加一個空格(避免錯誤帶來的麻煩)。

範例:更新操作,在進行更新操作的時候一般都是做條件性的更新;
(1)更新的SQL語句:UPDATE 表名稱 SET 字段=值,… WHERE 更新條件;

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = "UPDATE PERSON_INFO_TABLE SET id=1001,name='hhy' WHERE id=1000";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		int num = stat.executeUpdate(sql);
		System.out.println(num);
		conn.close();
	}
}

範例:數據刪除
(1)刪除語法:DELETE FROM 表名稱 WHERE 刪除條件(s);

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = "DELETE FROM PERSON_INFO_TABLE WHERE id=1001";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		int num = stat.executeUpdate(sql);
		System.out.println(num);
		conn.close();
	}
}

數據修改裏面只需要考慮到不同的SQL語句即可,這也是Statement接口的最大特點(直接執行SQL語句) 。

3 Statement實現數據查詢

數據更新主要是接收其影響的數據行數,但是數據查詢就比較麻煩了,因爲查詢一定要將結果返回給程序,由程序來進行結果的處理,所以在Java裏面通過ResultSet接口來描述查詢結果。

範例:實現數據的查詢處理

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = "SELECT ID,NAME,DATEOFBIRTH FROM PERSON_INFO_TABLE";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()) {
			int id = rs.getInt("id");
			String name = rs.getString("name");
			Date date = rs.getDate("dateofbirth");
			System.out.println(id + "  " + name + "  " + date.toString());
		}
		conn.close();
	}
}

需要注意的是,ResultSet對象是保存在內存之中的,如果說你查詢數據的返回結果過大,那麼程序也將出現問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章