中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java使用JDBC動態創建數據表及SQL預處理的方法

發布時間:2020-08-25 09:34:15 來源:腳本之家 閱讀:348 作者:清墨無痕 欄目:編程語言

本文實例講述了java使用JDBC動態創建數據表及SQL預處理的方法。分享給大家供大家參考,具體如下:

這兩天由于公司的需求,客戶需要自定義數據表的字段,導致每張表的字段都不是固定的而且很難有一個通用的模板去維護,所以就使用JDBC動態去創建數據表,然后通過表的字段動態添加數據,數據的來源主要是用戶提供的Excel直接導入到數據庫中。

如果考慮到字段的類型,可以通過反射的機制去獲取,現在主要用戶需求就是將數據導入到數據庫提供查詢功能,不能修改,所以就直接都使用String類型來處理數據更加便捷。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class DataBaseSql {
 //配置文件 讀取jdbc的配置文件
 private static ResourceBundle bundle = PropertyResourceBundle.getBundle("db");
 private static Connection conn;
 private static PreparedStatement ps;
  /**
   * 創建表
   * @param tabName 表名稱
   * @param tab_fields 表字段
   */
  public static void createTable(String tabName,String[] tab_fields) {
    conn = getConnection();  // 首先要獲取連接,即連接到數據庫
    try {
      String sql = "create table "+tabName+"(id int auto_increment primary key not null";
      if(tab_fields!=null&&tab_fields.length>0){
        sql+=",";
        int length = tab_fields.length;
        for(int i =0 ;i<length;i++){
          //添加字段
          sql+=tab_fields[i].trim()+" varchar(50)";
          //防止最后一個,
          if(i<length-1){
            sql+=",";
          }
        }
      }
      //拼湊完 建表語句 設置默認字符集
      sql+=")DEFAULT CHARSET=utf8;";
      System.out.println("建表語句是:"+sql);
      ps = conn.prepareStatement(sql);
      ps.executeUpdate(sql);
      ps.close();
      conn.close();  //關閉數據庫連接
    } catch (SQLException e) {
      System.out.println("建表失敗" + e.getMessage());
    }
  }
  /**
   * 添加數據
   * @param tabName 表名
   * @param fields 參數字段
   * @param data 參數字段數據
   */
  public static void insert(String tabName,String[] fields,String[] data) {
    conn = getConnection();  // 首先要獲取連接,即連接到數據庫
    try {
      String sql = "insert into "+tabName+"(";
      int length = fields.length;
      for(int i=0;i<length;i++){
        sql+=fields[i];
        //防止最后一個,
        if(i<length-1){
          sql+=",";
        }
      }
      sql+=") values(";
      for(int i=0;i<length;i++){
        sql+="?";
        //防止最后一個,
        if(i<length-1){
          sql+=",";
        }
      }
      sql+=");";
      System.out.println("添加數據的sql:"+sql);
      //預處理SQL 防止注入
      excutePs(sql,length,data);
      //執行
      ps.executeUpdate();
      //關閉流
      ps.close();
      conn.close();  //關閉數據庫連接
    } catch (SQLException e) {
      System.out.println("添加數據失敗" + e.getMessage());
    }
  }
  /**
   * 查詢表 【查詢結果的順序要和數據庫字段的順序一致】
   * @param tabName 表名
   * @param fields 參數字段
   * @param data 參數字段數據
   * @param tab_fields 數據庫的字段
   */
  public static String[] query(String tabName,String[] fields,String[] data,String[] tab_fields){
    conn = getConnection();  // 首先要獲取連接,即連接到數據庫
    String[] result = null;
    try {
      String sql = "select * from "+tabName+" where ";
       int length = fields.length;
       for(int i=0;i<length;i++){
          sql+=fields[i]+" = ? ";
          //防止最后一個,
          if(i<length-1){
            sql+=" and ";
          }
       }
       sql+=";";
       System.out.println("查詢sql:"+sql);
      //預處理SQL 防止注入
      excutePs(sql,length,data);
      //查詢結果集
      ResultSet rs = ps.executeQuery();
      //存放結果集
      result = new String[tab_fields.length];
      while(rs.next()){
          for (int i = 0; i < tab_fields.length; i++) {
            result[i] = rs.getString(tab_fields[i]);
          }
        }
      //關閉流
      rs.close();
      ps.close();
      conn.close();  //關閉數據庫連接
    } catch (SQLException e) {
       System.out.println("查詢失敗" + e.getMessage());
    }
    return result;
  }
  /**
   * 獲取某張表總數
   * @param tabName
   * @return
   */
  public static Integer getCount(String tabName){
    int count = 0;
     conn = getConnection();  // 首先要獲取連接,即連接到數據庫
     try {
      String sql = "select count(*) from "+tabName+" ;";
       ps = conn.prepareStatement(sql);
       ResultSet rs = ps.executeQuery();
       while(rs.next()){
         count = rs.getInt(1);
        }
       rs.close();
       ps.close();
       conn.close();  //關閉數據庫連接
    } catch (SQLException e) {
       System.out.println("獲取總數失敗" + e.getMessage());
    }
    return count;
  }
  /**
   * 后臺分頁顯示
   * @param tabName
   * @param pageNo
   * @param pageSize
   * @param tab_fields
   * @return
   */
  public static List<String[]> queryForPage(String tabName,int pageNo,int pageSize ,String[] tab_fields){
    conn = getConnection();  // 首先要獲取連接,即連接到數據庫
    List<String[]> list = new ArrayList<String[]>();
    try {
      String sql = "select * from "+tabName+" LIMIT ?,? ; ";
       System.out.println("查詢sql:"+sql);
       //預處理SQL 防止注入
       ps = conn.prepareStatement(sql);
       //注入參數
       ps.setInt(1,pageNo);
       ps.setInt(2,pageSize);
      //查詢結果集
      ResultSet rs = ps.executeQuery();
      //存放結果集
      while(rs.next()){
         String[] result = new String[tab_fields.length];
          for (int i = 0; i < tab_fields.length; i++) {
            result[i] = rs.getString(tab_fields[i]);
          }
         list.add(result);
        }
      //關閉流
      rs.close();
      ps.close();
      conn.close();  //關閉數據庫連接
    } catch (SQLException e) {
       System.out.println("查詢失敗" + e.getMessage());
    }
    return list;
  }
  /**
   * 清空表數據
   * @param tabName 表名稱
   */
  public static void delete(String tabName){
      conn = getConnection();  // 首先要獲取連接,即連接到數據庫
      try {
        String sql = "delete from "+tabName+";";
        System.out.println("刪除數據的sql:"+sql);
        //預處理SQL 防止注入
        ps = conn.prepareStatement(sql);
        //執行
        ps.executeUpdate();
        //關閉流
        ps.close();
        conn.close();  //關閉數據庫連接
      } catch (SQLException e) {
        System.out.println("刪除數據失敗" + e.getMessage());
      }
  }
  /**
   * 用于注入參數
   * @param ps
   * @param data
   * @throws SQLException
   */
   private static void excutePs(String sql,int length,String[] data) throws SQLException{
     //預處理SQL 防止注入
     ps = conn.prepareStatement(sql);
     //注入參數
     for(int i=0;i<length;i++){
       ps.setString(i+1,data[i]);
     }
   }
   /* 獲取數據庫連接的函數*/
  private static Connection getConnection() {
    Connection con = null;  //創建用于連接數據庫的Connection對象
    try {
        Class.forName(bundle.getString("db.classname"));// 加載Mysql數據驅動
        con = DriverManager.getConnection(bundle.getString("db.url"), bundle.getString("db.username"), bundle.getString("db.password"));// 創建數據連接
    } catch (Exception e) {
        System.out.println("數據庫連接失敗" + e.getMessage());
    }
    return con;  //返回所建立的數據庫連接
  }
  /**
   * 判斷表是否存在
   * @param tabName
   * @return
   */
  public static boolean exitTable(String tabName){
    boolean flag = false;
     conn = getConnection();  // 首先要獲取連接,即連接到數據庫
     try {
       String sql = "select id from "+tabName+";";
       //預處理SQL 防止注入
       ps = conn.prepareStatement(sql);
       //執行
       flag = ps.execute();
       //關閉流
       ps.close();
       conn.close();  //關閉數據庫連接
     } catch (SQLException e) {
       System.out.println("刪除數據失敗" + e.getMessage());
     }
    return flag;
  }
  /**
   * 刪除數據表
   * 如果執行成功則返回false
   * @param tabName
   * @return
   */
  public static boolean dropTable(String tabName){
    boolean flag = true;
     conn = getConnection();  // 首先要獲取連接,即連接到數據庫
       try {
         String sql = "drop table "+tabName+";";
         //預處理SQL 防止注入
         ps = conn.prepareStatement(sql);
         //執行
         flag = ps.execute();
         //關閉流
         ps.close();
         conn.close();  //關閉數據庫連接
       } catch (SQLException e) {
         System.out.println("刪除數據失敗" + e.getMessage());
       }
      return flag;
  }
  /**
   * 測試方法
   * @param args
   */
  public static void main(String[] args) {
    //建表===========================================
    //表名
//    String tabName = "mytable";
    //表字段
//    String[] tab_fields = {"name","password","sex","age"};
    //創建表
//    createTable(tabName, tab_fields);
    //添加===========================================
    //模擬數據
//    String[] data1 = {"jack","123456","男","25"};
//    String[] data2 = {"tom","456789","女","20"};
//    String[] data3 = {"mark","aaa","哈哈","21"};
    //插入數據
//    insert(tabName, tab_fields, data1);
//    insert(tabName, tab_fields, data2);
//    insert(tabName, tab_fields, data3);
    //查詢=============================================
//    String[] q_fileds ={"name","sex"};
//    String[] data4 = {"jack","男"};
//
//    String[] result = query(tabName, q_fileds, data4, tab_fields);
//    for (String string : result) {
//      System.out.println("結果:\t"+string);
//    }
    //刪除 清空=============================================
//    delete(tabName);
    //是否存在
//    System.out.println(exitTable("mytable"));
    //刪除表
//    System.out.println(dropTable("mytable"));
  }
}

數據庫的配置文件 db.properties

db.username=root
db.password=root
db.classname=com.mysql.jdbc.Driver
db.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

更多關于java相關內容感興趣的讀者可查看本站專題:《Java+MySQL數據庫程序設計總結》、《Java數據結構與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節點技巧總結》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永安市| 上高县| 建瓯市| 库尔勒市| 富锦市| 颍上县| 应用必备| 拜泉县| 临夏县| 菏泽市| 广西| 桃江县| 华池县| 垦利县| 类乌齐县| 青州市| 徐闻县| 革吉县| 峨山| 奈曼旗| 定州市| 南安市| 嵊州市| 佛冈县| 南江县| 长宁县| 阿勒泰市| 花莲县| 咸宁市| 钦州市| 罗田县| 松原市| 绿春县| 玉龙| 肇庆市| 崇义县| 牡丹江市| 平凉市| 阿城市| 通城县| 葫芦岛市|