目錄
前言:
大家都知道java從數據庫獲取圖片,我們java程序員最基本的事情就是對數據庫的增刪改查操作,本次就讓我來講講簡單的增刪改查。其中需要的工具為ideal,還需要數據庫的jar包。今天我就來教大家如何只寫一個查詢方法就可以查詢所有的表,并且可以添加任何條件
1.普通查詢方法 1.1實現步驟 1.1.1預加載
Class.forName(com.mysql.jdbc.Driver)
此為5版本mysql的預加載方式
Class.forName(com.mysql.cj.jdbc.Driver)
此為8版本的數據庫預加載方式
1.1.2通過驅動管理器獲取對象
Connection connection=DriverMannger.getConnection("jdbc:mysql://localhost:3306/表名");
1.1.2通過對象來創建命令對象
Statement statement=connection.createStatement();
1.1.3通過命令對象獲取結果集
ResultSet resultSet = statement.executeQuery("select * from NAME ");
接下來就可以遍歷結果集查詢到所有數據了
但是這種方法里面的查詢語句是寫死的,而且要是方法需要返回存儲對象的集合的話,那么這種方法通用性就非常的低。
2.不普通的查詢方法
這種查詢方法可以查詢不同的表,查詢的條件也可以隨便改,但是查詢的結果必須是全部
例子: * from 任意表名 where 任意條件
2.1獲取類的反射對象
1.類名.class
2.對象名.
3.class.("該類的路徑")
2.2泛型
定義泛型可以代表各種不確定的類。
2.3完整代碼
//通用查詢方法
public static List select(Class tClass, String sql, Object... o) {
List list = new ArrayList<>();
Connection connection=null;
try {
// Connection connection = getConnection();
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myfirst");
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < o.length; i++) {
preparedStatement.setObject(i + 1, o[i]);
}
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
T obj = tClass.newInstance();

Field[] declaredFields = tClass.getDeclaredFields();
for (Field field : declaredFields) {
Object value = resultSet.getObject(field.getName());
field.setAccessible(true);
field.set(obj, value);
}
list.add(obj);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

return null;
}
這玩意不容易講明白,但是大伙可以拷貝下來直接用,用法如下
類名.(類名.class," * from 表名 where 字段名1=?, 字段名2=?....",字段名1的值,字段名2的值.....)
3.引入連接池
不過這種寫法還是不夠規范。我們最好還是加上一個連接池java從數據庫獲取圖片,連接池可以回收利用對象。頻繁的創建與銷毀對象不好。想要用連接池就需要連接池的jar包
3.1連接池介紹
現在常用的是兩個,一個名為Druid是馬云的。還有一個是是小日本的。
區別:馬云的淘寶主要是做金額交易的業務所以需要安全。Druid更安全
是的,優點就是快。
3.2引入連接池的完整代碼
private static DataSource dataSource = null;
static {
//獲取屬性集對象
Properties properties = new Properties();
//獲取.properties里的配置文件
try {
properties.load(DBUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//通過馬云的工廠獲取數據源

dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//創建獲取Druid里的數據源對象通過getConnection獲取的connection對象,等同于DriverMannger獲取連接對象
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
3.3引入連接池的查詢方法
//通用查詢方法
public static List select(Class tClass, String sql, Object... o) {
List list = new ArrayList<>();
try (Connection connection = getConnection()){
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < o.length; i++) {
preparedStatement.setObject(i + 1, o[i]);

}
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
T obj = tClass.newInstance();
Field[] declaredFields = tClass.getDeclaredFields();
for (Field field : declaredFields) {
Object value = resultSet.getObject(field.getName());
field.setAccessible(true);
field.set(obj, value);
}
list.add(obj);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}