JDBC简介

1 JDBC介绍

        JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL 数据库存取和操作的公共接 (一组 API ),定义了用来访问数据库的标准 Java 类库( java.sql,javax.sql )使用这些类库可以以一种 标准的方法、方便地访问数据库资源,具体的数据库厂商针对JDBC实现其数据库的具体实现类,我们则只需要调用接口方法即可。
        JDBC程序编写步骤:
                1.导包、加载注册驱动(JDBC 3 后不需注册驱动,因为在加载驱动类时,有一段静态代码块被执行,里面进行了驱动的注册)
                2.创建Connection对象
                3.创建Statement对象
                4.执行sql语句
                5.关闭Statement对象
                6.关闭 Connection对象

2 获取数据库连接

        获取数据库三要素:
                1.Driver接口实现类
                2.url
                3.用户名和密码
@Test 
public void testConnection() throws Exception { 
    //1.加载配置文件 
    InputStream is =     
              ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); 
    Properties pros = new Properties(); pros.load(is); 
    //2.读取配置信息 
    String user = pros.getProperty("user"); 
    String password = pros.getProperty("password"); 
    String url = pros.getProperty("url"); 
    String driverClass = pros.getProperty("driverClass"); 
    //3.加载驱动 
    Class.forName(driverClass);    
    //4.获取连接 Connection conn = DriverManager.getConnection(url,user,password);         
    System.out.println(conn); 
}
其中,配置文件声明在工程的 src 目录下:【 jdbc.properties

3 Statement VS PreparedStatement

        使用Statement 操作数据表存在的弊端:
                1.存在拼串操作,繁琐
                2.存在SQL注入问题 
          PreparedStatement的优势:
                1.预编译sql,提高执行效率
                2.防止sql注入
                3.可以操作BLOB类型字段
                4.可以高效批量插入
操作BLOB类型字段
Connection conn = JDBCUtils.getConnection();
String sql = "update customers set photo = ? where id = ?"; 
PreparedStatement ps = conn.prepareStatement(sql);
// 填充占位符 
// 操作Blob类型的变量 
FileInputStream fis = new FileInputStream("coffee.png");
ps.setBlob(1, fis); 
ps.setInt(2, 25); 
ps.execute(); 
fis.close(); 
JDBCUtils.closeResource(conn, ps);

批量插入:

@Test 
public void testInsert() throws Exception{ 
    long start = System.currentTimeMillis(); 
    Connection conn = JDBCUtils.getConnection(); 
    //1.设置为不自动提交数据 
    conn.setAutoCommit(false); 
    String sql = "insert into goods(name)values(?)"; 
    PreparedStatement ps = conn.prepareStatement(sql); 
    for(int i = 1;i <= 1000000;i++){ 
        ps.setString(1, "name_" + i); 
        //1.“攒”sql 
        ps.addBatch();
        if(i % 500 == 0){ 
            //2.执行 
            ps.executeBatch(); 
            //3.清空 
            ps.clearBatch(); 
        } 
    }
    //2.提交数据 
    conn.commit(); 
    long end = System.currentTimeMillis(); 
    System.out.println("花费的时间为:" + (end - start));//1000000条:4978         
    JDBCUtils.closeResource(conn, ps); 
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值