2014-05-20 4 views
0
se

J'utilise la déclaration préparée à faire insérer en suivant façon:déclaration préparée ligne insérée

String query = "Insert into ROLE (ROLEID,ROLENAME,TYPEID,UPDATETIMESTAMP) values  (?,?,?,?)"; 
Class.forName(driver); 
     conn = DriverManager.getConnection(url, userName, password); 
     preparedStatement = conn.prepareStatement(query); 
     preparedStatement.setInt(1, 0); 
     preparedStatement.setString(2, roleName); 
     preparedStatement.setInt(3, roleId); 
     preparedStatement.setTimestamp(4,null); 
     preparedStatement.executeUpdate(); 

Ici RoleId est la clé primaire et est mis à jour en interne par obtenir une séquence par une détente. Mon problème ici est après l'insertion j'ai besoin d'aller chercher le ROLEID qui a été inséré. Je peux utiliser une requête comme select * de order par ROLEID desc, mais je ferais mieux de trouver l'identifiant spécifique utilisé par cette instruction préparée.

Un conseil?

+1

Jetez un oeil à http://docs.oracle. com/javase/8/docs/api/java/sql/Connection.html # prepareStatement-java.lang.String-int- –

+0

Une autre approche consisterait à utiliser une procédure stockée de base de données pour effectuer l'insertion et appeler la procédure stockée à partir de Java. La procédure stockée doit avoir un paramètre OUT qui n'est rien d'autre que votre 'ROLEID'. Ainsi vous avez une plus grande flexibilité et gardez toute la logique de base de données dans le backend. – user75ponic

Répondre

0

Une autre approche consisterait à utiliser une procédure stockée dans la base de données pour effectuer l'insertion et appeler la procédure stockée à partir de Java. La procédure stockée doit avoir un paramètre OUT qui n'est rien d'autre que votre ROLEID. Ainsi vous avez une plus grande flexibilité et gardez toute la logique de base de données dans le backend.

Supposons que votre base de données est Oracle.

E.g. d'abord créer la procédure pour faire insertion et roleid

CREATE SEQUENCE role_seq; 

CREATE OR REPLACE PROCEDURE p_proc (
    p_rolename   IN  T_ROLE.ROLENAME%TYPE, 
    p_typeid   IN  T_ROLE.TYPEID%TYPE,  
    o_roleid   OUT T_ROLE.ROLEID%TYPE) 
IS 
BEGIN 
    INSERT INTO t_role (roleid, 
        rolename, 
        typeid, 
        updatetimestamp) 
     VALUES (role_seq.NEXTVAL, 
       p_rolename, 
       p_typeid, 
       sysdate) 
    RETURNING roleid 
      INTO o_roleid;    
END; 

Et appelez la procédure ci-dessus de Java à l'aide callableStatement

Java extrait de code

CallableStatement callablestatement = null; 

callablestatement = 
        connection.prepareCall("{call p_proc(?,?,?)}"); 
callablestatement.setString(1, 'Test'); 
callablestatement.setString(2, 'TestType'); 
callablestatement.registerOutParameter(3, java.sql.Types.INTEGER); 

callablestatement.executeUpdate(); 
int roleId= callablestatement.getInt(3); 
Questions connexes