JDBC的使用方法及注意事项


加载不同数据库厂商提供的驱动


查询来说
(1)铺路(获取连接Connection)
(2)下圣旨(sql命令)
(3)找一个小太监帮皇上执行圣旨(Statement/PreparedStatement)
(4)拉回西瓜(返回结果集ResultSet)
(5)关闭城门(释放资源)


Class.forname("")  后加载  —》JVM   反射

Student s=new Student();  先加载
JVM-》Student


为什么需要JDBC
JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力


JDBC的工作原理
JDBC API
    提供者:Sun公司
    内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
        DriverManager类
        Connection接口
        Statement接口
        ResultSet接口
DriverManager
    提供者:Sun公司
    作用:管理各种不同的JDBC驱动
JDBC 驱动
    提供者:数据库厂商
    作用:负责连接各种不同的数据库


JDBC API主要功能:与数据库建立连接、执行SQL 语句、处理结果
    DriverManager :依据数据库的不同,管理JDBC驱动
    Connection :负责连接数据库并担任传送数据的任务  
    Statement :由 Connection 产生、负责执行SQL语句
    ResultSet:负责保存Statement执行后所产生的查询结果


JDBC编程模板
try {
      Class.forName(JDBC驱动类);

… …
try {
      Connection con=DriverManager.getConnection(URL,数据库用户名,密码);
      
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM table1;");
    
      while (rs.next()) {
             int x = rs.getInt("a");
             String s = rs.getString("b");
             float f = rs.getFloat("c");
      }
      rs.close();
      stmt.close();   
      con.close();
}
… …


JDBC驱动 
JDBC驱动由数据库厂商提供
    在个人开发与测试中,可以使用JDBC-ODBC桥连方式
    在生产型开发中,推荐使用纯Java驱动方式

使用JDBC-ODBC桥方式连接数据库
    将对JDBC API的调用,转换为对另一组数据库连接API的调用
    优点:可以访问所有ODBC可以访问的数据库
    缺点:执行效率低、功能不够强大
… …
Connection conn = null;
try {
    Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
    … …
}
try {
    conn = DriverManager.getConnection("jdbc:odbc:myDB", 
          "root", "root" );
           //省略代码 … …
} catch (SQLException e) {            
     … …
} finally {
    try {
        conn.close();        
    } catch (SQLException e) {                
         … …
    }
}

使用纯Java方式连接数据库 
    由JDBC驱动直接访问数据库
    优点:完全Java代码,快速、跨平台
    缺点:访问不同的数据库需要下载专用的JDBC驱动
… …
Connection conn = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
    … …
}
try {
    conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/epet","epetadmin", "0000");    
       //省略代码 … …
} catch (SQLException e) {
     … …
} finally {
    try {
        conn.close();
    } catch (SQLException e) {
         … …
    }}


Statement常用方法
ResultSet executeQuery(String sql)            执行SQL查询并获取到ResultSet对象
int executeUpdate(String sql)                可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数
boolean execute(String sql)                 可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet

ResultSet常用方法
boolean next()                    将游标从当前位置向下移动一行
boolean previous()                游标从当前位置向上移动一行
void close()                    关闭ResultSet 对象
int getInt(int colIndex)            以int形式获取结果集当前行指定列号值
int getInt(String colLabel)            以int形式获取结果集当前行指定列名值
float getFloat(int colIndex)            以float形式获取结果集当前行指定列号值
float getFloat(String colLabel)            以float形式获取结果集当前行指定列名值
String getString(int colIndex)            以String 形式获取结果集当前行指定列号值
String getString(String colLabel)        以String形式获取结果集当前行指定列名值


为什么要使用PreparedStatement
提高了安全性
提高了代码的可读性和可维护性 
提高了SQL语句执行的性能 

使用PreparedStatement 接口
    继承自 Statement接口
    比Statement对象使用起来更加灵活,更有效率 


使用PreparedStatement更新宠物 
Connection conn = null;
PreparedStatement pstmt = null;

// 建立连接
… …
// 更新狗狗信息到数据库
String sql="update dog set health=?,love=? where id=?";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, 80);
pstmt.setInt(2, 15);
pstmt.setInt(3, 1);

pstmt.executeUpdate();
… …
pstmt.close();
conn.close();

猜你喜欢

转载自blog.csdn.net/a814163435/article/details/82892185