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='" + name + "'"; 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クラスであることがわかります。
考えられる質問
分析: 接続プールを使用すると、毎回接続を確立したり閉じたりすることなく、接続を均一に維持できます。実際、これは JDBC をカプセル化する多くのツールで使用されています。
2. Java コードの受信データ形式がデータベース定義と異なる場合はどうすればよいですか?たとえば、Java String オブジェクトをデータベースの tinyint プロパティに割り当てます。
分析: SQL ステートメントを実行すると、データベースは変換を実行しようとします。私の実験によると、純粋な文字を含む String オブジェクトを使用して tinyint の age 属性を渡すと、それは 0 に変換されます。特定の変換ルールはデータベースに関連している必要があります。
以上がJAVA開発におけるJDBCの動作を徹底解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。