问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JDBC执行Mysql字符串时,对字符串的长度以及参数的数量有什么限制

发布网友 发布时间:2022-04-07 22:04

我来回答

2个回答

懂视网 时间:2022-04-08 02:25

        LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB。BLOB通常用于存储二进制数据,比如图片、音频、视频等。CLOB通常用于存储大文本,比如小说。

        MySQL数据库中没有专门的CLOB数据类型,而如果要存储大文本,MySQL采用的是TEXT类型。TEXT类型又有TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT之分。MySQL中的BLOB类型又可分为TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

使用JDBC处理大文本

        向MySQL中存储大文本,可调用JDBC API中PreparedStatement的如下方法:

// 将指定参数设置为给定 Reader 对象

void setCharacterStream(int parameterIndex, Reader reader) throws SQLException

// 将给定参数设置为给定 Reader 对象,该对象具有给定字符数长度(int型)

 void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException

// 将指定参数设置为给定 Reader 对象,该对象具有给定字符数长度(long型)

void setCharacterStream(int parameterIndex, Reader reader, long length) throws SQLException

        如果需要从MySQL数据库中获取大文本列字段值,则可以使用ResultSet的如下方法:

// 以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值

Reader getCharacterStream(int columnIndex) throws SQLException Reader getCharacterStream(String columnLabel) throws SQLException

// 以 String 的形式获取此 ResultSet 对象的当前行中指定列的值

String getString(int columnIndex) throws SQLException String getString(String columnLabel) throws SQLException

示例:

        代码:

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

/**  * 使用JDBC操作大文本

 *  * @author

 *  */

public class ClobTest {

    /**      * 使用JDBC向数据库表中插入大文本数据    

    *      * @throws SQLException  

    */  

   public static void add() throws SQLException {    

     Connection conn = null;    

     PreparedStatement pstmt = null;    

     // 获取数据库会话对象     

    JdbcSession session = JdbcSessionFactory.getCurrentSession();     

    // 获取数据库连接     

    conn = session.getConnection();   

    // 创建SQL语句:向小说表中添加一条章节内容的记录     

    String sql = "INSERT INTO novel(content) VALUES(?)";     

    // 创建PreparedStatement对象    

     pstmt = conn.prepareStatement(sql);    

     // 创建Reader对象    

     File file = new File(Thread.currentThread().getClass().getResource("/novel/1.txt").getPath());    

     Reader reader = null;   

      try {      

       reader = new FileReader(file);    

     } catch (FileNotFoundException e) {     

        e.printStackTrace();   

      }    

     // 设置参数      

       pstmt.setCharacterStream(1, reader, (int) file.length());     

    // 执行SQL语句     

        int count = pstmt.executeUpdate();    

     // 处理结果    

        if (count > 0)    

         System.out.println("添加成功");  

       else   

          System.out.println("添加失败");   

      // 释放资源    

     JdbcResourceManager.close(pstmt);    

     JdbcResourceManager.close(conn);   

      JdbcSessionFactory.closeSession();   

  }

    public static void read() throws SQLException {   

      Connection conn = null;   

      PreparedStatement pstmt = null;    

     ResultSet rs = null;    

     // 获取数据库会话对象    

     JdbcSession session = JdbcSessionFactory.getCurrentSession();    

     // 获取数据库连接    

     conn = session.getConnection();     

    // 创建SQL语句     

    String sql = "SELECT id, content FROM novel";    

     // 创建PreparedStatement对象   

      pstmt = conn.prepareStatement(sql);    

     // 执行SQL语句     

    rs = pstmt.executeQuery();    

     // 处理结果    

     while (rs.next()) {      

       // 读取小说内容     

        Reader reader = rs.getCharacterStream("content");       

        int ch;     

        try {        

         while((ch = reader.read()) != -1){          

           System.out.print((char)ch);     

            }      

       } catch (IOException e) {        

         e.printStackTrace();       

      }   

      }     

    // 释放资源      

      JdbcResourceManager.close(rs);   

      JdbcResourceManager.close(pstmt);

       JdbcResourceManager.close(conn);  

       JdbcSessionFactory.closeSession();  

   }

