JAVA開発におけるJDBCの動作を徹底解説

无忌哥哥
リリース: 2018-07-20 10:42:36
オリジナル
1309 人が閲覧しました

Sun 社は一連の標準 API を開発します。これらは単なるインターフェイスであり、実装クラスは提供されません。つまり、ドライバー

jdbc 操作プロセスは次のとおりです。記録されたクラス (Student クラスなど); 3. 接続の取得; 4. SQL の実行。

// 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;
}
ログイン後にコピー

テスト:

// 测试
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();
}
ログイン後にコピー

出力結果:

============================
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    
============================
ログイン後にコピー

コード分析:

上記のデータベースの追加、削除、変更、確認のプロセスで、共通部分、つまり一般的なプロセスを見つけることができます:

(1) Connection オブジェクト、SQL クエリ コマンド文字列を作成します。

(2) SQL クエリ コマンドを Connection オブジェクトに渡し、PreparedStatement オブジェクトを取得します。結果を取得するには

(4) PreparedStatement オブジェクトと Connection オブジェクトを続けて閉じます。

JDBCを使用する場合、最も一般的に扱われる2つのクラスはConnectionとPreparedStatement、そしてselectのResultSetクラスであることがわかります。

考えられる質問

1. すべての SQL 操作で接続を確立して閉じる必要がありますが、これを回避するにはどうすればよいでしょうか。

分析: 接続プールを使用すると、毎回接続を確立したり閉じたりすることなく、接続を均一に維持できます。実際、これは JDBC をカプセル化する多くのツールで使用されています。

2. Java コードの受信データ形式がデータベース定義と異なる場合はどうすればよいですか?たとえば、Java String オブジェクトをデータベースの tinyint プロパティに割り当てます。

分析: SQL ステートメントを実行すると、データベースは変換を実行しようとします。私の実験によると、純粋な文字を含む String オブジェクトを使用して tinyint の age 属性を渡すと、それは 0 に変換されます。特定の変換ルールはデータベースに関連している必要があります。

以上がJAVA開発におけるJDBCの動作を徹底解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート