JDBC入门的一些操作

Posted 神芝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC入门的一些操作相关的知识,希望对你有一定的参考价值。

一、

  jdbc的安装

  在mysql官网可以找到这个jar包,Downloads--->Community-->MySQL Connections -->Connector,不过一般网上找一大堆,如果用maven依赖就更简单了,在pom文件中添加依赖就行

二、

  jdbc中有2个接口,一个是Driver,一个是DriverManager,DriverManager是Driver的管理者,DriverManager支持多种数据库,包括MySQL,用户使用Class.forname(DriverName)可以向DriverManager注册,MySQL的DriverName是com.mysql.jdbc.Driver。

  1、Connection是程序指向数据库的链接通过 DriverManager.getConnection(db_url,user,password)获得

    db_url是jdbc:mysql://localhost/shen_db,shen_db是我的数据库名,user和password就是用户和密码了

  2、Statement是SQL容器,用于存放SQL语句,通过connection.createStatement()创建Statement,使用excuteQuery()或 excuteUpdata()执行SQL语句

  3、ResultSet是服务器执行完sql语句后返回的结果集。

    ResultSet有几个api

      next()光标指向下一行,第一次执行就是指向第一行

      previous()光标指向上一行

      absolute()指向某一行

      beforeFirst()指向第一行的前面

      afterLast()指向最后一行的后面

    指定某一行后指定某一列使用getObject(列名/index),可以直接指定列名,也可以指定序号,第一列的序号是0

  4、SQLException是操作数据库可能会抛出的异常,所以要捕获他

Class.forname(com.mysql.jdbc.Driver);
Connection conn=DriverManager.getConnection(DB_url,user,password);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.excuteQuery("SQL语句");
while(rs.next()){
rs.getString("");
}

在finally中,要把connection,Statement,ResultSet都close掉,在关闭之前要先判断是否存在再关闭,否则可能会抛异常

 

三、数据库连接池

  为什么需要使用连接池,是因为每次创建链接时间开销大,不断创建连接销毁连接用户响应慢,还有如果不使用连接池管理链接,在连接过多的时候可能会导致服务器宕机或者抛异常,连接池能起到限流保护服务器的作用

  DBCP连接池需要导入三个jar包,分别是commons-dbcp.jar,commons-pool.jar,commons-logging.jar,可以在Apache Commons下载

  1、创建连接池

    BasicDataSource ds=new BasicDataSource();

    ds.setUrl(x);

    ds.setDriverClassName(x);

    ds.setUsername(x);

    ds.setPassword(x);

    x参数跟设置jdbc的参数都是一样的

  2、获得链接

    Connection conn=ds.getConnection();

    Statement stmt =conn.createStatement();

    ResultSet rs=stmt.excuteQuery(SQL);

  3.关闭连接

    conn.close;//在jdbc中,close是断开连接,而在DBCP中,close方法被重写了,变成归还连接给连接池了,close仍然需要判断是否为空

  4、参数配置

    ds.setInitialSize();//预置连接,加快第一次访问速度

      .setMaxTotal();//设置最大连接数

      .setMaxWaitMillis();//设置最大等待时间超时就会抛出异常

      .setMaxIdel();//设置最大空闲连接,当空闲连接超出这个数就会销毁连接

      .setMinIdel();//设置最小空闲连接,当空闲连接不足这个数就会创建连接

      //一般最大空闲和最小空闲设置为相等,防止不断的创建销毁连接

  5、定期检查

    数据库为了释放空间等待资源,默认关闭等待时间过长的连接,MySQL默认时间是8小时,如果MySQL关闭了连接,但jdbc不知道,就会抛异常

    ds.setTestWhileIdle(true);//开启定期检查

    ds.setMinEvictableIdleTimeMillis();//如果连接空闲时间超过该时间,连接会被销毁,一般这个时间设置为比8小时稍短

    ds.setTimeBetweenEvictionRunsMillis();//检查间隔时间

 

四、

  1、游标

    一次性读取海量条数据库记录可能会造成jvm内存溢出,游标提供一种客户端读取部分服务端结果集的机制,比如一次性读2条记录,那么称FetchSize为2

    使用游标先在DB_URL的最后面加上useCursorFetch=true参数,开启游标,游标需要使用ParparedStatement,ParparedStatement

是Statement的子类

    ParparedStatement ptmt=conn.parparedStatement("SQL语句");

    ptmt.setFetchSize(10);//设置一次性读10条

    

  2、流方式

    读取大字段可能只读取一条记录内存就溢出了,所以可以采取流方式,以二进制流的方式分段读取大字段

    InputStream in= rs.getBinaryStream("x");

    File f=new File(FILE_URL);

    OutputStream out =new FileOutputStream(f);

    while((int temp=in.read())!=-1){

      out.write(temp);

    }

  3、批处理

  如果有大量的sql语句等待执行,这时候需要等待很久的时间,所以需要使用批处理方式

    statement.addBatch();//把sql打包放进一个Batch,Batch就是sql执行的一个单元

    statement.excuteBatch();//执行,插入/更新使用excuteUpdata()

    statement.clearBatch();//清空batch

  4、

    如果数据库字符集和应用程序字符集不同,在使用中文时就会产生乱码,在DB_URL加一个参数characterEncoding=utf8就可以了

以上是关于JDBC入门的一些操作的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate学习一:Hebinate入门以及一些小问题

MyBatis从入门到精通—MyBatis基础知识和快速入门

JDBC入门

Mybatis快速入门

Java oop第08章_JDBC01(入门)

Java学习:JDBC快速入门