JDBC访问数据库四步骤详解

5 篇文章 0 订阅
4 篇文章 0 订阅

JDBC数据可的访问步骤

//1. 加载驱动程序 com.mysql.cj.jdbc.Driver 版本:8.0
Class.forName("JDBCDriverClass的完全限定名");//反射机制
  
//2.建立连接 使用DriverManager类的静态方法getConnection
Connection connection = DirverManager.getConnection(databaseUrl);
  
//3.创建语句
Statement statement = connection.createStatement();
  
//4.执行语句
statement.excute("SQL语句");//增删改操作
ResultSet resultSet = statement.execuQuery("SLQ语句");///查询操作
  
//5.处理ResultSet:遍历ResultSet的每条记录
while(resultSet.next()) resultSet.getString(n)
  1. JDBC数据库驱动
数据库驱动程序JDBCDriverClass的完全限定名来源classpath(数据库连接字符串,类似URL,每个数据库实例都有唯一的URL)
Access(桌面数据库:在同一台机器上)sun.jdbc.odbc.JdbcOdbcDriver已在JDK中jdbc:odbc:dataSource
MySQLcom.mysql.jdbc.Drivermysql-connector-java-5.1.26.jarjdbc:mysql://hostname:port/dbname
MySQLcom.mysql.cj.jdbc.Drivermysql-connector-java-8.0.15.jarjdbc:mysql://localhost:3306/javacourse?serverTimezone=GMT
ORACLEoracle.jdbc.driver.OracleDriverojdbc6.jarjdbc:oracle:thin://@hostname:port#oracleDBSID
  1. 加载JDBC驱动

    //使用反射方式加载:将驱动程序加载到JVM中,将该类导入到JVM中,目的不是得到该类的实例方法
    Class.forName(" com.mysql.jdbc.Driver ");
    
  2. 连接数据库,获取连接对象

    //方法原型
    static Connection getConnection
    (String url, String user, String password) throws SQLException
    //方法实例
    String url= "jdbc:mysql://localhost:3306/javacourse”;
    Connection con = DriverManager.getConnection(url, "root", "root");
    
  3. 创建语句对象

    //方法原型
    Statement createStatement() throws SQLException
    //方法实例
    Statement sta = con.createStatement();
    
  4. 执行SQL语句

    • 执行DELETE、UPDATE、INSERT之类的数据库操作语句 D M L \color{#F00}DML DML,该类语句无返回结果,使用statement对象的executeUpdate方法执行。

    • 由于参数是SQL语句字符串,因此如果SQL语句语法错误,Java编译器是无法检测出来的。(特别是SQL语句里的引号)

      int executeUpdate(String sql) throws SQLException
      /*参数sql是要执行的SQL语句(字符串),执行成功返回受影响的行数,执行失败则抛出SQLException异常,必须捕捉*/
          
      sta.executeUpdate("INSERT INTO Friends VALUES('田七', '重庆',  456712, '2003-2-25', 7500)");
      
    • 执行SELECT数据查询语句 ( D Q L ) \color{#F00}(DQL) (DQL),从数据库中获取所需数据,使用statement的executeQuery方法执行;

      ResultSet executeQuery(String sql) throws SQLException
      /*参数sql是要执行的SQL语句,查询成功返回包含有结果数据的ResultSet对象,否则抛出SQLException异常,必须捕捉*/
          
      ResultSet rs = sta.executeQuery("SELECT * FROM Friend");
      //注意会返回ResultSet对象
      
  5. 遍历ResultSet

    使用executeQuery方法执行SELECT语句,从返回的ResultSet中获取对象,常使用的方法

    方法原型            说明
    boolean next()throws SQLException** 结 果 集 游 标 \color{#F00}结果集游标 往下移动一行,这时ResultSet引用指向的就是当前游标(遍历到的当前记录)。如果已经到达结果集最后,将会返回false,有可能抛异常,必须捕捉
    X getX(String columnName) throws SQLException获得当前记录某个字段的值,X是指具体的数据类型,视数据库表中字段的具体情况而定,并且每个数据类型都有两种重载方法,一种是以字段名称为参数,另一种是以字段索引为参数 ( 字 段 索 引 从 1 开 始 ) \color{red}(字段索引从1开始) 1,有可能抛异常,必须捕捉
    X getX(int columnIndex) throws SQLException
    ResultSet rs = statement.executeQuery("SELECT * FROM Friend"););
    while(rs.next()){ //取得一行记录,放在rs里
    	rs.getString(“col_name”);   //如果字段数据类型是字符串,getString
    	rs.getInt(“col_name”); //如果字段数据类型是整数,getInt
       rs.getDouble(col_index); //如果字段数据类型是浮点数,getDouble
        rs,getDate("HireDate");
    	//…
        //类型是数据库中的数据类型,非java中数据类型
    }
    

    完整示例代码

package Unit32.DataBase;
import java.sql.*;

/**
 * @program: JAVAStudy
 * @description:
 * @author: Felix
 * @create: 2020-04-03 21:16
 **/
public class SampleTest {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/javacourse?serverTimezone=GMT";
        Connection conn = null;
        String root = "root";
        String pwd = "jmm123";
        System.out.println("正在连接数据库...");
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("Driver loaded");
            conn = DriverManager.getConnection(url, root, pwd);
            if(conn != null){
                System.out.println("数据库连接成功");
            }
            Statement sta = conn.createStatement();
            ResultSet rs = sta.executeQuery("select * from student s");
            System.out.println();
            System.out.println("===================================");
            System.out.println("查询到的数据如下:");
            while(rs.next()){
                String ssn = rs.getString("ssn");
                String firstName = rs.getString("firstName");
                String mi = rs.getString("mi");
                String lastName = rs.getString("lastName");
                Date birthDate = rs.getDate("birthDate");
                String street = rs.getString("street");
                String phone = rs.getString("phone");
                String zipCode = rs.getString("zipCode");
                String deptID = rs.getString("deptId");
                //ssn,firstName,mi,lastName,birthDate,street,phone,zipCode,deptID
                Student stud = new Student(ssn,firstName,mi, lastName, street, phone, zipCode, deptID, birthDate);
                System.out.println(stud);
       }
            conn.close();
            sta.close();
            rs.close();
        } catch (ClassNotFoundException e) {
            System.out.println("数据库驱动加载错误,"+e.toString());
        } catch (SQLException e) {
            System.out.println("数据库连接错误,"+e.toString());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值