您现在的位置是:网站首页>javajava

完整JDBC的使用和步骤

deling2019年5月26日java513人已围观

简介完整JDBC的使用和步骤

jdbc的使用及步骤

需求:mysql基础、java知识

加载JDBC驱动程序:

在连接数据库之前,首先要加载想连接的数据库的驱动到jvm虚拟机中。我们可以通过java.lang.Class类中的静态方法forName(String className)实现,成功加载完后,会将Driver类的实例注册到DriverManager类中

try{    
       Class.forName("com.mysql.jdbc.Driver");     
    }catch(ClassNotFoundException e){    
        System.out.println("找不到mysql驱动程序");
    }
提供JDBC连接的URL

连接URL定义了连接数据库时的协议、子协议、数据源标记

分别是:协议:子协议:数据源标识

协议:就是以jdbc开头,

子协议:数据库管理系统 名称

数据源标识:标记找到数据库来源的地址与连接端口

例如:Mysql的连接URL

String url = "jdbc:mysql://数据库名字?useUnicode=true&characterEncoding=utf8"; 
// useUnicode=true  :设置Unicode字符集 
//characterEncoding=utf8:字符编码格式,注意:这个是有必要的,因为在你插入数据时,保证在数据库中不会乱码
创建数据库的连接

要连接数据库,需要java.sql.DriverManager中请求并获得Connection对象,该对象就代表一个数据库的连接。

使用DriverManager的getConnection(String url,String usename,String password)方法传入指定的预先要连接的数据库的路径,数据库的名字,数据库的密码来获得。

例如:

// URL连接
 String url = "jdbc:mysql://数据库名字"; 
//数据库名字 
 String usename ="root"; 
 // 数据库密码 
 String password="123456"; 
try{
    Connection conn = DriverManager.getConnection(url,usename,password);
}catch(SQLException e){
     e.printStackTrace();
}
SQL查询,创建一个Statement

要执行SQL语句,必须获得java.sql.Statement实例,而Statement可以分为三种类型

  • Statement: 执行静态的SQL语句,通常通过Statement实例实现,不带参数列表

Statement stmt = conn.createStatement();
  • PreparedStatement:执行动态的SQL语句,通常通过PreparedStatement实例实现 ,一般建议使用这个,因为这个不会出现SQL注入

PreparedStatement ps  = conn.prepareStatement(sql);
  • CallableStatement :执行数据库存储过程,通常通过CallableStatement实例实现;

CallableStatement cstmt = conn.preparedCall("{CALL demoSp(? , ?)}");       // 存储过程:{call  存储过程名(参数列表)}
存储过程:(无返回值,用out参数替代)
{ call 存储过程名(参数列表)}

存储函数(有返回值):


{?=call  存储函数名(参数列表)}
执行SQL语句

Statement的三种方法:

  • executeQuery(String sqlString):执行查询数据的的SQL语句,返回一个java.sql.ResultSet结果集对象

  • execute(String sqlString):用于执行返回多个结果集、多个更新计数或者二者结果的语句

  • executeUpdate(String sqlString):用于执行INSERT、UPDATE或者DELETE语句以及SQL DDL语句,例如:CREATE TABLE,DROP TABLe等

例如: 

ResultSet rs = stmt.executeQuery("select * from...");

int r =  stmt .executeUpdate("insert into 表名 values()");

boolean flag = execute(String sqlString);

处理结果

两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){   
           System.out.println("id: " + resultSet.getInt(1) + " |" + "name: " + resultSet.getString(2) + " |" + "age: " + resultSet.getInt(3) + "|");
     } 
     
    (列是从左到右编号的,并且从列1开始)

关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象

// 关闭记录集   
   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{   
        conn.close() ;   
     }catch(SQLException e){   
        e.printStackTrace() ;   
     }   
      }

最后来一个查询例子:

import java.sql.DriverManager;
import java.sql.Driver;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Demo {   
public static void main(String[] args) {
        try {
            //装载 mysql 驱动包            
            Class.forName("com.mysql.jdbc.Driver");
            // url
            String url = "jdbc:mysql://localhost:3306/t2?useUnicode=true&characterEncoding=utf8";
            // username
            String username = "root";
            //password
            String password = "123456";
            // SQL语句
            String sql = "select * from t2";
            //  连接mysql,需要用java.sql.DriverManager中的getConnection方法来请求并且获得Connection对象   
              Connection conn = DriverManager.getConnection(url, username, password);
            // 执行SQL语句,需要java.sql.Statement实例
            PreparedStatement ps = conn.prepareStatement(sql);
            // 执行查询SQL语句,返回一个ResultSet结果集对象
            ResultSet resultSet = ps.executeQuery();
            // 使用结果集对象的访问方法获取数据        
             while (resultSet.next()) {          
                 System.out.println("id: " + resultSet.getInt(1) + " |" + "name: " + resultSet.getString(2) + " |" + "age: " + resultSet.getInt(3) + "|");
            }
            // 关闭记录集            
            if (resultSet != null) {
                resultSet.close();
            }
            // 关闭声明            
            if (ps != null) {
                ps.close();
            }
            // 关闭连接对象            
            if (conn != null) {
                conn.close();
            }
        } catch (ClassNotFoundException e) {           
            System.out.println("mysql驱动不存在!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}


Tags: java

很赞哦! (6)

上一篇:java多线程

下一篇:java的环境配置

留言

来说点儿什么吧...

您的姓名: *

选择头像: *

留言内容:

    2019年2月25日 13:35嘿嘿

    2019年2月26日 13:20ok

    可以可以!

    2019年3月18日 09:2311

    1

    2019年3月28日 09:24www.ikeguang.com

    可以可以

    2019年5月29日 18:47qwe

    666

    2019年5月30日 16:52BlankYk

    he,tui~

    2019年5月30日 17:04123

    321

    2019年6月26日 10:02周树人

    厉害厉害

    2019年6月26日 10:34sdlakrj

    sdaag

    2019年6月29日 15:31sdagafdbaf

    dgafdgdfh

    站长回复:你这是什么什么高级语言,我表示看不懂哈哈

    2019年7月6日 16:37啦啦

    写的真好!谢谢博主

    站长回复:谢谢!

    2019年8月14日 12:35傻傻

    厉害 小林

    2019年9月11日 20:05sdfw

    fgbhjksdgjdfhag

    2019年9月11日 22:18baba

    keke tui

    2019年11月5日 20:09666

    666