Jdbc连接、createStatement--execute操作数据库

来源:互联网 发布:btfox类似软件 编辑:程序博客网 时间:2024/06/05 03:19

几种获取数据库连接的方式

这里写图片描述

配置文件jdbc.properties

driver = com.mysql.jdbc.DriverjdbcUrl = jdbc:mysql://localhost:3306/mydatabaseuser = rootpassword = root

JDBCTest

package com.godinsec;import java.io.InputStream;import java.sql.Connection;import java.sql.Date;import java.sql.Driver;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import java.util.Properties;import org.junit.Test;public class JDBCTest {    // //////////////////////////////////////////////////////////////////    @Test    public void testGetConnection2() throws Exception {        System.out.println(getConnection2());    }    public Connection getConnection2() throws Exception {        // 1. 准备连接数据库的 4 个字符串.        // 1). 创建 Properties 对象        Properties properties = new Properties();        // 2). 获取 jdbc.properties 对应的输入流        InputStream in = this.getClass().getClassLoader()                .getResourceAsStream("jdbc.properties");        // 3). 加载 2) 对应的输入流        properties.load(in);        // 4). 具体决定 user, password 等4 个字符串.        String user = properties.getProperty("user");        String password = properties.getProperty("password");        String jdbcUrl = properties.getProperty("jdbcUrl");        String driver = properties.getProperty("driver");        // 2. 加载数据库驱动程序(对应的 Driver 实现类中有注册驱动的静态代码块.)        Class.forName(driver);        // 3. 通过 DriverManager 的 getConnection() 方法获取数据库连接.        return DriverManager.getConnection(jdbcUrl, user, password);    }    // //////////////////////////////////////////////////////////////////    /**     * DriverManager 是驱动的管理类. 1). 可以通过重载的 getConnection() 方法获取数据库连接. 较为方便 2).     * 可以同时管理多个驱动程序: 若注册了多个数据库连接, 则调用 getConnection() 方法时传入的参数不同, 即返回不同的数据库连接。     *      * @throws Exception     */    @Test    public void testDriverManager() throws Exception {        // 1. 准备连接数据库的 4 个字符串.        // 驱动的全类名.        String driverClass = "com.mysql.jdbc.Driver";        // JDBC URL        String jdbcUrl = "jdbc:mysql:///mydatabase";        // user        String user = "root";        // password        String password = "root";        // 2. 加载数据库驱动程序(对应的 Driver 实现类中有注册驱动的静态代码块.)        Class.forName(driverClass);        // 3. 通过 DriverManager 的 getConnection() 方法获取数据库连接.        Connection connection = DriverManager.getConnection(jdbcUrl, user,                password);        System.out.println(connection);    }    // //////////////////////////////////////////////////////////////////    /**     * Driver 是一个接口: 数据库厂商必须提供实现的接口. 能从其中获取数据库连接. 可以通过 Driver 的实现类对象获取数据库连接.     *      * 1. 加入 mysql 驱动 1). 解压 mysql-connector-java-5.1.7.zip 2). 在当前项目下新建 lib 目录     * 3). 把 mysql-connector-java-5.1.7-bin.jar 复制到 lib 目录下 4). 右键 build-path ,     * add to buildpath 加入到类路径下.s     *      * @throws SQLException     */    @Test    public void testDriver() throws SQLException {        // 1. 创建一个 Driver 实现类的对象        Driver driver = new com.mysql.jdbc.Driver();        // 2. 准备连接数据库的基本信息: url, user, password        String url = "jdbc:mysql://localhost:3306/mydatabase";        Properties info = new Properties();        info.put("user", "root");        info.put("password", "root");        // 3. 调用 Driver 接口的 connect(url, info) 获取数据库连接        Connection connection = driver.connect(url, info);        System.out.println(connection);    }    // //////////////////////////////////////////////////////////////////    @Test    public void testGetConnection() throws Exception {        System.out.println(getConnection());    }    /**     * 编写一个通用的方法, 在不修改源程序的情况下, 可以获取任何数据库的连接 解决方案: 把数据库驱动 Driver     * 实现类的全类名、url、user、password 放入一个 配置文件中, 通过修改配置文件的方式实现和具体的数据库解耦.     *      * @throws Exception     */    public Connection getConnection() throws Exception {        String driverClass = null;        String jdbcUrl = null;        String user = null;        String password = null;        // 读取类路径下的 jdbc.properties 文件        InputStream in = getClass().getClassLoader().getResourceAsStream(                "jdbc.properties");        Properties properties = new Properties();        properties.load(in);        driverClass = properties.getProperty("driver");        jdbcUrl = properties.getProperty("jdbcUrl");        user = properties.getProperty("user");        password = properties.getProperty("password");        // 通过反射常见 Driver 对象.        Driver driver = (Driver) Class.forName(driverClass).newInstance();        Properties info = new Properties();        info.put("user", user);        info.put("password", password);        // 通过 Driver 的 connect 方法获取数据库连接.        Connection connection = driver.connect(jdbcUrl, info);        return connection;    }}

createStatement,execute
创建customer表
这里写图片描述

JDBCTools

package com.godinsec;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;/** * 操作 JDBC 的工具类. 其中封装了一些工具方法 Version 1 */public class JDBCTools {    public static void release(ResultSet rs,             Statement statement, Connection conn) {        if(rs != null){            try {                rs.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if (statement != null) {            try {                statement.close();            } catch (Exception e2) {                e2.printStackTrace();            }        }        if (conn != null) {            try {                conn.close();            } catch (Exception e2) {                e2.printStackTrace();            }        }    }    /**     * 关闭 Statement 和 Connection     * @param statement     * @param conn     */    public static void release(Statement statement, Connection conn) {        if (statement != null) {            try {                statement.close();            } catch (Exception e2) {                e2.printStackTrace();            }        }        if (conn != null) {            try {                conn.close();            } catch (Exception e2) {                e2.printStackTrace();            }        }    }    /**     * 1. 获取连接的方法. 通过读取配置文件从数据库服务器获取一个连接.     *      * @return     * @throws Exception     */    public static Connection getConnection() throws Exception {        // 1. 准备连接数据库的 4 个字符串.        // 1). 创建 Properties 对象        Properties properties = new Properties();        // 2). 获取 jdbc.properties 对应的输入流        InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream(                "jdbc.properties");        // 3). 加载 2) 对应的输入流        properties.load(in);        // 4). 具体决定 user, password 等4 个字符串.        String user = properties.getProperty("user");        String password = properties.getProperty("password");        String jdbcUrl = properties.getProperty("jdbcUrl");        String driver = properties.getProperty("driver");        // 2. 加载数据库驱动程序(对应的 Driver 实现类中有注册驱动的静态代码块.)        Class.forName(driver);        // 3. 通过 DriverManager 的 getConnection() 方法获取数据库连接.        return DriverManager.getConnection(jdbcUrl, user, password);    }}

JDBCTest

package com.godinsec;import java.io.InputStream;import java.sql.Connection;import java.sql.Date;import java.sql.Driver;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import java.util.Properties;import org.junit.Test;public class JDBCTest {    public <T> List<T> query(Class<T> clazz, String sql) {        return null;    }    /**     * ResultSet: 结果集. 封装了使用 JDBC 进行查询的结果. 1. 调用 Statement 对象的 executeQuery(sql)     * 可以得到结果集. 2. ResultSet 返回的实际上就是一张数据表. 有一个指针指向数据表的第一样的前面. 可以调用 next()     * 方法检测下一行是否有效. 若有效该方法返回 true, 且指针下移. 相当于 Iterator 对象的 hasNext() 和 next()     * 方法的结合体 3. 当指针对位到一行时, 可以通过调用 getXxx(index) 或 getXxx(columnName) 获取每一列的值.     * 例如: getInt(1), getString("name") 4. ResultSet 当然也需要进行关闭.     */    @Test    public void testResultSet() {        // 获取 id=4 的 customers 数据表的记录, 并打印        Connection conn = null;        Statement statement = null;        ResultSet rs = null;        try {            // 1. 获取 Connection            conn = JDBCTools.getConnection();            System.out.println(conn);            // 2. 获取 Statement            statement = conn.createStatement();            System.out.println(statement);            // 3. 准备 SQL            String sql = "SELECT id, name, address, phone " + "FROM customer";            // 4. 执行查询, 得到 ResultSet            rs = statement.executeQuery(sql);            System.out.println(rs);            // 5. 处理 ResultSet            while (rs.next()) {                int id = rs.getInt(1);                String name = rs.getString("name");                String email = rs.getString(3);                String birth = rs.getString(4);                System.out.println(id);                System.out.println(name);                System.out.println(email);                System.out.println(birth);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            // 6. 关闭数据库资源.            JDBCTools.release(rs, statement, conn);        }    }    @Test    public void testUpdateStatement() throws Exception {        String sql = "update customer set name='sss' where id = '3'";        update(sql);    }    /**     * mysql> UPDATE runoob_tbl -> SET runoob_title='Learning JAVA' -> WHERE     * runoob_id=3;     *      * 通用的更新的方法: 包括 INSERT、UPDATE、DELETE 版本 1. insert into customer     * values(3,'xiaofang','henan',356)     */    public void update(String sql) {        Connection conn = null;        Statement statement = null;        try {            conn = JDBCTools.getConnection();            statement = conn.createStatement();            statement.executeUpdate(sql);        } catch (Exception e) {            e.printStackTrace();        } finally {            JDBCTools.release(statement, conn);        }    }    /**     * 通过 JDBC 向指定的数据表中插入一条记录.     *      * 1. Statement: 用于执行 SQL 语句的对象 1). 通过 Connection 的 createStatement() 方法来获取     * 2). 通过 executeUpdate(sql) 可以执行 SQL 语句. 3). 传入的 SQL 可以是 INSRET, UPDATE 或     * DELETE. 但不能是 SELECT     *      * 2. Connection、Statement 都是应用程序和数据库服务器的连接资源. 使用后一定要关闭. 需要在 finally 中关闭     * Connection 和 Statement 对象.     *      * 3. 关闭的顺序是: 先关闭后获取的. 即先关闭 Statement 后关闭 Connection     */    @Test    public void testInsertStatement() throws Exception {        // 1. 获取数据库连接        Connection conn = null;        Statement statement = null;        try {            conn = JDBCTools.getConnection();            // 3. 准备插入的 SQL 语句            String sql = "insert into customer values(3,'xiaofang','henan',356)";            System.out.println(sql);            // 1). 获取操作 SQL 语句的 Statement 对象:            // 调用 Connection 的 createStatement() 方法来获取            statement = conn.createStatement();            // 2). 调用 Statement 对象的 executeUpdate(sql) 执行 SQL 语句进行插入            statement.executeUpdate(sql);        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                // 5. 关闭 Statement 对象.                if (statement != null)                    statement.close();            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            } finally {                // 2. 关闭连接                if (conn != null)                    conn.close();            }        }    }}

看看插入结果:
这里写图片描述

看看修改的结果:
这里写图片描述

看看查询的结果:

3ssshenan356
0 0