JDBC1

作者: 老茂在北京 | 来源:发表于2017-04-01 12:39 被阅读14次

JDBC介绍

java data base connectivity, java数据库连接
java通过该标准去操作MySQL, Oracle等数据库

用到的包
java.sql; javax.sql 
类:DriverManager 注册驱动
接口:Connection 获取连接
     Statement
     ResultSet
     PreparedStatement
     CallableStatement
     DateSource  (javax.sql)

入门代码

前提创建一个数据库

create table user(
  id int primary key auto_increment,
  username varchar(20) unique not null;
  password varchar(20) not null;
  emai varchar(40) not null;
);
insert into user values (null, 'tom', '123', 'tom@163.com');
insert into user values(null, 'fox', '123', 'fox@163.com');
// 驱动需要下载,jar包,将其导入到环境路径中
import java.sql.DriverManager; // 驱动管理,注册驱动
import com.mysql.jdbc.Driver; //此驱动是mysql提供
import java.sql.Connection;
import java.sql.ResultSet;
public class jdbcDemo1{
    public static void main(String[] arg){
        //注册驱动,还有另一种方式Class.forName("com.jdbc.mysql.Driver");
       DriverManager.registerDriver(new Driver()); //此处有异常,抛出

       //获取连接对象
       Connection con = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/day17", "root", "abc");

       //通过连接对象获取操作sql语句的Statement
      Statement st = con.createStatement();

       //操作sql语句
       String sql = "select * from user";
       ResultSet rs = st.excuteQuery(sql); //返回结果集

       //遍历结果集,可以记住
       while(rs.next){
             int id = rs.getInt("id");
             String username =  rs.getString("username");
             String password = rs.getString("password");
             String email = rs.getString("email");
            
             System.out.println(id+"  "+ username+password+email);
       }

       //释放资源,关闭数据库
       //java与数据库连接,必须释放资源
       rs.close();
       st.close();
       con.close();
  }
}

DriveManager详解

注册驱动:

//DriverManager类是管理一组JDBC驱动程序的基本服务
//底层是vector容器,可以装入很多数据库驱动

//第一种方式,这种方式,根据源码可知,DriverManager中会产生两个Driver
DriverManager.registerDriver(new Driver());
//第二种方式,反射机制。推荐使用
//降低耦合,不依赖于驱动
Class.forName("com.mysql.jdbc.Driver");//注册MySQL驱动
Class.forName("oracle.jdbc.driver.OracleDriver");//注册oracle驱动

//通过DriverManager获取连接对象
Connection con = DriverManager.getConnection(String url, String user; String password); //url确定使用哪一个驱动

关于URL

url格式:
主协议 自协议 主机 端口 数据库
jdbc : mysql ://localhost:3306/day17

mysql url: jdbc:mysql://localhost:3306/数据库名
mysql 简写 url: jdbc:mysql:///day17   (本地的,且端口号3306)
oracle url: jdbc:oracle:thin:@localhost:1521:sid
在url后面可以带参数:
        useUnicode=true&characterEncoding=UTF-8

Connection详解 java.sql.Connection;

代表连接对象,数据库与程序的连接
作用:

  • 通过Connection获得操作sql的Statement对象
    • Statement st = con.createStatement();
    • 获取执行预处理的PraparedStatement对象
    • 获取存储过程的CallableStatement对象
  • 操作事务
    • setAutoCommit(boolean flag) 开启事务
    • rollback() 事务回滚
    • commit() 事务提交
//通过DriverManager获取连接对象
Connection con = DriverManager.getConnection(String url, String user; String password); //url确定使用哪一个驱动
Statement st = con.createStatement();

Statement详解 java.sql.Statement;

作用:

  • 执行sql语句

    • DML:insert update delete 插入 修改 删除
      • 使用方法 int executeUpdate(String sql)
    • DQL: select 查询
      • 使用方法 ResultSet executeQuery(String
        sql)

        excute(String sql) 执行任意sql语句,少用
        
  • 批处理操作

    • addBatch(String sql); 将sql添加到批处理
    • executeBatch(); 批量处理
    • clearBatch(); 清空批处理
//执行update语句
int row = st.executeUpdate("update user set password='135'");
System.out.println(row);//=2;里面有两条记录,两个记录的password改了
//根据返回值,判断修改是否成功

ResultSet详解 java.sql.ResultSet

封装select语句执行后的结果集(表)
初始的时候,游标在第一行之前,调用ResultSet.next()方法,使游标指向具体的行

 ResultSet rs = st.excuteQuery("select * from user"); //返回结果集

//获取任意类型的数据
rs.getObject(int index);
rs.getObject(String columnName);

//获取指定类型的数据
rs.getString(int index);
rs.getString(String columnName);
rs.getInt(String columnName); //等等

//遍历
while(rs.next()){
  ...
}
//部分函数
rs.next() ;// 移动到下一行
rs.previous(); //移动到前一行
rs.absolute(int row); //移动到指定行
rs.beforeFirst(); //移动到最前面
rs.afterLast(); //移动到最后面
rs.updateRow(); //更新行数据

释放资源

通常需要关闭的对象:

  • ResultSet
  • Statement
  • Connection(务必注意)

包含异常处理的入门代码

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;

//对异常进行try-catch

public class jdbcDemo4 {
public static void main(String[] args) {
    Connection con = null;
    Statement st = null;
    ResultSet rs = null;
    //注册驱动
    try {
        DriverManager.registerDriver(new Driver());
        //获取连接
        con = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/day17","root","123");
        //获取sql的Statement
        st = con.createStatement();
        //执行
        rs = st.executeQuery("select * from user");
        //遍历
        while(rs.next()){
            int id = rs.getInt("id");
            String username = rs.getString("username");
            String password = rs.getString("password");
            String email = rs.getString("email");
            
            System.out.println(id+"  "+ username+"  "+password+"  "+email);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally{
        //释放资源
        if(rs!= null){
        try {
            rs.close();
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        }
        try {
            if(st != null)
                st.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(con != null)
                con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
}

相关文章

  • JDBC1

    一、JDBC是什么?Java DataBase ConnectivityJDBC和数据驱动的关系:规范和实现的关系...

  • JDBC1

    JDBC介绍 java data base connectivity, java数据库连接java通过该标准去操作...

网友评论

      本文标题:JDBC1

      本文链接:https://www.haomeiwen.com/subject/kbnrottx.html