JDBC基础

来源:互联网 发布:国宴开水白菜,知乎 编辑:程序博客网 时间:2024/06/13 09:32

jdbc是一套java连接数据库的接口层,jdbc为java程序提供了连接各种数据库的统一的接口操作。JDBC在于实际数据库交互时需要加载相应数据库的驱动(数据库厂商提供)。具体操作如下3步:

  • 加载驱动、连接数据库
    Class.forName(JDBC_DRIVER);    connection=DriverManager.getConnection(DB_UTL,USER,PASSWORD);
  • 声明语句执行操作
    • 声明语句prepareStatement(sql)的sql字符串可以用”?”来占位,之后用java变量来替换。
      而Statement不能用java变量占位,只能用字符串拼接,但存在注入隐患。
    • 执行函数executeUpdate可以执行insert、delete等操作,返回操作影响的行数。
      executeQuery可以执行查询语句,返回ResultSet结果集。
      execute可以执行任何语句
    private static final String sql="INSERT INTO spider6 VALUES(null,?,?,?)";    statement=Warehouse.connection.prepareStatement(sql);    statement.setString(1, fileName);    statement.setString(2, url);    statement.setBinaryStream(3, data);    //执行    statement.executeUpdate();
  • 关闭数据库
    statement.close();    connection.close();

关于结果集:
ResultSet 是一个结果的集合,游标开始在第一行之前,调用next()函数可以移动使游标一行。getXXX()函数接受列号或者列名获得相应的值。

在爬虫项目中用于保存爬来的网页。

java代码实现:

import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class Warehouse{    private static final String JDBC_DRIVER="com.mysql.jdbc.Driver";    private final static String DB_UTL="jdbc:mysql://localhost/spider";    private final static String USER="root";    private final static String PASSWORD="root";    private static final String sql="INSERT INTO spider6 VALUES(null,?,?,?)";    private static Connection connection=null;    private static PreparedStatement statement=null;    static{        try{            Class.forName(JDBC_DRIVER);            connection=DriverManager.getConnection(DB_UTL,USER,PASSWORD);            statement=Warehouse.connection.prepareStatement(Warehouse.sql);        }catch(SQLException e){            e.printStackTrace();        }catch(Exception e){            e.printStackTrace();        }    }    public static void insert(String fileName,String url,InputStream data){        try {            statement.setString(1, fileName);            statement.setString(2, url);            statement.setBinaryStream(3, data);//输入流可以直接以二进制流插入数据库            statement.executeUpdate();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    protected void finalize(){        try {            statement.close();            connection.close();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public static void main(String[] args){        try {            String sql;            sql="SELECT * FROM spider6 where ID=6";            PreparedStatement statement=Warehouse.connection.prepareStatement(sql);            ResultSet resultSet=statement.executeQuery();        while(resultSet.next()){            int id=resultSet.getInt(1);            String name=resultSet.getString(2);            String url=resultSet.getString(3);            InputStream reader=resultSet.getBinaryStream(4);            System.out.println(id +" "+ url +" " +name);            try {                FileOutputStream writer=new FileOutputStream(new File("D:\\workspace\\java\\spider6\\data\\file\\"+name));                byte[] buf=new byte[1024];                int len=0;                while((len=reader.read(buf))!=-1)writer.write(buf,0,len);                writer.close();                reader.close();            }catch (Exception e1) {                // TODO Auto-generated catch block                e1.printStackTrace();            }        }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击