2013-02-06 6 views
-2

Je veux stocker les données suivantes est la base de données mysql Comment écrire programme jdbc pour stocker les données suivantesComment stocker des données dans deux tables

J'ai tableau suivant

message(messageid, message_heading ,message_data) 
msgTag(tagid,tag,messageid) 

I un ayant fowwing données Bonjour comment allez-vous (titre du message)

Bonjour comment allez-vous .... Je suis bien (message de données)

tags-> abc, premier def, mer, chapeau

Je veux stocker au-dessus des données dans mon tableau mentionné ci-dessus Comment le faire.

Il doit également utiliser le contrôle des transactions

Je l'ai fait suivant le codage

PreparedStatement msg = null; 
PreparedStatement tags = null; 

String querymsg = 
    insert in to msg value(?,?,?); 

String querytags = 
       insert in to msg value(?,?,?);   
try { 
    con.setAutoCommit(false); 
    insertmsg = con.prepareStatement(querymsg); 
    inserttags = con.prepareStatement(querytags); 

     insertmsg.setString(1,msgid); 
     insertmsg.setString(2,message_heading); 
     insertmsg.setString(3,message_data); 
     insertmsg.executeUpdate(); 



     inserttags.setString(1,tagid); 
     inserttags.setString(2,tag); 
     inserttags.setString(3,messageid); 
     inserttags.executeUpdate(); 
    } 
} catch (SQLException e) { 

    if (con != null) { 
     try { 
      System.err.print("Transaction is being rolled back"); 
      con.rollback(); 
     } catch(SQLException excep) { 
      JDBCTutorialUtilities.printSQLException(excep); 
     } 
    } 
} finally { 
    if (insertmsg != null) { 
     insertmsg.close(); 
    } 
    if (inserttags != null) { 
     inserttags.close(); 
    } 
    con.setAutoCommit(true); 
} 
} 

Je veux changer le code suivant afin que plus d'un balises sont stockées dans le tableau lié à un message, et qu'il convient maintenir le contrôle de transaction.

+0

Avez-vous déjà essayé quelque chose? –

+0

Oui avec une instruction préparée Je ne peux stocker des données que dans un message. – xrcwrn

+3

pourquoi pas dans l'autre tableau, vous n'avez besoin que d'une seule connexion DB, mais vous aurez besoin de deux instructions préparées pour chaque table –

Répondre

0
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 

public class InsertRecordsUsingPreparedStatement { 
    public static Connection getConnection() throws Exception { 
    String driver = "com.mysql.jdbc.Driver"; 
    String url = "jdbc:mysql://localhost:3306/databaseName"; 
    String username = "username"; 
    String password = "password"; 
    Class.forName(driver); 
    Connection conn = DriverManager.getConnection(url, username, password); 
    return conn; 
    } 

    public static void main(String[] args) throws Exception { 
    Connection conn = null; 
    PreparedStatement pstmt = null; 
    try { 
     conn = getConnection(); 
     String query = "insert into message values(?, ?, ?)"; 

     pstmt = conn.prepareStatement(query); // create a statement 
     pstmt.setInt(1, 5); // set input parameter 1 
     pstmt.setString(2, "head5"); // set input parameter 2 
     pstmt.setString(3, "data5"); // set input parameter 3 
     pstmt.executeUpdate(); // execute insert statement 
     pstmt = conn.prepareStatement("insert into msgtag values(?, ?, ?)"); // create a statement 
     pstmt.setInt(1, 55); // set input parameter 1 
     pstmt.setString(2, "tag5"); // set input parameter 2 
     pstmt.setInt(3, 5); // set input parameter 3 
     pstmt.executeUpdate(); // execute insert statement 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     pstmt.close(); 
     conn.close(); 
    } 
    } 
} 
+0

Je souhaite insérer plus d'une valeur dans la table msgtag – xrcwrn

+0

insérez autant que vous le souhaitez, créez une boucle pour l'insertion de valeur, gardez simplement trace de l'ID de la première table et l'utilisez comme clé étrangère dans la deuxième table –

+0

Only pstmt.setInt (1, 55); // définit le paramètre d'entrée 1 pstmt.setString (2, "tag5"); // définit le paramètre d'entrée 2 pstmt.setInt (3, 5); // définit le paramètre d'entrée 3 pstmt.executeUpdate(); // exécuter l'instruction d'insertion doit être iln loop – xrcwrn

Questions connexes