English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

جريان البيانات الثنائية والنصية JDBC

يمكن لجسم PreparedStatement استخدام تدفق الدخل والخروج لتقديم بيانات المعاملات. هذا يتيح لك وضع الملف بأكمله في عمود قاعدة البيانات يمكنه حفظ القيم الكبيرة (مثل أنواع البيانات CLOB و BLOB).

هناك طرق يمكن استخدامها للبيانات الموجهة

  • setAsciiStream(): يستخدم هذا الملف لتقديم القيم ASCII الكبيرة.

  • setCharacterStream(): يستخدم هذا الملف لتقديم القيم Unicode الكبيرة.

  • setBinaryStream(): يستخدم هذا الملف لتبديل القيم الثنائية الكبيرة.

يحتاج إلى ملف setXXXStream () بخلاف علامات التبديل، إلى ملف إضافي، وهو حجم الملف. هذا الملف الإضافي يخبر الدوائر أن تستخدم هذا الكمية من البيانات لتوجيهها إلى قاعدة البيانات.

مثال على الإنترنت

على سبيل المثال، نريد رفع ملف XML XML_Data.xml إلى جدول قاعدة البيانات. هذا هو محتوى هذا ملف XML -

<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>

ضع هذا ملف XML في الدليل الذي سيتم تشغيل هذا المثال فيه.

هذا المثال سيقوم بإنشاء جدول قاعدة البيانات XML_Data، ثم رفع ملف XML_Data.xml إلى هذا الجدول.

نسخ و لصق المثال التالي في ملف JDBCExample.java، ثم قم بتجميعه وتشغيله:

// 导入所需的软件包
import java.sql.*;
import java.io.*;
import java.util.*;
public class JDBCExample {
   // JDBC驱动程序名称和数据库URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   // 数据库凭证
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   PreparedStatement pstmt = null;
   Statement stmt = null;
   ResultSet rs = null;
   try{
      // 注册JDBC驱动程序
      Class.forName("com.mysql.jdbc.Driver");
      // 打开连接
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      // 创建一个Statement对象并构建表
      stmt = conn.createStatement();
      createXMLTable(stmt);
      // 打开一个FileInputStream
      File f = new File("XML_Data.xml");
      long fileLength = f.length();
      FileInputStream fis = new FileInputStream(f);
      // 创建PreparedStatement并流式传输数据
      String SQL = "INSERT INTO XML_Data VALUES (?,?)";
      pstmt = conn.prepareStatement(SQL);
      pstmt.setInt(1,100);
      pstmt.setAsciiStream(2,fis,(int)fileLength);
      pstmt.execute();
      //关闭输入流
      fis.close();
      //进行查询以获取行
      SQL = "SELECT Data FROM XML_Data WHERE id=100";
      rs = stmt.executeQuery(SQL);
      //获取第一行
      if (rs.next()) {
         //从输入流中检索数据
         InputStream xmlInputStream = rs.getAsciiStream(1);
         int c;
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         while ((c = xmlInputStream.read()) != -1)
            bos.write(c);
         //打印结果
         System.out.println(bos.toString());
      }
      //清理环境
      rs.close();
      stmt.close();
      pstmt.close();
      conn.close();
   catch(SQLException se){
      //处理JDBC错误
      se.printStackTrace();
   }catch(Exception e){
      //处理Class.forName的错误
      e.printStackTrace();
   }finally{
      //用于关闭资源
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      //我们无能为力
      try{
         if(pstmt!=null)
            pstmt.close();
      }catch(SQLException se2){
      //我们无能为力
      try{
         if(conn!=null)
            conn.close();
      catch(SQLException se){
         se.printStackTrace();
      }
   //结束try
   System.out.println("Goodbye! ");
//结束main
public static void createXMLTable(Statement stmt) 
   throws SQLException{
   System.out.println("Creating XML_Data table... ");
   //إنشاء جملة SQL
   String streamingDataSql = "CREATE TABLE XML_Data " +
                             "(id INTEGER, Data LONG)";
   //إذا كانت موجودة، قم أولاً بحذف الجدول.
   try{
      stmt.executeUpdate("DROP TABLE XML_Data");
   catch(SQLException se){
   //لم يفعل شيئاً
   //إنشاء الجدول.
   stmt.executeUpdate(streamingDataSql);
//إنهاء createXMLTable
//إنهاء JDBCExample

الآن دعونا نكتب على الترجمة التالية، كما يلي:

C:\>javac JDBCExample.java
C:\>

عند تشغيلJDBCExample، سيتم إنتاج النتيجة التالية -

C:\>java JDBCExample
اتصال بالقاعدة البيانات...
إنشاء جدول XML_Data...
<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>
وداعاً!
C:\>