• 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("
    ");										//将文件换行作为分隔符
    			while(scan.hasNext()){
    				note.append(scan.next()).append("
    ");			//不断读取内容
    			}
    			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("
    ");										//将文件换行作为分隔符
    //			while(scan.hasNext()){
    //				note.append(scan.next()).append("
    ");			//不断读取内容
    //			}
    //			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();										//数据库关闭
    	}
    
    }
    

    使用Blob读取内容

    //=================================================
    // 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;	//数据库操作
    		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();							//查询
    		
    		if(rs.next()){
    			String name = rs.getString(1);
    			System.out.println("姓名:"+name);
    			Blob b = rs.getBlob(2);					//读取Blob数据
    			FileOutputStream out = null;
    			out = new FileOutputStream(new File("/home/common/software/database/photo_copy2.jpg"));
    			out.write(b.getBytes(1, (int)b.length()));
    			out.close();
    		}
    		pstmt.close();										//操作关闭
    		conn.close();										//数据库关闭
    	}
    
    }
    
  • 相关阅读:
    微信小程序使用场景及取名“潜”规则
    微信小程序入门——Mustache语法学习
    微信小程序开发需要注意的29个坑
    微信小程序入门——怎么建多个项目?(导入官方Demo程序进行学习)
    精进:如何成为一个很厉害的人---书摘
    软件项目如何控制需求蔓延
    给现有MVC 项目添加 WebAPI
    Web API与国际化
    基于Attribute的Web API路由设置
    NuGet学习笔记1——初识NuGet及快速安装使用
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5304613.html
Copyright © 2020-2023  润新知