Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara memasukkan nilai dalam tabel dengan kolom dinamis Jdbc/Mysql

Anda juga dapat menggunakan metadata database untuk mendapatkan nama kolom. Ini memiliki keuntungan bahwa Anda bahkan tidak perlu mengetahui nama kolom, melainkan diambil secara dinamis dalam kode Anda.

public static List<String> getColumns(String tableName, String schemaName) throws  SQLException{

    ResultSet rs=null;

    ResultSetMetaData rsmd=null;
    PreparedStatement stmt=null;
    List<String> columnNames =null;
    String qualifiedName = (schemaName!=null&&!schemaName.isEmpty())?(schemaName+"."+tableName):tableName;
    try{
        stmt=conn.prepareStatement("select * from "+qualifiedName+" where 0=1");
        rs=stmt.executeQuery();//you'll get an empty ResultSet but you'll still get the metadata
        rsmd=rs.getMetaData();
        columnNames = new ArrayList<String>(); 
        for(int i=1;i<=rsmd.getColumnCount();i++)
            columnNames.add(rsmd.getColumnLabel(i));    
    }catch(SQLException e){
        throw e;//or log it
    }
    finally{
        if(rs!=null)
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                throw e
            }
        if(stmt!=null)
            try {
                stmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                throw e
            }
    }
    return columnNames;
}

Setelah Anda memiliki nama kolom, Anda dapat menggunakannya seperti biasa (List.size() tentu saja akan memberikan jumlah kolom).

PEMBARUAN:

//I will assume that your values (data to be inserted) is a List of Object types and that it is already populated



List<Object> data = new ArrayList<>();
    //you will populate this list

    //getting the column names
    List<String> columnNames = getColumns("MyTable", "MyDB");

    String insertColumns = ""; 
    String insertValues = "";

    if(columnNames != null && columnNames.size() > 0){
        insertColumns += columnNames.get(0);
        insertValues += "?";
    }


    for(int i = 1; i < columnNames.size();i++){
      insertColumns += ", " + columnNames.get(i) ;
      insertValues += "?";
    }

    String insertSql = "INSERT INTO MyDB.MyTable (" + insertColumns + ") values(" + insertValues + ")"; 

    try{
    PrepareStatement ps = conn.prepareStatement(insertSql);

    for(Object o : data){
     ps.setObject(o); //you must pass objects of correct type
    }
    ps.execute(); //this inserts your data
    }catch(SQLException sqle){
      //do something with it
    }

Kode ini mengasumsikan bahwa Anda meneruskan objek dengan tipe yang benar ke metode PreparedStatement.setObject(Object o). Dimungkinkan juga untuk mengambil jenis kolom menggunakan informasi metadatabase dan kemudian menggunakan info itu untuk menerapkan pemeriksaan jenis tetapi itu akan membuat kode Anda jauh lebih rumit



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghubungkan Java ke Mysql?

  2. Menanamkan mysql di aplikasi desktop java

  3. Kelompokkan berdasarkan tanggal hanya pada kolom Datetime

  4. Bagaimana saya bisa membuang database MySQL tanpa menggunakan mysqldump dengan Python

  5. Mysql mengembalikan hasil bigint yang salah satu per satu, kesalahan yang sangat aneh