JDBC

 

一:JDBC编程六步骤:

  1. 注册驱动

  2. 获取连接(表示JVM进程和数据库进程通道打开了,这属于进程之间的通信,重量级,使用完一定要关闭)

  3. 获取数据库操作对象(专门执行sql语句的对象)

  4. 执行SQL语句

  5. 处理查询结果集

  6. 释放资源(千万要记得开启后,一定要关闭)

 

二:注册驱动,获取连接,获取数据库操作对象:

注册驱动:有两种方式:

法1:

import java.sql.Dirver;
import java.sql.DirverManager;
import java.sql.SQLException;
​
Driver dirver=new com.mysql.jdbc.Driver();//多态,夫类型引用指向子类型的对象,这里的driver不是java当中的,而是mysql实现类包中的,所以需要写上包名来区分
DriverManager.registerDriver(dirver);//这是注册驱动的方法,必须要死记住,后面的dirver是mysql当中的方法类dirver,java.sql包中的dirver是一个接口,而不能直接new一个。

法2:十分常用

//类加载机制,当加载类的时候,静态代码块会执行
Class.forName("com.mysql.jdbc.Driver");
//为什么这种方法常用:因为括号里面是个字符串,字符串可以写到文件当中

注意:需要抛出异常,放在try,catch块当中

 

获取连接:getconnection,需要抛出异常

String url="jdbc:mysql://localhost:3306/hanxiao";//固定格式,localhost可以写成127.0.0.1,后面的hanxiao时数据库的名字,通信协议+Ip地址+服务器上的端口+服务器上某个资源名
String user="root";
String password="";
Connection conn=DirverManager.getConnection(url,user,passowrd);

 

获取数据库操作对象:获取statement对象:

//statement专门执行SQL语句的
Statement stmt=conn.createStatement();//create statement对象
//专门执行DML语句
String sql="insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
​
//返回值是“影响数据库中的记录条数”,只能进行
int count=stmt.executeUpdate(sql);

重点:只能进行增删改,若想进行查询操作,看接下来的笔记

 

释放资源:

//为了保证资源一定释放,在finally语句快中关闭
//并且遵循资源从小到大依次关闭
//分别对其try,catch
try{
    if(stmt!=null){
        stmt.close();
    }
}catch(SQLexception e){
    e.printStackTrace();
}
try{
    if(conn!=null){
        conn.close();
    }
}catch(SQLexception e){
    e.printStackTrace();
}

 

上述写成的代码:

package cc.bb.aa;
import java.sql.*;
​
​
public class TwoTest {
    public static void main(String[] args) {
        
        Connection conn = null;
        Statement stmt = null;
        
        try {
            //1.注册
            DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
            String url="jdbc:mysql://localhost:3306/hanxiao";
            String user="root";
            String password="";
            //2.获取连接
            conn=DriverManager.getConnection(url,user,password);
            
            //statement专门执行SQL语句的
            //3.获取数据库对象
            stmt=conn.createStatement();//create statement对象
//专门执行DML语句
            String sql="insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
​
            //返回值是“影响数据库中的记录条数”,只能执行增删该,不能进行查询数据
            int count=stmt.executeUpdate(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {//这里关闭数据,释放资源
            try{
                if(stmt!=null){
                    stmt.close();
                }
            }catch(SQLException e){
                e.printStackTrace();
            }
            try{
                if(conn!=null){
                    conn.close();
                }
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
}

 

 

三:处理查询结果集:

Connection conn=null;
Statement stmt=null;
ResultSet rs=null;//这是一个接口,到时候查询的对象就是rs,而且最后finally释放对象的时候,从下往上依次释放
try{
    //1.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取连接
  conn=DriverManager.getConnection("jdbc:mysql//localhost:3306/hanxiao","root","");
    //3.获取数据库操作对象
    stmt=conn.createStatement();
    //4.执行sql语句
    String sql="select empno,ename,sal from emp";
    //注意,这里变化了
    //int excuyeUpdate(insert/delete/update);//返回int
    //ResultSet excuteQuery(sql);//返回值是ResultSet
    rs=stmt.excuteQuery(sql);
    
    
    
    //处理查询结果集:这些都是可以是使用的
     //使用next方法来控制下标的位置,是按照行来的
    //使用getstring()方法来获取相对应的列
    //使用while方法来循环遍历
    while(rs.next()){
        String empno=rs.getString(1/empno);//1代表第一列
        String ename=rs.getString(2/ename);//2代表第二列
        String sal=rs.getString(3/sal);//3代表第二列
        
    }
}

 

原文地址:https://www.cnblogs.com/instead-everyone/p/13619883.html