JDBC

来源:互联网 发布:数控加工中心编程软件 编辑:程序博客网 时间:2024/05/16 12:36
JDBC编码的步骤:1、加载驱动并注册驱动Class.forName("com.mysql.jdbc.Driver");说明:在加载Driver类时,它会自动创建自己的实例并向 DriverManager 注册该实例。com.mysql.jdbc.Driver的源码:public class Driver extends NonRegisteringDriver implements java.sql.Driver {// Register ourselves with the DriverManagerstatic {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}// Construct a new driver and register it with DriverManagerpublic Driver() throws SQLException {// Required for Class.forName().newInstance()}}2、获取与数据库的连接:ConnectionConnection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa", "root", "root");3、得到代表SQL语句的对象:StatementStatement stmt = conn.createStatement();4、发送SQL给数据库,如果有查询结果,则得到封装了查询结果的对象:ResultSetResultSet rs  = stmt.executeQuery("select id,name,password,email,birthday from users");5、遍历结果while(rs.next()){System.out.println(rs.getObject("id"));System.out.println(rs.getObject("name"));}6、释放占用的资源rs.close();stmt.close();conn.close();JDBC中常用的接口和类1、DriverManager作用:注册驱动,得到数据库的连接1.1注册驱动:DriverManager.registDriver(new com.mysql.jdbc.Driver());(不可取)原因:1、严重依赖具体的数据库驱动。2、导致驱动注册两遍,也就是在内存中会有两个Driver对象注:new com.mysql.jdbc.Driver():在new了一个driver的同时使用DriverManager把自己给注册了(查看com.mysql.jdbc.Driver的源码可知)。替代方案:Class.forName("com.mysql.jdbc.Driver");1.2获取数据库的连接:static Connection getConnection()2、Connection所有与数据库交互都必须建立在连接的基础上3、Statement作用:代表着SQL语句常用的方法:ResultSet executeQuery(String sql)int executeUpdate(String sql)boolean execute(String sql)PreparedStatement:处理 DML 语句的利器,有以下3点好处1、预编译SQL语句,数据库执行效率高。注:Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出2、防止SQL注入3、支持参数占位符"?",简化sql语句的编写PreparedStatement pstmt = conn.prepareStatement("insert into user (username, birthday) values(?,?)");pstmt.setString(1, user.getUsername());pstmt.setDate(2, new java.sql.Date(user.getBirthday().getTime()));pstmt.executeUpdate();4、ResultSetboolean next():下移一行boolean previous():上移一行void absolute(int row):第一行的记录就是1注:absolute(1) 等效于 first()、absolute(-1) 等效于last()void beforeFirst():移动到第一行的前面void afterLast():移动到最后一行的后面5、释放资源rs.close();stmt.close();conn.close();

0 0