码迷,mamicode.com
首页 > 数据库 > 详细

JDBC学习

时间:2015-12-22 06:41:16      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:jdbc

1 什么是JDBC

JDBCJava DataBase Connectivity)就是Java数据库连接,说白了就是操作数据库的Java语言。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

 

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

所以说你想连接什么数据库就得先导入该数据库的驱动

技术分享

下面是jdbc操作oracle数据库的代码.

查询时executeQuery(),有结果集resultSet.其余操作时executeUpdate(),返回的数字.

package testJdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestJdbc {
 public static void main(String[] args) {
  //先定义好三个对象
  Connection con=null;
  PreparedStatement pstmt=null;//防止sql注入,提高效率
  ResultSet rs=null;//执行查询需要结果集
  try {
   //加载oracle驱动
   Class.forName("oracle.jdbc.driver.OracleDriver");
   //oracle的url
   String url="jdbc:oracle:thin:@10.1.0.169:1521:orcl";
   //获得数据库连接
   con=DriverManager.getConnection(url, "CL", "123456");
   String sql="select producercode,producername from T_PRODUCER_INFO where telephone=?";
   pstmt=con.prepareStatement(sql);
   //设置参数,从1开始
   pstmt.setString(1, "110");
   rs=pstmt.executeQuery();
   while(rs.next()){
    //获取这一行的列数据.索引从1开始
    String code=rs.getString(1);
    String name=rs.getString(2);
    System.out.println("代码为"+code+"------"+"名称为"+name);
   } 
  } catch (Exception e) {
   throw new RuntimeException(e);
  }finally{
   //后使用的先关闭
   try {
    if(rs!=null){
     rs.close();
    }
    if(pstmt!=null){
     pstmt.close();
    }
    if(con!=null){
     con.close();
    }
   } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }
 
 }

技术分享

 

时间类型

l  领域对象(domain)中的所有属性不能出现java.sql包下的东西!即不能使用java.sql.Date

l  ResultSet#getDate()返回的是java.sql.Date()

PreparedStatement#setDate(int, Date),其中第二个参数也是java.sql.Date

 

时间类型的转换:

l  java.util.Date à java.sql.DateTimeTimestamp

  utilDate转换成毫秒值

  使用毫秒值创建sqlDateTimeTimestamp

l  java.sql.DateTimeTimestamp à java.util.Date

  这一步不需要处理了:因为java.sql.Datejava.util.Date的子类

 

 

java.sql包下给出三个与数据库相关的日期时间类型,分别是:

l  Date:表示日期,只有年月日,没有时分秒。会丢失时间;

l  Time:表示时间,只有时分秒,没有年月日。会丢失日期;

l  Timestamp:表示时间戳,有年月日时分秒,以及毫秒。

 

大数据(Blob,Clob)

 

类型

长度

tinyblob

28--1B256B

blob

216-1B64K

mediumblob

224-1B16M

longblob

232-1B4G

tinyclob

28--1B256B

clob

216-1B64K

mediumclob

224-1B16M

longclob

232-1B4G

大数据比如视频,歌曲,图片,文本子类的.将他们存入数据库是通过IO流(插入的是IO流对象,读取的也是IO流)

CREATE TABLE tab_bin(
         id    INT           PRIMARYKEY AUTO_INCREMENT,
         filename  VARCHAR(100),
         data        MEDIUMBLOB
);

插入数据库

     con = JdbcUtils.getConnection();
     String sql = "insertinto tab_bin(filename,data) values(?, ?)";
     pstmt = con.prepareStatement(sql);
     pstmt.setString(1, "a.jpg");
     InputStreamin = new FileInputStream("f:\\a.jpg");//得到一个输入流对象
     pstmt.setBinaryStream(2,in);//为第二个参数赋值为流对象 
     pstmt.executeUpdate();

 查询数据库

           con = JdbcUtils.getConnection();
           String sql = "selectfilename,data from tab_bin where id=?";
           pstmt = con.prepareStatement(sql);
           pstmt.setInt(1, 1);
           rs = pstmt.executeQuery();
           rs.next();
           
           String filename = rs.getString("filename");
           OutputStream out = new FileOutputStream("F:\\" + filename);
           
           InputStream in = rs.getBinaryStream("data");
           IOUtils.copy(in, out);
           out.close();

大批处理

批处理就是一批一批的处理,而不是一个一个的处理!

当你有10SQL语句要执行时,一次向服务器发送一条SQL语句,这么做效率上很差!处理的方案是使用批处理,即一次向服务器发送多条SQL语句,然后由服务器一次性处理。

    批处理只针对更新(增、删、改)语句

 

l  void addBatch(String sql):添加一条语句到“批”中;

l  int[] executeBatch():执行“批”中所有语句。返回值表示每条语句所影响的行数据;

l  void clearBatch():清空“批”中的所有语句。

           con = JdbcUtils.getConnection();
           String sql = "insertinto stu values(?,?,?,?)";
           pstmt = con.prepareStatement(sql);
           for(int i = 0; i < 10; i++) {
              pstmt.setString(1, "S_10" + i);
              pstmt.setString(2, "stu" + i);
              pstmt.setInt(3, 20 + i);
              pstmt.setString(4, i % 2 == 0 ? "male" : "female");
              pstmt.addBatch();
           }
           pstmt.executeBatch();

JDBC学习

标签:jdbc

原文地址:http://s5650326.blog.51cto.com/10667626/1726893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!