本文講述2點:java
一. jdbc 操做 MySQL 。(封裝一個JdbcUtils.java類,實現數據庫表的增刪改查)mysql
1. 創建數據庫鏈接sql
Class.forName(DRIVER);數據庫
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);app
2.用PrepareStatement執行sql語句eclipse
pstmt = connection.prepareStatement(sql);ide
3. 得到執行Sql結果(int result)或結果集合(ResultSet)oop
int result = pstmt.executeUpdate(); (增,刪,改) 測試
ResultSet resultSet = pstmt.executeQuery(); (查詢) ui
// 獲取全部列的信息
ResultSetMetaData metaData = resultSet.getMetaData();
二. 用Java反射機制返回JavaBean,List<JavaBean>
看JdbcUtils.java 中具體代碼。
------------------------------------------------------------------------------------------------------------
程序思路:
用eclipse創建一個java 工程,訪問mysql數據庫。數據庫名稱:mydb,表格名稱:userinfo. user表格有三個屬性(id , username , pswd)
工程目錄:
1 JdbcUtils.java --封裝數據庫操做的類
- package com.jdbc.dbutils;
-
- import java.lang.reflect.Field;
- 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 com.jdbc.data.UserInfo;
- import com.mysql.jdbc.Driver;
-
- public class JdbcUtils {
-
-
- private final String USERNAME = "root";
-
- private final String PASSWORD = "123456";
-
- private final String DRIVER = "com.mysql.jdbc.Driver";
-
- private final String URL = "jdbc:mysql://localhost:3306/mydb";
-
-
- private Connection connection;
-
- private PreparedStatement pstmt;
-
- private ResultSet resultSet;
-
- public JdbcUtils() {
-
- try {
- Class.forName(DRIVER);
- System.out.println("註冊驅動成功!!");
- } catch (ClassNotFoundException e) {
-
- System.out.println("註冊驅動失敗!!");
- }
-
- }
-
-
- public Connection getConnection() {
-
- try {
- connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
-
- } catch (Exception e) {
-
- System.out.println("Connection exception !");
- }
-
- return connection;
-
- }
-
-
- public boolean updateByPreparedStatement(String sql, List<Object> params)
- throws SQLException {
- boolean flag = false;
- int result = -1;
- int index = 1;
- pstmt = connection.prepareStatement(sql);
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
-
- result = pstmt.executeUpdate();
- flag = result > 0 ? true : false;
- return flag;
-
- }
-
-
- public Map<String, Object> findSimpleResult(String sql, List<Object> params)
- throws SQLException {
- Map<String, Object> map = new HashMap<String, Object>();
- pstmt = connection.prepareStatement(sql);
- int index = 1;
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery();
-
- ResultSetMetaData metaData = pstmt.getMetaData();
- int cols_len = metaData.getColumnCount();
-
- while (resultSet.next()) {
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1);
- Object col_value = resultSet.getObject(col_name);
- if (col_value == null) {
- col_value = "";
- }
- map.put(col_name, col_value);
- }
-
- }
-
- return map;
- }
-
-
- public List<Map<String, Object>> findMoreResult(String sql,
- List<Object> params) throws SQLException {
- List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
- pstmt = connection.prepareStatement(sql);
- int index = 1;
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery();
- ResultSetMetaData metaData = resultSet.getMetaData();
-
- while (resultSet.next()) {
- Map<String, Object> map = new HashMap<String, Object>();
- int cols_len = metaData.getColumnCount();
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1);
-
- Object col_value = resultSet.getObject(col_name);
- if (col_value == null) {
- col_value = "";
- }
-
- map.put(col_name, col_value);
- }
- list.add(map);
- }
-
- return list;
-
- }
-
-
- public <T> T findSimpleRefResult(String sql, List<Object> params,
- Class<T> cls) throws Exception {
- T resultObject = null;
- int index = 1;
- pstmt = connection.prepareStatement(sql);
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery();
-
- ResultSetMetaData metaData = resultSet.getMetaData();
- int cols_len = metaData.getColumnCount();
- while (resultSet.next()) {
-
- resultObject = cls.newInstance();
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1);
- Object col_value = resultSet.getObject(col_name);
- if (col_value == null) {
- col_value = "";
- }
- Field field = cls.getDeclaredField(col_name);
- field.setAccessible(true);
- field.set(resultObject, col_value);
- }
-
- }
-
- return resultObject;
- }
-
-
- public <T> List<T> findMoreRefResult(String sql, List<Object> params,
- Class<T> cls) throws Exception {
- List<T> list = new ArrayList<T>();
- int index = 1;
- pstmt = connection.prepareStatement(sql);
- if (params != null && !params.isEmpty()) {
- for (int i = 0; i < params.size(); i++) {
- pstmt.setObject(index++, params.get(i));
- }
- }
- resultSet = pstmt.executeQuery();
-
- ResultSetMetaData metaData = resultSet.getMetaData();
- int cols_len = metaData.getColumnCount();
- while (resultSet.next()) {
-
- T resultObject = cls.newInstance();
- for (int i = 0; i < cols_len; i++) {
- String col_name = metaData.getColumnName(i + 1);
- Object col_value = resultSet.getObject(col_name);
- if (col_value == null) {
- col_value = "";
- }
- Field field = cls.getDeclaredField(col_name);
- field.setAccessible(true);
- field.set(resultObject, col_value);
- }
- list.add(resultObject);
-
- }
-
- return list;
- }
-
-
- public void releaseConn() throws SQLException{
- if (resultSet!=null) {
- resultSet.close();
- }
- if (pstmt!=null) {
- pstmt.close();
- }
- if (connection!=null) {
- connection.close();
- }
- }
-
-
- }
2. UserInfo.java (用來驗證java反射機制的JavaBean , 屬性名稱和數據表userinfo的字段徹底一致)
- package com.jdbc.data;
-
- import java.io.Serializable;
-
- public class UserInfo implements Serializable {
-
-
- private static final long serialVersionUID = 1L;
- private int id;
- private String username;
- private String pswd;
-
- public UserInfo() {
-
- }
-
- 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 getPswd() {
- return pswd;
- }
-
- public void setPswd(String pswd) {
- this.pswd = pswd;
- }
-
- public static long getSerialversionuid() {
- return serialVersionUID;
- }
-
- @Override
- public String toString() {
- return "UserInfo [id=" + id + ", username=" + username + ", pswd="
- + pswd + "]";
- }
-
- }
3. Test_insert.java 測試添加
- package com.jdbc.test;
-
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
-
- import com.jdbc.dbutils.JdbcUtils;
-
- public class Test_Insert {
-
-
- public static void main(String[] args) throws SQLException {
-
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
-
-
- String sql = "insert into userinfo(username,pswd) values(?,?)";
- List<Object> params = new ArrayList<Object>();
- params.add("jack");
- params.add("admin");
-
-
- try {
- boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
- System.out.println("添加一條記錄: "+flag);
- } catch (Exception e) {
-
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
-
-
- }
-
- }
運行結果:
(用一樣的方法,再增長一條記錄username="rose",pswd="123"),此時數據庫共2條記錄。以下圖:
4. Test_FindMore.java (查詢多條記錄)
- package com.jdbc.test;
-
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
-
- import com.jdbc.dbutils.JdbcUtils;
-
- public class Test_FindMore {
-
-
- public static void main(String[] args) throws Exception {
-
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo";
-
- try {
- List<Map<String, Object>> list = jdbcUtils.findMoreResult(sql, null);
- System.out.println(list);
- } catch (Exception e) {
-
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
-
- }
-
- }
運行結果:
5. Test_FindSimple.java (查詢返回單條記錄)
- package com.jdbc.test;
-
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
-
- import com.jdbc.dbutils.JdbcUtils;
-
- public class Test_FindSimple {
-
-
- public static void main(String[] args) throws SQLException {
-
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo where username = ?";
- List<Object> params = new ArrayList<Object>();
- params.add("rose");
- try {
- Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params);
- System.out.println(map);
- } catch (Exception e) {
-
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
-
- }
-
- }
運行結果:
6.Test_RefMore.java 查詢返回List<JavaBean>(使用Java反射機制)
- package com.jdbc.test;
-
- import java.sql.SQLException;
- import java.util.List;
- import java.util.Map;
-
- import com.jdbc.data.UserInfo;
- import com.jdbc.dbutils.JdbcUtils;
-
- public class Test_RefMore {
-
-
- public static void main(String[] args) throws SQLException {
-
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo";
-
- try {
- List<UserInfo> list = jdbcUtils.findMoreRefResult(sql, null , UserInfo.class);
- System.out.println(list);
- } catch (Exception e) {
-
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
-
- }
-
- }
7. Test_RefSimple.java 查詢返回單個JavaBean (使用Java反射機制)
- package com.jdbc.test;
-
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
-
- import com.jdbc.data.UserInfo;
- import com.jdbc.dbutils.JdbcUtils;
-
- public class Test_RefSimple {
-
-
- public static void main(String[] args) throws SQLException {
-
- JdbcUtils jdbcUtils = new JdbcUtils();
- jdbcUtils.getConnection();
- String sql = "select * from userinfo where username = ?";
- List<Object> params = new ArrayList<Object>();
- params.add("rose");
-
- try {
- UserInfo userInfo = jdbcUtils.findSimpleRefResult(sql, params, UserInfo.class);
- System.out.println(userInfo);
- } catch (Exception e) {
-
- e.printStackTrace();
- }finally{
- jdbcUtils.releaseConn();
- }
-
- }
-
- }
運行結果: