Java数据库——处理大数据对象
Posted tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据库——处理大数据对象相关的知识,希望对你有一定的参考价值。
处理大数据对象
CLOB中可以存储海量文字
BLOB中可以存储海量二进制数据
如果程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本字段中保存和读取。
写入大文本数据
汉字的编码要改成gbk
//================================================= // File Name : Clob_demo //------------------------------------------------------------------------------ // Author : Common import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.*; import java.text.SimpleDateFormat; //主类 //Function : Clob_demo public class Clob_demo { //定义mysql的数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; //定义MySQL数据库的连接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo"; //MySQL数据库的连接用户名 public static final String DBUSER = "root"; //MySQL数据库的连接密码 public static final String DBPASS = "123456"; public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 Connection conn = null; //数据库连接 PreparedStatement pstmt = null; //数据库操作 String name = "张三"; String sql = "INSERT INTO userclob(name,note) VALUES (?,?) "; Class.forName(DBDRIVER); //加载驱动程序 //连接MySQL数据库时,要写上连接的用户名和密码 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt = conn.prepareStatement(sql); //实例化PreparedStatement //声明一个File对象,用于找到要操作的大文本文件 File f = new File("/home/common/software/database/zhangsan.txt"); InputStream input = null; //通过输入流读取内容 input = new FileInputStream(f); //通过输入流读取文件 pstmt.setString(1, name); //设置第一个“?”的内容 pstmt.setAsciiStream(2,input, (int)f.length()); //设置输入流 pstmt.executeUpdate(); //执行数据库更新操作 pstmt.close(); //操作关闭 conn.close(); //数据库关闭 } }
读取大文本字段
//================================================= // File Name : Clob_demo //------------------------------------------------------------------------------ // Author : Common import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Scanner; //主类 //Function : Clob_demo public class Clob_demo { //定义MySQL的数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; //定义MySQL数据库的连接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo"; //MySQL数据库的连接用户名 public static final String DBUSER = "root"; //MySQL数据库的连接密码 public static final String DBPASS = "123456"; public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 Connection conn = null; //数据库连接 PreparedStatement pstmt = null; //数据库操作 ResultSet rs = null; //保存结果集 int id = 2; String sql = "SELECT name,note FROM userclob WHERE id=?"; Class.forName(DBDRIVER); //加载驱动程序 //连接MySQL数据库时,要写上连接的用户名和密码 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt = conn.prepareStatement(sql); //实例化PreparedStatement pstmt.setInt(1, id); //设置查询的id rs = pstmt.executeQuery(); //查询 while(rs.next()){ String name = rs.getString(1); StringBuffer note = new StringBuffer(); System.out.println("姓名:"+name); InputStream input = rs.getAsciiStream(2); //接收全部的文本数据 Scanner scan = new Scanner(input); //接收数据 scan.useDelimiter("\r\n"); //将文件换行作为分隔符 while(scan.hasNext()){ note.append(scan.next()).append("\n"); //不断读取内容 } System.out.println("内容:"+note); input.close(); } pstmt.close(); //操作关闭 conn.close(); //数据库关闭 } }
//================================================= // File Name : Clob_demo //------------------------------------------------------------------------------ // Author : Common import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Scanner; //主类 //Function : Clob_demo public class Clob_demo { //定义MySQL的数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; //定义MySQL数据库的连接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo"; //MySQL数据库的连接用户名 public static final String DBUSER = "root"; //MySQL数据库的连接密码 public static final String DBPASS = "123456"; public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 // Connection conn = null; //数据库连接 // PreparedStatement pstmt = null; //数据库操作 // // String name = "张三"; // String sql = "INSERT INTO userclob(name,note) VALUES (?,?) "; // Class.forName(DBDRIVER); //加载驱动程序 // //连接MySQL数据库时,要写上连接的用户名和密码 // conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); // pstmt = conn.prepareStatement(sql); //实例化PreparedStatement // //声明一个File对象,用于找到要操作的大文本文件 // File f = new File("/home/common/software/database/无标题文档"); // InputStream input = null; //通过输入流读取内容 // input = new FileInputStream(f); //通过输入流读取文件 // pstmt.setString(1, name); //设置第一个“?”的内容 // pstmt.setAsciiStream(2,input, (int)f.length()); //设置输入流 // pstmt.executeUpdate(); //执行数据库更新操作 // pstmt.close(); //操作关闭 // conn.close(); //数据库关闭 // Connection conn = null; //数据库连接 // PreparedStatement pstmt = null; //数据库操作 // ResultSet rs = null; //保存结果集 // // int id = 2; // String sql = "SELECT name,note FROM userclob WHERE id=?"; // Class.forName(DBDRIVER); //加载驱动程序 // //连接MySQL数据库时,要写上连接的用户名和密码 // conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); // pstmt = conn.prepareStatement(sql); //实例化PreparedStatement // pstmt.setInt(1, id); //设置查询的id // rs = pstmt.executeQuery(); //查询 // // while(rs.next()){ // String name = rs.getString(1); // StringBuffer note = new StringBuffer(); // System.out.println("姓名:"+name); // InputStream input = rs.getAsciiStream(2); //接收全部的文本数据 // Scanner scan = new Scanner(input); //接收数据 // scan.useDelimiter("\r\n"); //将文件换行作为分隔符 // while(scan.hasNext()){ // note.append(scan.next()).append("\n"); //不断读取内容 // } // System.out.println("内容:"+note); // input.close(); // } // // pstmt.close(); //操作关闭 // conn.close(); //数据库关闭 Connection conn = null; //数据库连接 PreparedStatement pstmt = null; //数据库操作 ResultSet rs = null; //保存结果集 int id = 2; String sql = "SELECT name,note FROM userclob WHERE id=?"; Class.forName(DBDRIVER); //加载驱动程序 //连接MySQL数据库时,要写上连接的用户名和密码 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt = conn.prepareStatement(sql); //实例化PreparedStatement pstmt.setInt(1, id); //设置查询的id rs = pstmt.executeQuery(); //查询 while(rs.next()){ String name = rs.getString(1); //取出name列的内容 Clob c = rs.getClob(2); //取出大文本数据 String note = c.getSubString(1, (int)c.length()); //CLOB开始的位置为1 System.out.println("姓名:"+name); System.out.println("内容:"+note); c.truncate(100); System.out.println("部分的读取内容:"+c.getSubString(1, (int)c.length())); } pstmt.close(); //操作关闭 conn.close(); //数据库关闭 } }
处理BLOB数据
create table userblob(id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,photo LONGBLOB);
//================================================= // File Name : Blob_demo //------------------------------------------------------------------------------ // Author : Common import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Scanner; //主类 //Function : Blob_demo public class Blob_demo { //定义MySQL的数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; //定义MySQL数据库的连接地址 public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo"; //MySQL数据库的连接用户名 public static final String DBUSER = "root"; //MySQL数据库的连接密码 public static final String DBPASS = "123456"; public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 // Connection conn = null; //数据库连接 // PreparedStatement pstmt = null; //数据库操作 // // String name = "赵六"; // String sql = "INSERT INTO userblob(name,photo) VALUES (?,?) "; // Class.forName(DBDRIVER); //加载驱动程序 // //连接MySQL数据库时,要写上连接的用户名和密码 // conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); // pstmt = conn.prepareStatement(sql); //实例化PreparedStatement // //声明一个File对象,用于找到要操作的大文本文件 // File f = new File("/home/common/software/database/photo.jpg"); // InputStream input = null; //通过输入流读取内容 // input = new FileInputStream(f); //通过输入流读取文件 // pstmt.setString(1, name); //设置第一个“?”的内容 // pstmt.setBinaryStream(2,input, (int)f.length()); //设置输入流 // pstmt.executeUpdate(); //执行数据库更新操作 // pstmt.close(); //操作关闭 // conn.close(); //数据库关闭 Connection conn = null; //数据库连接 PreparedStatement pstmt = null; //数据库操作 ResultSet rs = null; //保存结果集 int id = 1; String sql = "SELECT name,photo FROM userblob WHERE id=?"; Class.forName(DBDRIVER); //加载驱动程序 //连接MySQL数据库时,要写上连接的用户名和密码 conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt = conn.prepareStatement(sql); //实例化PreparedStatement pstmt.setInt(1, id); //设置查询的id rs = pstmt.executeQuery(); //查询 while(rs.next()){ String name = rs.getString(1); StringBuffer note = new StringBuffer(); System.out.println("姓名:"+name); InputStream input = rs.getBinaryStream(2); //接收全部的大文本数据 FileOutputStream out = null; out = new FileOutputStream(new File("/home/common/software/database/photo_copy.jpg")); int temp = 0; while((temp = input.read()) != -1){ //边读边写 out.write(temp); } input.close(); out.close(); } pstmt.close(); //操作关闭 conn.close(); //数据库关闭 } }
以上是关于Java数据库——处理大数据对象的主要内容,如果未能解决你的问题,请参考以下文章
python中的多处理-在多个进程之间共享大对象(例如pandas数据框)
如何在基于 webpack-react-node 的网站中处理非常大的数据(100000 个 javascript 对象)?