精簡版JDBC工具(提供0積分下載)

前言

學java的同學一定不會不知道JDBC這個東西,它最大的缺點就是需要手動輸入大量的代碼,在不使用任何其他工具進行開發的時候,經常會輸入大量重複的代碼。
爲了解決這個問題,筆者仿照Android的SQLiteDatabase類寫了一個小工具包nonoas_SQL_Utils,對於像我這樣道行尚淺的猿來說,用起來已經是方便很多。

連接到數據庫

連接還是最常規的套路,廢話不多說,上代碼 ↓↓

用戶自定義的數據庫連接類:DBOpener

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

import nonoas.sql.DateBaseOpener;

/**
 * 連接數據庫的類
 * @author Nonoas
 *
 */
public class DBOpener implements DateBaseOpener{
	
	private static String url="jdbc:mysql://localhost:3306/學生成績管理系統?serverTimezone=UTC";
	private static String username="root";//數據庫用戶名
	private static String password="Hss1356955215";//數據庫密碼
	
	private Connection connection;
	
	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public DBOpener() {
		try {
			connection=DriverManager.getConnection(url,username,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * @return 獲取Connection對象,連接到學生成績管理系統數據庫
	 */
	@Override
	public Connection getConnection() {
		return this.connection;
	}
}

將數據庫連接的配置封裝成一個類,並定義一個可以返回一個Connection對象的方法。nonoas_SQL_Utils將這樣的類抽象爲一個接口DateBaseOpener
代碼如下↓↓

package nonoas.sql;
/**
 * 用於打開一個數據庫
 * @author Nonoas
 */

import java.sql.Connection;

public interface DateBaseOpener {
	/**
	 * 獲取數據庫的Connection對象
	 * @return 連接到數據庫的Connection對象
	 */
	public Connection getConnection();
}

該接口的實現類由用戶自定義,實現其中的方法:分別用於創建一個Connection對象和獲取創建的Connection對象。
該接口的實現類用於創建SQLOperations對象,以進行數據庫操作,下面將貼出SQLOperations類的部分代碼。

對數據庫的操作

SQLOperations中的成員變量及方法

private Connection connection;// 數據庫連接對象

這個不用解釋了吧

構造方法

/**
	 * 構造器,賦值給connection
	 * @param opener DateBaseOpener派生類對象
	 */
public SQLOperations(DateBaseOpener opener) {
		this.connection = opener.getConnection();
	}

創建對象示例

//DBOpener爲用戶自定義的類,實現了接口DateBaseOpener
SQLOperations sqlOperations=new SQLOperations(new DBOpener());

查詢操作

/**
	 * 查詢表中數據
	 * @param table         指定表名
	 * @param columns       指定查詢的列,爲空則返回所有列
	 * @param selection     指定where子句,可以使用佔位符“?”
	 * @param selectionArgs 佔位符的值,不包含佔位符則爲null
	 * @param groupBy      	分組方式,可以爲null
	 * @param orderBy       排序方式,可以爲null
	 * @return ResultSet 返回結果集
	 */
	public ResultSet query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy,String orderBy) {}
	
	//上面那條方法的重構,略去了order語句和group語句
	public ResultSet query(String table, String[] columns, String selection, String[] selectionArgs) {}

例子:

//查詢表grade中,學號爲0001的學生選的課程
ResultSet rs=sqlOperations.query("grade", new String[]{"course"}, "where id=?", new String[]{"0001"});

刪除操作


	/**
	 * 刪除表中數據
	 * @param table 表名
	 * @param whereClause where子句,可以使用佔位符“?”
	 * @param whereArgs 佔位符的值,不包含佔位符則爲null
	 * @return 刪除的條目的數目
	 */
	public long delete(String table, String whereClause, String[] whereArgs) {}

例子

//刪除表grade中,學號爲0001的學生信息
sqlOperations.delete("grade","where id=?",new String[]{"0001"});

修改操作

/**
	 * 更新表中數據
	 * @param table 表名
	 * @param values 具體的字段值,鍵值對集合
	 * @param whereClause 指定where子句,可以使用佔位符“?”
	 * @param whereArgs  佔位符的值,不包含佔位符則爲null
	 * @return 更新的條目的數目
	 */
public long update(String table, ContentValues values, String whereClause, String[] whereArgs) {}

插入操作

/**
	 * 向表中插入數據
	 * @param table   表名
	 * @param nullColimnHack 指定當values爲空時,將那個字段設置爲空
	 * @param values  具體的字段值,鍵值對集合
	 * @return 插入的條目數量
	 */
public long insert(String table, String nullColimnHack, ContentValues values) {}

兩者用法相似這裏就只舉一個例子了,主要解釋values這個參數↓↓
例子

//向表grade中插入一條內容,學號爲“0008”,科目爲“線性代數”,分數爲95
ContentValues cValues=new ContentValues();
cValues.put("id","0008");
cValues.put("course", "線性代數");
cValues.put("score", 95);
sqlOperations.insert("grade", null, cValues);

後面這兩個操作引入了ContentValuses這個類,其對象本質爲一個HashMap,可以參考Android的android.content.ContentValues類源碼及其使用方法,文末也將貼出nonoas_SQL_Utils.ContentValuses 的代碼。

執行簡單的SQL語句,這裏也提供了通用的SQL語句執行方法
通用的SQL語句執行方法

/**
	 * 執行帶有佔位符查詢語句
	 * @param sql 帶有佔位符的查詢語句
	 * @param strs 通配符的值
	 * @return boolean表示是否執行成功
	 */
	public boolean execSQL(String sql,String[] strs) {}
	/**
	 * 執行通用SQL語句
	 * @param sql 完整得SQL語句
	 * @return boolean表示是否執行成功
	 */
	public boolean execSQL(String sql) {}

例子

//這兩條語句效果一樣
//查詢學號爲0001的學生的線性代數成績
sqlOperations.execSQL("select * fome grade where id=0001 and course='線性代數' ");
sqlOperations.execSQL("select * fome grade where id=? and course=?",new String[] {"0001","線性代數"});

最後別忘了這個
關閉連接

public void close() {
		try {
			if(connection!=null)
				connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

例子

sqlOperations.close();

附錄

nonoas_SQL_Utils.ContentValuses雖然是仿照android.content.ContentValues,但功能還遠不及其強大,畢竟,我只是個菜雞(哈哈),這裏直接貼出其源碼↓↓

package nonoas_SQL_Utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 該類本質上爲一個HashMap,但是限制其鍵只能爲String類型,值只能爲基本數據類型
 * 參照原型爲 android.content.ContentValues
 * @author Nonoas
 */
public final class  ContentValues {
	
	private HashMap<String, Object> mValues;
	/**
	 * 無參構造器,默認長度爲8
	 */
	public ContentValues() {
		mValues=new HashMap<String, Object>(8);
	}
	/**
	 * 指定長度的構造器
	 * @param size mValues長度
	 */
	public ContentValues(int size) {
		mValues=new HashMap<String, Object>(size);
	}
	/**
	 * 存入鍵值對
	 * @param key String類型
	 * @param values Integer類型
	 */
	public void put(String key,Integer values) {
		mValues.put(key,values);
	}
	/**
	 * 存入鍵值對
	 * @param key String類型
	 * @param values Boolean類型
	 */
	public void put(String key,Boolean values) {
		mValues.put(key,values);
	}
	/**
	 * 存入鍵值對
	 * @param key String類型
	 * @param values Float類型
	 */
	public void put(String key,Float values) {
		mValues.put(key,values);
	}
	/**
	 * 存入鍵值對
	 * @param key String類型
	 * @param values Double類型
	 */
	public void put(String key,Double values) {
		mValues.put(key,values);
	}
	/**
	 * 存入鍵值對
	 * @param key String類型
	 * @param values String類型
	 */
	public void put(String key,String values) {
		mValues.put(key,values);
	}
	/**
	 * 存入鍵值對
	 * @param key String類型
	 * @param values Short類型
	 */
	public void put(String key,Short values) {
		mValues.put(key,values);
	}
	/**
	 * 獲取鍵對應的值
	 * @param key 鍵
	 * @return 值
	 */
	public Object get(String key) {
		return mValues.get(key);
	}
	/**
	 * 返回長度
	 * @return mValues的長度
	 */
	public long size() {
		return mValues.size();
	}
	
	/**
	 * 獲取所有的鍵名
	 * @return 鍵名集合
	 */
	public List<String> getkeys() {
		List<String> list=new ArrayList<String>();
		for(String key:mValues.keySet()) {
			list.add(key);
		}
		return list;
	}
	/**
	 * 獲取所有的值
	 * @return 值得集合
	 */
	public List<Object> getValues(){
		List<Object> list=new ArrayList<Object>();
		for(Object key:mValues.values()) {
			list.add(key);
		}
		return list;
	}
}

工具包獲取方法

筆者已將其封裝成jar包,並生成了CHM格式的幫助文檔,一同打包了。jar導入到工程就能使用,這裏給出兩者獲取方式:
方法一:下載鏈接(0積分):
https://download.csdn.net/download/weixin_44155115/12063005


方法二:關注下方公衆號(回覆"JDBC工具包"直接獲取):
在這裏插入圖片描述

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