java爬虫抓取网页数据(Java数据存入云端数据库的表中:1-2-1)

优采云 发布时间: 2021-12-20 14:14

  java爬虫抓取网页数据(Java数据存入云端数据库的表中:1-2-1)

  下面详细说明将所有解析的房屋数据存储在云数据库的表中:

  1、 第一步是获取数据库连接。Java 提供了数据库连接的接口,但是实现是由各个数据库提供者实现的。这里需要mysql提供的第三方包:mysql-connector-java-8.0.13.jar

  ,, 新建一个类来封装数据库处理的方法:

  //封装数据库相关操作

public class OperationOfMySQL {

//只创建一次链接

Connection con;

Statement state;

public OperationOfMySQL() {

super();

this.con = connectionToDatabase();

try {

//state用于传入sql语句对数据库进行操作

this.state = con.createStatement();

} catch (Exception e) {

System.out.println("链接失败!");

}

}

  和上面的代码一样,连接是在创建对象的时候创建的:

  connectionToDatabase() 方法返回获取的数据库链接:

  //返回数据库链接的方法

private static Connection connectionToDatabase() {

Connection con = null;

//创建驱动对象

try {

Driver driver = new Driver();

String url = cloud;

Properties info = new Properties();

//准备数据库链接信息

info.put("user", "rds_repl");

info.put("password", "123456");

//获取数据库链接

con = driver.connect(url, info);

}catch (SQLException e) {

System.out.println("链接数据库失败!");

return null;

}

System.out.println(con+"\n链接创建成功!");

return con;

}

//cloud是加载云端驱动的数据库,格式为:

//String cloud = "jdbc:mysql://服务器地址:端口号/数据库名?severTimzone=UTC";

  ,, 云数据库的地址和端口号这里就不贴了(连接云和本地数据库的方法是一样的)。值得注意的是,如果您使用的是数据库连接池,则需要设置链接超时,虽然我没有这样做。. .

  PS:还有一个类加载com.mysql.cj.jdbc.Driver 0版本的驱动;有一个额外的“cj”,所以必须设置时区: severTimezone=UTC, version 0 不要使用,否则运行时会报错。(这里只是提醒,具体原因不再详述);

  Java通过状态对象将sql字符串传递给数据库。由于数据库是预先存在的,所以需要建一个表来存储房屋信息。关键表语句是:

  //如果数据库中不存在表house1就创建一张

static private String SQLCreateTaleStr = "CREATE TABLE IF NOT EXISTS house1"

+ "("

+ "title varchar(255) ,"

+ "area double ,"

+ "price varchar(64) ,"

+ "unit_price double ,"

+ "direction varchar(64),"

+ "decoration varchar(64),"

+ "houseStyle varchar(64) ,"

+ "floor varchar(64),"

+ "buildTime int(11) ,"

+ "community varchar(64),"

+ "location varchar(64) ,"

+ "gdpperperson double"

+ ")ENGINE = InnoDB DEFAULT CHARSET = utf8;";

  然后写一个方法把房子信息转换成语句插入SQL到表中:

  //用于生成插入语句的方法,传入一个房子和表的名字

public String insertStr(SecondHouse house) {

String insert = "insert into house1"

+ " values('"

+house.getElemName()+ "','"

+house.getArea()+ "','"

+house.getPrice()+ "','"

+house.getUnit_price()+ "','"

+house.getDirection()+ "','"

+house.getDecoration()+ "','"

+house.getHouseStyle()+ "','"

+house.getFloor()+ "','"

+house.getBuildTime()+ "','"

+house.getCommunity()+ "','"

+house.getLocation()+ "','"

+0+ "');";

return insert ;

}

  PS; 拼接字符串时注意空格和标点符号,保证sql语句可以执行

  然后就是执行这个write语句的方法:

  //传入链接,进行对数据库的操作,传入二手房,写进数据库

public void operationOnDtabase(String insertStr) {

try {

//获取执行sql语句动态创建表,即如果表不存在就创建一个

state.execute(SQLCreateTaleStr);

//执行插入语句

state.executeUpdate(insertStr);

// System.out.println(insertStr);

}catch (SQLException e) {

System.out.println("SQL语句执行失败!");

}

System.out.println("执行语句成功!");

}

  工具和方法已经准备好,需要集成:

  最后,网页解析、多线程、写入数据库的所有实现都在main方法中执行;

<p>//---------------------------main方法代替执行--------------------------------------------------------------------

public static void operateMain() {

houseSet = new Vector();

//多线程集合

Vector threads = new Vector();

for (int i = 1; i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线