Maison >Java >javaDidacticiel >Une explication approfondie du fonctionnement de JDBC dans le développement JAVA

Une explication approfondie du fonctionnement de JDBC dans le développement JAVA

无忌哥哥
无忌哥哥original
2018-07-20 10:42:361336parcourir

Sun développe un ensemble d'API standards. Ce ne sont que des interfaces et ne fournissent pas de classes d'implémentation. Les fournisseurs de bases de données fournissent des classes d'implémentation, c'est-à-dire des pilotes

processus de fonctionnement jdbc : 1. .jar Importation du package ; 2. Définir la classe d'enregistrement (comme la classe Student) ; 3. Obtenir la connexion ;

// sql的执行 
// insert
private static int insert(Student student) {
    Connection conn = getConn();
    int i = 0;
    String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
    PreparedStatement pstmt;
    try {
        pstmt = (PreparedStatement) conn.prepareStatement(sql);
        pstmt.setString(1, student.getName());
        pstmt.setString(2, student.getSex());
        pstmt.setString(3, student.getAge());
        i = pstmt.executeUpdate();
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return i;
}

// update
private static int update(Student student) {
    Connection conn = getConn();
    int i = 0;
    String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
    PreparedStatement pstmt;
    try {
        pstmt = (PreparedStatement) conn.prepareStatement(sql);
        i = pstmt.executeUpdate();
        System.out.println("resutl: " + i);
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return i;
}
// select xx from tableName
private static Integer getAll() {
    Connection conn = getConn();
    String sql = "select * from students";
    PreparedStatement pstmt;
    try {
        pstmt = (PreparedStatement)conn.prepareStatement(sql);
        ResultSet rs = pstmt.executeQuery();
        int col = rs.getMetaData().getColumnCount();
        System.out.println("============================");
        while (rs.next()) {
            for (int i = 1; i <= col; i++) {
                System.out.print(rs.getString(i) + "\t");
                if ((i == 2) && (rs.getString(i).length() < 8)) {
                    System.out.print("\t");
                }
             }
            System.out.println("");
        }
            System.out.println("============================");
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

// delete
private static int delete(String name) {
    Connection conn = getConn();
    int i = 0;
    String sql = "delete from students where Name=&#39;" + name + "&#39;";
    PreparedStatement pstmt;
    try {
        pstmt = (PreparedStatement) conn.prepareStatement(sql);
        i = pstmt.executeUpdate();
        System.out.println("resutl: " + i);
        pstmt.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return i;
}

Test :

// 测试
public static void main(String args[]) {
    JDBCOperation.getAll();
    JDBCOperation.insert(new Student("Achilles", "Male", "14"));
    JDBCOperation.getAll();
    JDBCOperation.update(new Student("Bean", "", "7"));
    JDBCOperation.delete("Achilles");
    JDBCOperation.getAll();
}

Résultat de sortie :

============================
1    Ender        male    8    
2    Bean        male    6    
3    Petra        fema    9    
4    Peter        male    9    
5    _Graff        male    40    
6    GOD        fema    255    
============================
============================
1    Ender        male    8    
2    Bean        male    6    
3    Petra        fema    9    
4    Peter        male    9    
5    _Graff        male    40    
6    GOD        fema    255    
7    Achilles    Male    14    
============================
resutl: 1
resutl: 1
============================
1    Ender        male    8    
2    Bean        male    7    
3    Petra        fema    9    
4    Peter        male    9    
5    _Graff        male    40    
6    GOD        fema    255    
============================

Analyse du code :

Dans la manière d'ajouter mentionnée ci-dessus, supprimer, modifier et vérifier la base de données Au cours du processus, vous pouvez trouver les parties communes, c'est-à-dire le processus général :

 (1) Créer un objet de connexion et une chaîne de commande de requête SQL

; (2) Passez la commande de requête SQL à l'objet Connection, obtenez l'objet PreparedStatement

(3) Exécutez executeUpdate() ou executeQurey() sur l'objet PreparedStatement pour obtenir le résultat ; (4) Fermez successivement l'objet PreparedStatement et l'objet Connection.

On constate que lors de l'utilisation de JDBC, les deux classes les plus couramment traitées sont Connection et PreparedStatement, ainsi que la classe ResultSet dans select.

Questions de réflexion

1. Chaque opération SQL doit établir et fermer une connexion, ce qui consommera inévitablement beaucoup de ressources. Comment l'éviter ?

Analyse : vous pouvez utiliser un pool de connexions pour maintenir la connexion uniformément sans avoir à l'établir et à la fermer à chaque fois. En fait, cela est utilisé par de nombreux outils qui encapsulent JDBC.

2. Que dois-je faire si le format des données entrantes dans le code Java est différent de la définition de la base de données ? Par exemple, affectez l'objet Java String à la propriété tinyint de la base de données.

Analyse : lors de l'exécution d'une instruction SQL, la base de données tentera d'effectuer une conversion. D'après mes expériences, si un objet String avec des lettres pures est utilisé pour transmettre l'attribut age de tinyint, il sera converti en 0. Les règles de conversion spécifiques doivent être liées à la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn