1、用mysql8的驅動,下載地址: https://www.cr173.com/soft/434713.html
使用這個 :mysql-connector-java-8.0.11.jar
2、驅動名字爲:
com.mysql.cj.jdbc.Driver
3、數據庫鏈接字符串爲:
private final String databaseName = "library?characterEncoding=utf8&useSSL=false&serverTimezone=GMT";
4、具體實例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.com.util.Page;
/**
* 數據庫操作工具類 -普通jdbc版本
*
* @author
* @ClassName: DB
* @Version 2.1
* @ModifiedBy
* @Copyright
* @date 2012-8-7 上午11:51:47
* @description
*/
public class DB {
/**
* 驅動類位置 軟件位置
* mysql: com.mysql.jdbc.Driver
* oracle: oracle.jdbc.driver.OracleDriver
* 連接池:org.logicalcobwebs.proxool.ProxoolDriver
*/
// private static final String driver = "com.mysql.jdbc.Driver";
private static final String driver = "com.mysql.cj.jdbc.Driver";
/**
* 數據庫連接
* mysql連接: jdbc:mysql://localhost:3308/
* oracle連接: jdbc:oracle:thin:@localhost:1521:
* 連接池:proxool.datasource1
*/
private final String url = "jdbc:mysql://localhost:3310/";
/** 數據庫名稱 */
// private final String databaseName = "library?characterEncoding=utf8";
private final String databaseName = "library?characterEncoding=utf8&useSSL=false&serverTimezone=GMT";
/** 用戶名 */
private final String userName = "root";
/** 用戶密碼 */
private final String password = "123456";
/** 數據庫連接對象 */
private Connection con;
// /** 執行sql語句的對象 */
// private Statement st;
/** 結果集,存放數據的對象 */
private ResultSet rs;
/**預編譯的執行sql語句對象*/
private PreparedStatement ps;
// 第一步 加載驅動,靜態模塊只運行一次。
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 創建一個新的鏈接
*
* @author Cris
* @title: createConnection
* @date 2012-3-31 下午10:10:33
* @return Connection
*/
private void createConnection() {
try {
con = (Connection) DriverManager.getConnection(url + databaseName, userName, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 關閉相關內容
*
* @author
* @title: close
* @date 2012-8-7 下午12:04:48 void
*/
private void close() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 根據sql語句獲得一個List<List<String>>集合
*
* @author
* @title: queryList
* @date 2012-8-10 上午10:44:32
* @param sql
* @param newConnection 是否新創建一個鏈接對象
* @param params 參數集合
* @return List<List<String>>
*/
private List<List<String>> queryList(String sql, boolean newConnection, Object params) {
List<List<String>> tableList = new ArrayList<List<String>>();
if(sql == null) {
return tableList;
}
if(newConnection == true) {
createConnection();
}
try {
ps = con.prepareStatement(sql);
if(params != null){
setParams(params);
}
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
while (rs.next()) {
List<String> list = new ArrayList<String>();
for (int i = 1; i <= colCount; i++) {
list.add(rs.getString(i));
}
tableList.add(list);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return tableList;
}
/**
* 根據sql語句獲得一個List<Map<String, String>>集合
* @author
* @title: queryMap
* @date 2012-8-10 上午10:45:36
* @param sql
* @param newConnection 是否新創建一個鏈接和Statement對象
* @param params 參數集合
* @return List<Map<String,String>>
*/
private List<Map<String, String>> queryMap(String sql, boolean newConnection, Object params) {
List<Map<String, String>> tableList = new ArrayList<Map<String, String>>();
if(sql == null) {
return tableList;
}
if(newConnection == true) {
createConnection();
}
try {
ps = con.prepareStatement(sql);
if(params != null){
setParams(params);
}
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
String[] names = new String[colCount];
for (int i = 1; i <= colCount; i++) {
names[i - 1] = rsmd.getColumnName(i);
}
while (rs.next()) {
Map<String, String> rowMap = new HashMap<String, String>();
for (int i = 1; i <= colCount; i++) {
rowMap.put(names[i-1], rs.getString(i));
}
tableList.add(rowMap);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return tableList;
}
/**
* 根據分頁對象,獲取最終的sql語句
*
* @author
* @title: getSql
* @date 2012-8-10 上午10:26:53
* @param sql 普通的sql語句
* @param params 參數集合
* @param page 分頁對象
* @return String 最終的分頁sql語句
*/
private String getPageSql(String sql, Object params, Page page) {
String countSql = new StringBuilder("select count(*) from (").append(sql).append(") ShxtTable"). toString();
try {
ps = con.prepareStatement(countSql);
if(params != null){
setParams(params);
}
rs = ps.executeQuery();
if (!rs.next()) {
return null;
}
page.rows = rs.getInt(1);
} catch (SQLException e1) {
e1.printStackTrace();
return null;
}finally {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (page.rows == 0) {
return null;
}
page.pages = page.rows / page.size
+ ((page.rows % page.size > 0 ? 1 : 0));
if (page.index > page.pages) {
page.index = page.pages;
} else if (page.index < 1) {
page.index = 1;
}
int first = (page.index - 1) * page.size;
//分頁例句Oracle:select * from (select rownum as r,t.* from(select tableName.* from tableName order by tableColum DESC) t where rownum<=endPos) where r>startPos
//select tableName.* from tableName order by tableColum DESC limit startPos
// 最終的查詢sql語句
StringBuilder finalSql = new StringBuilder(sql)
.append(" limit ").append(first).append(",").append(page.size);
return finalSql.toString();
}
/**
* 設置用戶的參數
*
* @author
* @title: setParams
* @date 2014-4-3 下午03:36:46
* @param params
* @throws SQLException void
*/
@SuppressWarnings("unchecked")
private void setParams(Object params) throws SQLException {
if(params instanceof String[]){
String[] paramsArrays = (String[])params;
for (int i = 0; i < paramsArrays.length; i++) {
ps.setString(i + 1, paramsArrays[i]);
}
}else {
List<String> paramsList = (List<String>)params;
for (int i = 0; i < paramsList.size(); i++) {
ps.setString(i + 1, paramsList.get(i));
}
}
}
/****************************************用戶調用*********************************************************/
/**
* 根據sql語句查詢數據庫
*
* @author Cris
* @title: queryList
* @date 2012-3-31 下午10:25:28
* @param sql
* @return List<List<String>>
*/
public List<List<String>> queryList(String sql) {
return queryList(sql, true, null);
}
/**
* 預編譯模式,根據sql語句查詢數據庫
* 條件值用?代替。
*
* @author
* @title: queryList
* @date 2014-4-3 下午03:22:23
* @param sql 帶?的sql語句
* @param params 參數數組
* @return List<List<String>>
*/
public List<List<String>> queryList(String sql, String[] params) {
return queryList(sql, true, params);
}
/**
* 預編譯模式,根據sql語句查詢數據庫
* 條件值用?代替。
*
* @author
* @title: queryList
* @date 2014-4-3 下午03:22:51
* @param sql 帶?的sql語句
* @param params 參數集合
* @return List<List<String>>
*/
public List<List<String>> queryList(String sql, List<String> params) {
return queryList(sql, true, params);
}
/**
* 根據sql語句查詢數據庫
*
* @author Cris
* @title: queryList
* @date 2012-3-31 下午10:25:28
* @param sql
* @return List<List<Object>>
*/
public List<Map<String, String>> queryMap(String sql) {
return queryMap(sql, true, null);
}
/**
* 預編譯模式,根據sql語句查詢數據庫
* 條件值用?代替。
*
* @author
* @title: queryMap
* @date 2014-4-3 下午03:25:39
* @param sql 帶?的sql語句
* @param params 參數數組
* @return List<Map<String,String>>
*/
public List<Map<String, String>> queryMap(String sql, String[] params) {
return queryMap(sql, true, params);
}
/**
* 預編譯模式,根據sql語句查詢數據庫
* 條件值用?代替。
*
* @author
* @title: queryMap
* @date 2014-4-3 下午03:26:20
* @param sql 帶?的sql語句
* @param params 參數數組
* @return List<Map<String,String>>
*/
public List<Map<String, String>> queryMap(String sql, List<String> params) {
return queryMap(sql, true, params);
}
/**
* 根據sql語句查詢數據庫--分頁查詢
*
* @author
* @title: queryList
* @date 2012-8-7 下午12:42:00
* @param sql
* @param page 分頁對象
* @return List<List<String>>
*/
public List<List<String>> queryList(String sql, Page page) {
createConnection();
String finalSql = getPageSql(sql,null, page);
List<List<String>> tableList = queryList(finalSql, false, null);
return tableList;
}
/**
* 預編譯模式,根據sql語句查詢數據庫--分頁查詢
* 條件值用?代替。
*
* @author
* @title: queryList
* @date 2014-4-3 下午03:27:07
* @param sql 帶?的sql語句
* @param params 參數數組
* @param page 分頁對象
* @return List<List<String>>
*/
public List<List<String>> queryList(String sql,String[] params, Page page) {
createConnection();
String finalSql = getPageSql(sql,params, page);
List<List<String>> tableList = queryList(finalSql, false, params);
return tableList;
}
/**
* 預編譯模式,根據sql語句查詢數據庫--分頁查詢
* 條件值用?代替。
*
* @author
* @title: queryList
* @date 2014-4-3 下午03:28:09
* @param sql 帶?的sql語句
* @param params 參數集合
* @param page 分頁對象
* @return List<List<String>>
*/
public List<List<String>> queryList(String sql,List<String> params, Page page) {
createConnection();
String finalSql = getPageSql(sql,params, page);
List<List<String>> tableList = queryList(finalSql, false, params);
return tableList;
}
/**
* 根據sql語句查詢數據庫--分頁查詢
*
* @author
* @title: queryMap
* @date 2012-8-10 上午10:13:09
* @param sql
* @param page 分頁對象
* @return List<Map<String,String>>
*/
public List<Map<String, String>> queryMap(String sql, Page page) {
createConnection();
String finalSql = getPageSql(sql,null, page);
List<Map<String, String>> tableList = queryMap(finalSql, false, null);
return tableList;
}
/**
* 預編譯模式,根據sql語句查詢數據庫--分頁查詢
* 條件值用?代替。
*
* @author
* @title: queryMap
* @date 2014-4-3 下午02:12:31
* @param sql 帶?的sql語句
* @param params 參數數組
* @param page 分頁對象
* @return List<Map<String,String>>
*/
public List<Map<String, String>> queryMap(String sql,String[] params, Page page) {
createConnection();
String finalSql = getPageSql(sql,params, page);
List<Map<String, String>> tableList = queryMap(finalSql, false, params);
return tableList;
}
/**
* 預編譯模式,根據sql語句查詢數據庫--分頁查詢
* 條件值用?代替。
*
* @author
* @title: queryMap
* @date 2014-4-3 下午03:30:08
* @param sql 帶?的sql語句
* @param params 參數數組
* @param page 分頁對象
* @return List<Map<String,String>>
*/
public List<Map<String, String>> queryMap(String sql,List<String> params, Page page) {
createConnection();
String finalSql = getPageSql(sql,params, page);
List<Map<String, String>> tableList = queryMap(finalSql, false, params);
return tableList;
}
/**
* DML語句,數據更新
*
* @author
* @title: update
* @date 2014-3-15 上午10:16:19
* @param sql 有更新操作的sql語句
*/
public void update(String sql) {
createConnection();
try {
ps = con.prepareStatement(sql);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
}
/**
* 預編譯模式,DML語句,數據更新
* 數值用?代替。
*
* @author
* @title: update
* @date 2014-4-2 下午02:02:33
* @param sql 有更新操作的sql語句,其中的值用?代替
* @param params 需要設置的參數
*/
public void update(String sql,String[] params){
createConnection();
try {
ps = con.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ps.setString(i + 1, params[i]);
}
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
}
/**
* DML語句,數據更新-批量操作
*
* @author
* @title: update
* @date 2014-4-2 下午02:03:37
* @param sql 有更新操作的sql語句,其中的值用?代替
* @param paramList 需要設置的參數集合
*/
public void update(String sql,List<String[]> paramList){
createConnection();
try {
ps = con.prepareStatement(sql);
ps.clearBatch();
for(String[] params : paramList){
for (int i = 0; i < params.length; i++) {
ps.setString(i + 1, params[i]);
}
ps.addBatch();
}
ps.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
}
}