Java JDBC基本操作(增,刪,改,查)總結
</pre><pre>
package trade.axht.java.dao; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.dbutils.QueryRunner; import trade.axht.java.conn.JDBCUtils; import java.util.*; import java.lang.reflect.*; import java.sql.*; /** * *基類帶泛型,派生類可以帶泛型引數繼承該類,通過反射對Beans物件操作 * @author Administrator * * @param <T> */ public class DAO<T> {//帶泛型的基類,派生類可以帶具體beans泛型引數繼承該類 public Class<T> clazz; @SuppressWarnings({ "unchecked", "rawtypes" }) public DAO(){ System.out.println(getClass()); //列印class trade.axht.java.dao.userImpl.****DaoImpl Type type=getClass().getGenericSuperclass(); System.out.println(type); /**獲取繼承【該類(DAO<T>)】帶具體泛型的基類 或者獲取此類的基類(Object),簡單的講就是誰繼承Dao<T>這個類後,在載入的時候,就會來載入這個建構函式。載入class的物件為Dao<T>的派生類。派生類的基類就是Dao<T>,並能獲取基類帶有的具體泛型。 JDK文件描述是這樣的:返回表示此Class所表示的實體(類、介面、基本型別或 void)的直接超類的Type。如果超類是引數化型別,則返回的物件必須準確反映源///程式碼中所使用的實際型別引數。 所以最終列印為**/ ParameterizedType parameterizedType=(ParameterizedType)type;//ParameterizedType 表示引數化型別,如 Collection<String>。 System.out.println(parameterizedType); Type[] ars=parameterizedType.getActualTypeArguments();/**返回表示此型別實際型別引數的物件的陣列。就是返回Collection<T,V,...>中的泛型引數T,V型別的Type表示形式。Type 是 Java 程式語言中所有型別的公共高階介面。它們包括原始型別、引數化型別、陣列型別、型別變數和基本型別。**/ System.out.println(ars); clazz=(Class) ars[0];//獲取泛型引數的第一個Class物件 System.out.println(clazz); // System.out.println(clazz); } /** * 增,刪,改操作 * @param sql * @param args * @return */ public int executeUpdate(String sql,Object...args){ Connection connection=JDBCUtils.getConnection(); PreparedStatement preparedStatement=null; try { preparedStatement=connection.prepareStatement(sql); if(args!=null&&args.length>0){ for(int i=0;i<args.length;i++){ preparedStatement.setObject(i+1, args[i]); } } return preparedStatement.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return -1; }finally { JDBCUtils.releaseConnection(connection, preparedStatement, null); } } /** * 查詢 * @param clazz * @param sql * @param args * @return */ public List<T> getForList(String sql, Object... args) { List<T> list = new ArrayList<>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { //1. 得到結果集 connection = JDBCUtils.getConnection(); preparedStatement = connection.prepareStatement(sql); if(args!=null&&args.length>0){ for (int i = 0; i < args.length; i++) { preparedStatement.setObject(i + 1, args[i]); } } resultSet = preparedStatement.executeQuery(); //2處理結果解,得到Map的list,其中一個Map物件就是一條記錄。 //Map的key為resultSet中的列的別名,Map的value為列的值 List<Map<String, Object>> values = handleResultSetToMapList(resultSet); //3.把List<Map<String,Object>> 轉化成Class物件(clazz)的例項集List<T> list = transfterMapListToBeanList( values); } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.releaseConnection(connection,preparedStatement,resultSet); } return list; } public List<T> transfterMapListToBeanList(List<Map<String, Object>> values) throws InstantiationException, IllegalAccessException, InvocationTargetException { List<T> result = new ArrayList<>(); T bean = null; if (values.size() > 0) { for (Map<String, Object> m : values) { bean = clazz.newInstance(); for (Map.Entry<String, Object> entry : m.entrySet()) { String propertyName = entry.getKey();//資料庫表中的欄位名稱 Object value = entry.getValue();//資料庫表中欄位的值 //利用org.apache.commons.beanutils.BeanUtils工具類反射設定物件屬性 BeanUtils.setProperty(bean, propertyName, value); /* try { ReflectorUtil.setProperty(bean, propertyName, value); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ } result.add(bean); } } return result; } public List<Map<String, Object>> handleResultSetToMapList( ResultSet resultSet) throws SQLException { List<Map<String, Object>> values = new ArrayList<>(); //獲取列名 List<String> columnLabels = getColumnLabels(resultSet); Map<String, Object> map = null; while (resultSet.next()) { map = new HashMap<>(); for (String columnLabel : columnLabels) { Object value = resultSet.getObject(columnLabel); map.put(columnLabel, value); } values.add(map); } return values; } //獲取資料庫表中的欄位名稱集合 private List<String> getColumnLabels(ResultSet rs) throws SQLException { List<String> labels = new ArrayList<>(); ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 0; i < rsmd.getColumnCount(); i++) { labels.add(rsmd.getColumnLabel(i + 1)); } return labels; } public int getCount(String sql,String...id){ Connection connection=null; ResultSet resultSet=null; PreparedStatement preparedStatement=null; try { connection=JDBCUtils.getConnection(); resultSet=null; preparedStatement=connection.prepareStatement(sql); if(id!=null&&id.length>0){ for(int i=1;i<=id.length;i++) preparedStatement.setString(i, id[i-1]); } resultSet=preparedStatement.executeQuery(); if(resultSet.next()){ return resultSet.getInt(1); } else { return 0; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return 0; }finally{ JDBCUtils.releaseConnection(connection, preparedStatement, resultSet); } } }
定義ManagerDaoImpl,該類繼承與Dao
Beans型別的Manager類package trade.axht.java.dao.userImpl; import trade.axht.java.dao.DAO; import trade.axht.java.dao.ManagerDAO; import trade.axht.java.domain.Manager; public class ManagerDaoImpl extends DAO<Manager> { @Override public int getCount(Manager manager) { // TODO Auto-generated method stub String sql="select Count(*) from tb_manager where username=? and password=?"; return getCount(sql, manager.getUsername(),manager.getPassword()); } }
package trade.axht.java.domain; public class Manager { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Manager() { super(); // TODO Auto-generated constructor stub } public Manager(int id, String username, String password) { super(); this.id = id; this.username = username; this.password = password; } }
資料庫連線操作類
package trade.axht.java.conn;
import javax.sql.*;
import java.sql.*;
import java.util.*;
import java.io.*;
public class JDBCUtils {
private static DataSource dataSource=null;
static{
Properties properties=new Properties();
InputStream in=JDBCUtils.class.getClassLoader().getResourceAsStream("dbcp.properties");//載入配置檔案
try {
<span style="white-space:pre"> </span>properties.load(in);
dataSource=org.apache.commons.dbcp2.BasicDataSourceFactory.createDataSource(properties);//利用資料庫連線池(dbcp2)獲取資料來源
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("資料庫連接出錯!");
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static void releaseConnection(Connection connection,Statement statement,ResultSet resultSet) {
if (connection!=null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (statement!=null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (resultSet!=null) {
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
資料庫配置檔案 jdcp.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/blog
username=root
password=brozer
initialSize=5
maxIdle=10
maxTotal=50
maxWaitMillis=5000
minIdle=5
匯入的包
相關推薦
Java JDBC基本操作(增,刪,改,查)總結
</pre><pre> package trade.axht.java.dao; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.dbutils
C 實現對XML檔案的基本操作(建立xml檔案,增 刪 改 查 xml節點資訊)
XML:Extensible Markup Language(可擴充套件標記語言)的縮寫,是用來定義其它語言的一種元語言,其前身是SGML(Standard Generalized Markup Language,標準通用標記語言)。它沒有標籤集(tag set),也沒有語法規
Elasticsearch增 刪 改 查操作深入詳解
引言: 對於剛接觸ES的童鞋,經常搞不明白ES的各個概念的含義。尤其對“索引”二字更是與關係型資料庫混淆的不行。本文通過對比關係型資料庫,將ES中常見的增、刪、改、查操作進行圖文呈現。能加深你對ES的理解。同時,也列舉了kibana下的圖形化展示。 ES Restful API GET、POST
MYSQL的 增 刪 改 查(基本語句)
DML語句—— -------------------------------------插入單條資料記錄--------------------------------- 插入語法: INSERT INTO 表名 [(欄位名列表)] VALUES (值列表);
PySpark︱DataFrame操作指南:增/刪/改/查/合併/統計與資料處理
筆者最近需要使用pyspark進行資料整理,於是乎給自己整理一份使用指南。pyspark.dataframe跟pandas的差別還是挺大的。 1、——– 查 ——– — 1.1 行元素查詢操作 — 像SQL那樣列印列表前20元素 sho
網站的增 / 刪 / 改 / 查 時常用的 sql 語句
ima sql語句 crud 分享 學習數據庫 image sel 參數 表結構 最近在學習數據庫 php + mysql 的基本的 crud 的操作,記錄碰到的坑供自己參考。crud中需要用到的sql語句還是比較多的,共包括以下幾個內容: 查詢所有數據 查詢表中某個字段
1-24.list的增,刪,改,查
height 返回值 字符 xtend int span spa () nbsp 增: 1.append(通過元素增加,默認加在最後print(a.append(‘hgf‘))) 2.extend( 叠代的去增,就是把字符串的字符逐個去給這個列表加上去) 3.insert(
基礎MySQL 增 刪 改 查 + 刪庫
mysql> SHOW DATABASES; 檢視資料庫資訊,預設是4個庫, +--------------------+ | Database | +--------------------+ | informat
struts2實現CRUD(增 刪 改 查)
CRUD是Create(建立)、Read(讀取)、Update(更新)和Delete(刪除) 首先,肯定是要與資料互動的,所以我們先寫一個bean類 程式碼如下: public class Food { private Integer id; private S
mybatis抽取基類BaseMapper(通用增/刪/改/查)
目前專案當中使用mapper.xml檔案方式對資料庫進行操作,但是每個裡邊都有增/刪/改/查,為了方便開發,把這些公共的程式碼提取出來,不用當做基類,不用每個Mapper檔案都寫了 準備工作: 1:資料庫表 CREATE TABLE `t_permission` (
ArrayList的增 刪 改 查
本節的程式碼主要使用並實現List介面的ArrayList類。 主要的功能和方法如下: *使用ArrayList()的構造方法構造一個初始容量為10的空列表 *使用ArrayList(int initialCapaity)構造方法,構造具有初始容量的空列表*當需要儲存大量資
html5的localStorage之【增 刪 改 查】
分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
好用的SQL TVP~~獨家贈送[增-刪-改-查]的例子
/// <summary> /// Data access layer. Gets products by the collection of the specific product' ID. /// </summary> /// <param name="conn"
GreenDao的簡單使用說明(二)單表的增,刪,改,查
通過上一篇文章,我們已經把GreenDao框架架起來了,而且三個基礎操作類和Users的使用者類也建立起來了,哪麼下面我們就來實現一下,對於這個單表的增,刪,改,查功能. 這裡說明一下,因為是做一個簡單的例子,所以這裡我對資料庫的操作,沒有做
學習 linq to ADO.NET 例項筆記(二)--增 / 刪 / 改 / 查
實體類: [Table(Name = "AA")] public class ClassDemo { [Column(IsPrimaryKey = true, UpdateCheck = UpdateCheck.Never, IsVers
AngularJs實現增,刪,改,查(全)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text
vue 前端實現 無重新整理式增 刪 改 查 以及 vue實現分頁
<div class="row" id="app"> <div class="col-md-12 col-sm-12 col-xs-12"> <div class="x_panel"> <div class="x_t
easyui table 屬性頁面 及增 刪 改查按鈕 close按鈕
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transition
js陣列的管理[增,刪,改,查]
今天在設計表單的時候遇到對陣列的一些處理的問題,比如說怎麼建立一個數組,然後牽扯到陣列的增刪改查的方法。請看APIFF: Firefox, N: Netscape, IE: Internet Explorer方法描述FFNIE連線兩個或更多的陣列,並返回結果。144把陣列的所
python基礎中的四大天王-增-刪-改-查
fine tuple define 就是 實例 開放 之前 count dot 列表-list-[] 輸入內存儲存容器 發生改變通常直接變化,讓我們看看下面列子 增---默認在最後添加 #append()--括號中可以是數字,可以是字符串,可以是元祖,可以是