    public static void main(String[] args) {    

     try {     

        add();      

       read();    

     } catch (SQLException e) {     

        e.printStackTrace();   

      }   

  }

}

 

使用JDBC处理二进制数据     

         向MySQL中存储二进制数据,可调用JDBC API中PreparedStatement的如下方法:

// 将指定参数设置为给定输入流。

void setBinaryStream(int parameterIndex, InputStream x)

// 将指定参数设置为给定输入流,该输入流将具有给定字节数(int型)。

void setBinaryStream(int parameterIndex, InputStream x, int length)

// 将指定参数设置为给定输入流,该输入流将具有指定字节数(long型)。

void setBinaryStream(int parameterIndex, InputStream x, long length)

         如果需要从MySQL数据库中获取二进制列字段值,则可以使用ResultSet的如下方法:

// 以未解释字节的流的形式获取此 ResultSet 对象的当前行中指定列的值。

InputStream getBinaryStream(int columnIndex)

// 以未解释的 byte 流的形式获取此 ResultSet 对象的当前行中指定列的值。

InputStream getBinaryStream(String columnLabel)

// 以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。

Blob getBlob(int columnIndex)

// 以 Java 编程语言中 Blob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。

Blob getBlob(String columnLabel)

         获取Blob对象后可以继续调用getBinaryStream()方法获取输入流。

示例:

代码:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

/**  * 使用JDBC操作二进制数据

 *  * @author 

 *  */

public class BlobTest {

    /**      * 插入二进制数据到数据库   

     *      * @throws Exception  

    */  

   public static void add() throws Exception {    

     Connection conn = null;     

    PreparedStatement pstmt = null;    

     // 获取数据库会话对象    

     JdbcSession session = JdbcSessionFactory.getCurrentSession();   

      // 获取数据库连接     

    conn = session.getConnection();    

     // 插入音乐数据的SQL语句     

    String sql = "INSERT INTO music(content) VALUES(?)";    

     pstmt = conn.prepareStatement(sql);    

     // 创建PreparedStatement对象    

     pstmt = conn.prepareStatement(sql);     

    // 创建Reader对象    

     File file = new File(Thread.currentThread().getClass().getResource("/music/08.Along_in_the_night.mp3").getPath());   

      InputStream fis = new FileInputStream(file);

     // 生成的流    

     pstmt.setBinaryStream(1, fis, file.length());    

     // 执行SQL语句     

    int count = pstmt.executeUpdate();     

    // 处理结果    

     if (count > 0)       

      System.out.println("添加成功");     

    else      

       System.out.println("添加失败");    

     // 释放资源   

      JdbcResourceManager.close(pstmt);     

    JdbcResourceManager.close(conn);     

    JdbcSessionFactory.closeSession();  

   }

    /**      * 从数据库中读二进制数据   

   *      * @throws Exception    

  */  

   public static void read() throws Exception {      

   Connection conn = null;     

    PreparedStatement pstmt = null;     

    ResultSet rs = null;    

     // 获取数据库会话对象     

    JdbcSession session = JdbcSessionFactory.getCurrentSession();    

     // 获取数据库连接     

    conn = session.getConnection();   

      // 创建SQL语句     

    String sql = "SELECT id, content FROM music WHERE id=?";     

    // 创建PreparedStatement对象    

     pstmt = conn.prepareStatement(sql);   

      pstmt.setInt(1, 1);   

      // 执行SQL语句     

    rs = pstmt.executeQuery();    

     // 处理结果   

      if (rs.next()) {     

        InputStream in = rs.getBinaryStream("content");

// 获取列字段InputStream对象      

       // 缓冲数组     

        byte buf[] = new byte[1024];      

       int len;       

      // 输出流,将读取到的音乐数据保存到D盘      

       OutputStream out = new FileOutputStream("D:\1.mp3");      

       while ((len = in.read(buf)) != -1) {         

        out.write(buf, 0, len);     

        }   

          in.close();      

       out.close();       

  }      

   // 释放资源     

    JdbcResourceManager.close(rs);    

     JdbcResourceManager.close(pstmt);   

      JdbcResourceManager.close(conn);    

     JdbcSessionFactory.closeSession();   

  }

