JDBC操作数据库的基本步骤:

JDBC操作数据库的基本步骤:

    1)加载(注册)数据库驱动(到JVM)。

    2)建立(获取)数据库连接。

    3)创建(获取)数据库操作对象。

    4)定义操作的SQL语句。

    5)执行数据库操作。

    6)获取并操作结果集。

   7)关闭对象,回收数据库资源(关闭结果集-->关闭数据库操作对象-->关闭连接)。

package com.yangshengjie.jdbc;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
public class JDBCTest {  
    /** 
     * 使用JDBC连接并操作mysql数据库 
     */  
    public static void main(String[] args) {  
        // 数据库驱动类名的字符串  
        String driver = "com.mysql.jdbc.Driver";  
        // 数据库连接串  
        String url = "jdbc:mysql://127.0.0.1:3306/jdbctest";  
        // 用户名  
        String username = "root";  
        // 密码  
        String password = "mysqladmin";  
        Connection conn = null;  
        Statement stmt = null;  
        ResultSet rs = null;  
        try {  
            // 1、加载数据库驱动( 成功加载后,会将Driver类的实例注册到DriverManager类中)  
            Class.forName(driver );  
            // 2、获取数据库连接  
            conn = DriverManager.getConnection(url, username, password);  
            // 3、获取数据库操作对象  
            stmt = conn.createStatement();  
            // 4、定义操作的SQL语句  
            String sql = "select * from user where id = 100";  
            // 5、执行数据库操作  
            rs = stmt.executeQuery(sql);  
            // 6、获取并操作结果集  
            while (rs.next()) {  
                System.out.println(rs.getInt("id"));  
                System.out.println(rs.getString("name"));  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            // 7、关闭对象,回收数据库资源  
            if (rs != null) { //关闭结果集对象  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (stmt != null) { // 关闭数据库操作对象  
                try {  
                    stmt.close();  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
            if (conn != null) { // 关闭数据库连接对象  
                try {  
                    if (!conn.isClosed()) {  
                        conn.close();  
                    }  
                } catch (SQLException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
} 

 提示:关闭外部资源的顺序应该和打开的顺序相反,也就是说先关闭ResultSet、再关闭Statement、在关闭Connection。上面的代码只关闭了Connection(连接),虽然通常情况下在关闭连接时,连接上创建的语句和打开的游标也会关闭,但不能保证总是如此,因此应该按照刚才说的顺序分别关闭。此外,第一步加载驱动在JDBC 4.0中是可以省略的(自动从类路径中加载驱动),但是我们建议保留。

常见面试题:

1.Statement和PreparedStatement有什么区别?哪个性能更好?
答:与Statement相比,①PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的安全性(减少SQL注射攻击的可能性);②PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全;③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。

为了提供对存储过程的调用,JDBC API中还提供了CallableStatement接口。存储过程(Stored Procedure)是数据库中一组为了完成特定功能的SQL语句的集合,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。虽然调用存储过程会在网络开销、安全性、性能上获得很多好处,但是存在如果底层数据库发生迁移时就会有很多麻烦,因为每种数据库的存储过程在书写上存在不少的差别。

 

2.使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
答:要提升读取数据的性能,可以指定通过结果集(ResultSet)对象的setFetchSize()方法指定每次抓取的记录数(典型的空间换时间策略);要提升更新数据的性能可以使用PreparedStatement语句构建批处理,将若干SQL语句置于一个批处理中执行。

 

posted @ 2018-05-23 13:30  后知、后觉  阅读(14959)  评论(0编辑  收藏  举报