Java学习总结——输入输出流+JDBC

1.文件输入流(FileInputStream

2.预处理语句对象(PreparedStatement

3.InputStream存储到blob MySQLlongblob)字段中

4.文件输出流(FileOutputStream

5.输入输出流对接

PreparedStatement

为预处理语句对象,可以使用占位符(?)创建SQL语句,在SQL语句创建后再使用具体的值替换占位符(?)示例如下:

package com.hzyc.io.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class IOLearn {
    private static final String URL = "jdbc:mysql://localhost:3306/hzyc";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            String sql = "INSERT INTO student (sid,sname,photo) " +
                    " VALUES (?,?,?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setObject(1, 1201);
            preparedStatement.setObject(2, "张三");
            preparedStatement.setObject(3, "");
            preparedStatement.execute();
            preparedStatement.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

文件输入流(FileInputStream)

FileInputStream是以字节(byte)为单位的文件输入流,可以将FileInputStream的对象(实例)直接保存到数据表(blob类型字段)中。

例如:创建数据表myImageSQL语句如下:

create table myImage (code int, imgName varchar(30), img blob)

如果使用的是MySQL数据库,则需要创建longblob类型的字段

存储文件(图片)到数据库

package com.hzyc.io.jdbc;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class IOLearn {
    private static final String URL = "jdbc:mysql://localhost:3306/hzyc";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream = new FileInputStream(new File("D:\\Downloads\\sy.png"));
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            String sql = "INSERT INTO student (sid,sname,photoName,photo) " +
                    " VALUES (?,?,?,?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 1201);
            preparedStatement.setString(2, "张三");
            preparedStatement.setString(3, "sy");
            preparedStatement.setBinaryStream(4, fileInputStream, fileInputStream.available());
            preparedStatement.execute();
            preparedStatement.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException | IOException e) {
            e.printStackTrace();
        }
    }
}

 文件输出流(FileOutputStream)

u从数据库中可以把存储到表中的输入流(input)对象获取出来,并通过文件输出流以字节(byte)为单位写入到目标,代码如下:

ResultSet rs = stmt. executeQuery (select * from myImage);

rs. next();

InputStream input = rs. getBinaryStream (img);

以上代码可以获取到存储到数据库中的input对象

File target = new File( E:/test.jpg );

FileOutputStream output = new FileOutputStream (target);

到此已经准备好输入流对象input和输出流对象output

猜你喜欢

转载自blog.csdn.net/weixin_41577923/article/details/82889141