    public static void main(String[] args) throws Exception {   

      add();    

     read();   

  }

}

 

使用JDBC处理MySQL大文本和大数据

标签:

热心网友 时间:2022-04-07 23:33

首先JAVA中String有长度*、另外MYSQL对SQL语句也有*。。。。。。。。。

my.ini 有设置,如 max_allowed_packet
= 6M

JAVA 的String,理论最长是Integer.MAX_VALUE追问参数数量有*吗?
insert into t(a,b,c,...) values(?,?,?,?...)

追答参数,那由片段定义决定。。。。。。。。。。。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
荨麻疹吃什么食物好荨麻疹饮食禁忌有哪些 三极管9015的参数有哪些 4岁孩子缺锌比别人矮,还能长高吗 婴儿出生时很矮长大一定矮吗 陌陌表情红唇怎么弄 因为不知道SUMIF函数还能横着用她一上午的工作被别人一分钟搞定_百度知 ... EXCEL中SUMIF公式的运用问题?请教! 苹果手机没有用的软件怎么办苹果手机不常用的软件怎么打开 血尿一般是什么原因引起的 win7桌面图标消失了 桌面图标消失了怎么恢复 Photoshop CS6怎么把一张图片的单独的场景抠出来? 办兴业银行卡才能领助学金 学生申请兴业银行信用卡 关于日本当红的明星及电视剧 咸菜豆板酥怎么做? 学生证可以办理兴业银行卡吗 POP R&B Club Techno House 这几个有什么区别? 香水中的toilet,perfume cologne;有什么区别? 想办兴业银行卡 学生 给些意见吧 在日本,perfume红还是少女时代红 能中立一点告诉我吗? perfume,与arome这个单词是来源相同的地方吗? "perfume"、"spice"和"flavor"的区别,要详细点的,谢谢 Scent,fragrance,fragrancy,perfume 有什麼区别? 香水中的"toilet","perfume","cologne"有什么区别? aroma, perfume, fragrance和scent的区别? 这是什么?没壳的蜗牛? 美食丨十里和风蚕豆香,这几种家常做法,你get了吗 Perfume简直就是日本山寨版的s.h.e,怎么会红 发生车祸对方全责我自己开车去4s店修车,那个油钱和打车费可以要求保险公司陪吗 在Perfume’s Club中文官网多久到货,物流快吗? 交行信用卡。最低还款额还不上怎么办。会有什么后果 信用卡电子账单中最低还款额还不起会怎么样 青海有哪些知名的景点哦? 网上购买电影票选座时所说的不可售是什么意思? 信用卡最低还款不还会怎么样呢 信用卡最低还款额还不上会逾期吗 这个不可售的座位是干嘛的? 为什么选电影座位会有不可售 什么意思 朋友不能坐一起吗? 电影院的放映室里的座位可以随意坐吗 电影院灰色座位为什么不能坐 电影院的票座位是随便坐的吗? 看电影时位子可以乱坐吗? 电影院隔座可以坐一起吗 电影院空位子可以乱坐吗? 电影院要隔座吗 纳克达斯指数基金合理的市盈率区间是多少? 电影院座位两可售间一个不可售是疫情原因吗? 弱弱问下:现在的电影院座位是进去随便坐还是对票号入座? 电影院包场后座位可以随便座吗? 求助:去电影院看正版电影,买的票有没有不同价格的吗?座位可以随便坐的吗?我同学说票价都是一样的,而且