public static void insert() {
// 开时时间
Long begin = new Date().getTime()
// sql前缀
String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES "
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer()
// 设置事务为非自动提交
conn.setAutoCommit(false)
// Statement st = conn.createStatement()
// 比起st,pst会更好些
PreparedStatement pst = conn.prepareStatement("")
// 外层循环,总提交事务次数
for (int i = 1 i <= 100 i++) {
// 第次提交步长
for (int j = 1 j <= 10000 j++) {
// 构建sql后缀
suffix.append("(" + j * i + ", SYSDATE(), " + i * j
* Math.random() + "),")
}
// 构建完整sql
String sql = prefix + suffix.substring(0, suffix.length() - 1)
// 添加执行sql
pst.addBatch(sql)
// 执行 *** 作
pst.executeBatch()
// 提交事务
conn.commit()
// 清空上一次添加的数据
suffix = new StringBuffer()
}
// 头等连接
pst.close()
conn.close()
} catch (SQLException e) {
e.printStackTrace()
}
// 结束时间
Long end = new Date().getTime()
// 耗时
System.out.println("cast : " + (end - begin) / 1000 + " ms")
}
方法一,从已有大数据表中检索大量数据插入到目标表里方法二,编写存储过程,利用循环向数据表中插入大量的固定或有规律变化或随机变化的虚拟数据
方法三,通过应用程序端编程向目标表插入大量的数据,手法与方法二类似。
1. 什么是大数据
1. 所谓大数据, 就是大的字节数据,或大的字符数据.
2. 标准 SQL 中提供了如下类型来保存大数据类型:
字节数据类型: tinyblob(256B), blob(64K), mediumblob(16M), longblob(4G)
字符数据类型: tinyclob(256B), clob(64K), mediumclob(16M), longclob(4G)
3. MySql 中处理字符的数据类型名称与 SQL 标准不同:
字符数据类型: tinytext(256B), text(64K), mediumtext(16M), longtext(4G)
// 示例: 把 mp3 保存到数据库中// 需要在 MySql 配置文件中添加如下配置: `max_allowed_packet=10485760`// 因为 MySql 默认不允许数据包传输过大public class Demo{ // 将 mp3 文件保存到数据库中
public void fun1(){ // 获取连接对象
Connection con = JdbcUtils.getConnection() // 提供 sql 模板, 获取 PreparedStatement 对象
String sql = "INSERT INTO tab_bin VALUES(?,?,?)"
PreparedStatement pstmt = con.prepareStatement(sql) // 设置 sql 模板参数
pstmt.setInt(1,001)
pstmt.setString(2,"hello.mp3") // mp3 保存为 blob 类型的数据
// 通过 commons-io 工具类, 将 mp3 转换成 byte[]
Byte[] bytes = IOUtils.toByteArray(new FileInputStream("/Users/姓名/Desktop/hello.mp3")) // 使用 bytes, 创建 Blob 对象
Blob blob = new SerialBlob(bytes)
pstmt.setBlob(3,blob) // 发送 sql 语句
pstmt.executeUpdate()
} // 从数据库中获取 mp3 数据
public void fun2(){ // 获取连接对象
Connection con = JdbcUtils.getConnection() // 获取 PreparedStatement 对象
String sql = "SELECT * FROM tab_bin"
PreparedStatement pstmt = con.prepareStatement(sql) // 发送 sql 语句, 返回 ResultSet 对象
ResultSet rs = pstmt.executeQuery() // 将 rs 中名为 data 列的数据
if(rs.next()){
Blob blob = rs.getBlob("data") // 把 blob 转换成硬盘上的 mp3 文件
// 1. 通过 blob 得到输入流对象
// 2. 自己创建输出流对象
// 3. 把输入流的数据写入到输出流中
InputStream in = blob.getBinaryStream()
OutputStream out = new FileOutputStream("/Users/姓名/Document/world.mp3") // 使用工具类中的方法
IOUtils.copy(in,out)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)