Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डायनामिक कॉलम Jdbc/Mysql वाली तालिका में मान कैसे डालें?

कॉलम नाम प्राप्त करने के लिए आप डेटाबेस मेटाडेटा का भी उपयोग कर सकते हैं। इसका यह फायदा है कि आपको कॉलम नामों को जानने की भी आवश्यकता नहीं है, बल्कि वे आपके कोड में गतिशील रूप से पुनर्प्राप्त किए जाते हैं।

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;
}

एक बार आपके पास कॉलम नाम हो जाने के बाद, आप इसे सामान्य रूप से उपयोग कर सकते हैं (List.size() निश्चित रूप से कॉलम की संख्या देगा)।

अद्यतन:

//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
    }

यह कोड मानता है कि आप सही प्रकार के ऑब्जेक्ट को ReadyedStatement.setObject(Object o) विधि में पास करते हैं। मेटाडेटाबेस जानकारी का उपयोग करके कॉलम प्रकारों को पुनर्प्राप्त करना भी संभव है और फिर उस जानकारी का उपयोग टाइप चेकिंग को लागू करने के लिए करें लेकिन यह आपके कोड को और अधिक जटिल बना देगा



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में LOAD_FILE () फ़ंक्शन कैसे काम करता है

  2. MySQL में JSON सरणी कैसे खोजें?

  3. डेटाबेस/एसक्यूएल:देशांतर/अक्षांश डेटा कैसे स्टोर करें?

  4. UTC_TIME उदाहरण - MySQL

  5. MySQL क्वेरी में डुप्लिकेट परिणाम छुपाएं