=================================================================== JRE settings: java.runtime.name : Java(TM) SE Runtime Environment sun.boot.library.path : C:\jdk16\jre\bin java.vm.version : 10.0-b23 java.vm.vendor : Sun Microsystems Inc. java.vendor.url : http://java.sun.com/ path.separator : ; java.vm.name : Java HotSpot(TM) Client VM file.encoding.pkg : sun.io sun.java.launcher : SUN_STANDARD user.country : CN sun.os.patch.level : Service Pack 3 java.vm.specification.name : Java Virtual Machine Specification user.dir : D:\project\MySQLTest java.runtime.version : 1.6.0_07-b06 java.awt.graphicsenv : sun.awt.Win32GraphicsEnvironment java.endorsed.dirs : C:\jdk16\jre\lib\endorsed os.arch : x86 java.io.tmpdir : C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ line.separator : java.vm.specification.vendor : Sun Microsystems Inc. user.variant : os.name : Windows XP sun.jnu.encoding : GBK java.library.path : C:\jdk16\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;.;E:\Borland\JBuilder2006\bin;E:\Borland\JBuilder2006\jdk1.5\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Adobe\AGL;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;D:\project\mysql\bin;C:\jdk16\bin;C:\Program Files\IDM Computer Solutions\UltraEdit\;E:\Borland\JBuilder2006\debug\sa;E:\Borland\JBuilder2006\lib java.specification.name : Java Platform API Specification java.class.version : 50.0 sun.management.compiler : HotSpot Client Compiler os.version : 5.1 user.home : C:\Documents and Settings\Administrator user.timezone : java.awt.printerjob : sun.awt.windows.WPrinterJob file.encoding : GBK java.specification.version : 1.6 java.class.path : D:\project\MySQLTest\classes;D:\project\lib\mysql_jdbc5.1_forjdbc40\mysql517.jar;E:\Borland\JBuilder2006\thirdparty\junit3.8\junit.jar;E:\Borland\JBuilder2006\lib\unittest.jar;C:\jdk16\jre\lib\deploy.jar;C:\jdk16\jre\lib\charsets.jar;C:\jdk16\jre\lib\javaws.jar;C:\jdk16\jre\lib\plugin.jar;C:\jdk16\jre\lib\jce.jar;C:\jdk16\jre\lib\ext\sunpkcs11.jar;C:\jdk16\jre\lib\ext\sunjce_provider.jar;C:\jdk16\jre\lib\ext\sunmscapi.jar;C:\jdk16\jre\lib\ext\localedata.jar;C:\jdk16\jre\lib\ext\dnsns.jar;C:\jdk16\jre\lib\im\thaiim.jar;C:\jdk16\jre\lib\im\indicim.jar;C:\jdk16\jre\lib\rt.jar;C:\jdk16\jre\lib\jsse.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-core-output2.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-nodes.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-core-execution.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-sendopts.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-dialogs.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-awt.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-favorites.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-options.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-execution.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-swing-plaf.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-swing-tabcontrol.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-core.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-text.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-editor-mimelookup-impl.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-compat.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-progress-ui.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-autoupdate-ui.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-loaders.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-javahelp.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-settings.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-util-enumerations.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-io.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-queries.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-actions.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-api-progress.jar;C:\jdk16\lib\visualvm\platform7\modules\ext\swing-layout-1.0.3.jar;C:\jdk16\lib\visualvm\platform7\modules\ext\script-api.jar;C:\jdk16\lib\visualvm\platform7\modules\ext\updater.jar;C:\jdk16\lib\visualvm\platform7\modules\ext\jh-2.0_05.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-editor-mimelookup.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-applemenu.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-core-ui.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-options-keymap.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-options-api.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-windows.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-masterfs.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-core-multiview.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-core-windows.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-templates.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-modules-autoupdate-services.jar;C:\jdk16\lib\visualvm\platform7\modules\org-netbeans-api-visual.jar;C:\jdk16\lib\visualvm\platform7\modules\org-openide-explorer.jar;C:\jdk16\lib\visualvm\platform7\core\core.jar;C:\jdk16\lib\visualvm\platform7\core\org-openide-filesystems.jar;C:\jdk16\lib\visualvm\platform7\lib\org-openide-modules.jar;C:\jdk16\lib\visualvm\platform7\lib\org-openide-util.jar;C:\jdk16\lib\visualvm\platform7\lib\boot.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-jvm.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-threaddump.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-host.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-tools.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-jvmstat.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-application-views.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-heapdump.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-modules-appui.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-jmx.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-application.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-core.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-sa.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-attach.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-coredump.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-host-views.jar;C:\jdk16\lib\visualvm\visualvm\modules\com-sun-tools-visualvm-profiler.jar;C:\jdk16\lib\visualvm\visualvm\core\com-sun-tools-visualvm-modules-startup.jar;C:\jdk16\lib\visualvm\profiler2\lib\jfluid-server-15.jar;C:\jdk16\lib\visualvm\profiler2\lib\jfluid-server.jar;C:\jdk16\lib\visualvm\profiler2\modules\org-netbeans-lib-profiler.jar;C:\jdk16\lib\visualvm\profiler2\modules\org-netbeans-lib-profiler-common.jar;C:\jdk16\lib\visualvm\profiler2\modules\org-netbeans-lib-profiler-ui.jar;C:\jdk16\lib\visualvm\profiler2\modules\org-netbeans-modules-profiler.jar;C:\jdk16\lib\tools.jar;C:\jdk16\lib\dt.jar;C:\jdk16\lib\jconsole.jar;C:\jdk16\lib\htmlconverter.jar;C:\jdk16\sample\jnlp\servlet\jardiff.jar;C:\jdk16\sample\jnlp\servlet\jnlp.jar;C:\jdk16\sample\jnlp\servlet\jnlp-servlet.jar;C:\jdk16\demo\jfc\Java2D\Java2Demo.jar;C:\jdk16\demo\jfc\CodePointIM\CodePointIM.jar;C:\jdk16\demo\plugin\jfc\Java2D\Java2Demo.jar;C:\jdk16\demo\plugin\jfc\CodePointIM\CodePointIM.jar;C:\jdk16\demo\scripting\jconsole-plugin\jconsole-plugin.jar user.name : Administrator java.vm.specification.version : 1.0 java.home : C:\jdk16\jre sun.arch.data.model : 32 user.language : zh java.specification.vendor : Sun Microsystems Inc. awt.toolkit : sun.awt.windows.WToolkit java.vm.info : mixed mode, sharing java.version : 1.6.0_07 java.ext.dirs : C:\jdk16\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext sun.boot.class.path : C:\jdk16\jre\lib\resources.jar;C:\jdk16\jre\lib\rt.jar;C:\jdk16\jre\lib\sunrsasign.jar;C:\jdk16\jre\lib\jsse.jar;C:\jdk16\jre\lib\jce.jar;C:\jdk16\jre\lib\charsets.jar;C:\jdk16\jre\classes java.vendor : Sun Microsystems Inc. file.separator : \ java.vendor.url.bug : http://java.sun.com/cgi-bin/bugreport.cgi sun.io.unicode.encoding : UnicodeLittle sun.cpu.endian : little sun.desktop : windows sun.cpu.isalist : ========================================================================= ========================================================================= Connection String: String dbUrl = "jdbc:mysql://localhost:6033/test?user=root&password=test12"; ========================================================================= ========================================================================= Source code of BlobTest.java: package testsuite.simple; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import testsuite.BaseTestCase; /** * Tests BLOB functionality in the driver. * * @author Mark Matthews * @version $Id$ */ public class BlobTest extends BaseTestCase { private static File testBlobFile; static { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { for (int i = 0; i < 5; i++) { try { if (testBlobFile.delete()) { break; } } catch (Throwable t) { } } } }); } /** * Creates a new BlobTest object. * * @param name * the test to run */ public BlobTest(String name) { super(name); } /** * Runs all test cases in this test suite * * @param args */ public static void main(String[] args) { junit.textui.TestRunner.run(BlobTest.class); } /** * Setup the test case * * @throws Exception * if an error occurs */ public void setUp() throws Exception { super.setUp(); if (versionMeetsMinimum(4, 0)) { int requiredSize = 32 * 1024 * 1024; if (testBlobFile == null || testBlobFile.length() != requiredSize) { createBlobFile(requiredSize); } } else { int requiredSize = 8 * 1024 * 1024; if (testBlobFile == null || testBlobFile.length() != requiredSize) { createBlobFile(requiredSize); } } createTestTable(); } /** * Destroy resources created by test case * * @throws Exception * if an error occurs */ public void tearDown() throws Exception { try { this.stmt.executeUpdate("DROP TABLE IF EXISTS BLOBTEST"); } catch (Exception e) { e.printStackTrace(); } finally { super.tearDown(); } } public void testByteStreamInsert() throws Exception { testByteStreamInsert(this.conn); } /** * Tests inserting blob data as a stream * * @throws Exception * if an error occurs */ private void testByteStreamInsert(Connection c) throws Exception { BufferedInputStream bIn = new BufferedInputStream(new FileInputStream( testBlobFile)); this.pstmt = c .prepareStatement("INSERT INTO BLOBTEST(blobdata) VALUES (?)"); this.pstmt.setBinaryStream(1, bIn, (int) testBlobFile.length()); this.pstmt.execute(); this.pstmt.clearParameters(); doRetrieval(); } private boolean checkBlob(byte[] retrBytes) throws Exception { boolean passed = false; BufferedInputStream bIn = new BufferedInputStream(new FileInputStream( testBlobFile)); try { int fileLength = (int) testBlobFile.length(); if (retrBytes.length == fileLength) { for (int i = 0; i < fileLength; i++) { byte fromFile = (byte) (bIn.read() & 0xff); if (retrBytes[i] != fromFile) { passed = false; System.out.println("Byte pattern differed at position " + i + " , " + retrBytes[i] + " != " + fromFile); for (int j = 0; (j < (i + 10)) /* && (j < i) */; j++) { System.out.print(Integer .toHexString(retrBytes[j] & 0xff) + " "); } break; } passed = true; } } else { passed = false; System.out.println("retrBytes.length(" + retrBytes.length + ") != testBlob.length(" + fileLength + ")"); } return passed; } finally { if (bIn != null) { bIn.close(); } } } private void createTestTable() throws Exception { // // Catch the error, the table might exist // try { this.stmt.executeUpdate("DROP TABLE BLOBTEST"); } catch (SQLException SQLE) { ; } this.stmt .executeUpdate("CREATE TABLE BLOBTEST (pos int PRIMARY KEY auto_increment, " + "blobdata LONGBLOB)"); } /** * Mark this as deprecated to avoid warnings from compiler... * * @deprecated * * @throws Exception * if an error occurs retrieving the value */ private void doRetrieval() throws Exception { boolean passed = false; this.rs = this.stmt .executeQuery("SELECT blobdata from BLOBTEST LIMIT 1"); this.rs.next(); byte[] retrBytes = this.rs.getBytes(1); passed = checkBlob(retrBytes); assertTrue( "Inserted BLOB data did not match retrieved BLOB data for getBytes().", passed); retrBytes = this.rs.getBlob(1).getBytes(1L, (int) this.rs.getBlob(1).length()); passed = checkBlob(retrBytes); assertTrue( "Inserted BLOB data did not match retrieved BLOB data for getBlob().", passed); InputStream inStr = this.rs.getBinaryStream(1); ByteArrayOutputStream bOut = new ByteArrayOutputStream(); int b; while ((b = inStr.read()) != -1) { bOut.write((byte) b); } retrBytes = bOut.toByteArray(); passed = checkBlob(retrBytes); assertTrue( "Inserted BLOB data did not match retrieved BLOB data for getBinaryStream().", passed); inStr = this.rs.getAsciiStream(1); bOut = new ByteArrayOutputStream(); while ((b = inStr.read()) != -1) { bOut.write((byte) b); } retrBytes = bOut.toByteArray(); passed = checkBlob(retrBytes); assertTrue( "Inserted BLOB data did not match retrieved BLOB data for getAsciiStream().", passed); inStr = this.rs.getUnicodeStream(1); bOut = new ByteArrayOutputStream(); while ((b = inStr.read()) != -1) { bOut.write((byte) b); } retrBytes = bOut.toByteArray(); passed = checkBlob(retrBytes); assertTrue( "Inserted BLOB data did not match retrieved BLOB data for getUnicodeStream().", passed); } private final static String TEST_BLOB_FILE_PREFIX = "cmj-testblob"; private void createBlobFile(int size) throws Exception { if (testBlobFile != null && testBlobFile.length() != size) { testBlobFile.delete(); } testBlobFile = File.createTempFile(TEST_BLOB_FILE_PREFIX, ".dat"); testBlobFile.deleteOnExit(); cleanupTempFiles(testBlobFile, TEST_BLOB_FILE_PREFIX); BufferedOutputStream bOut = new BufferedOutputStream( new FileOutputStream(testBlobFile)); int dataRange = Byte.MAX_VALUE - Byte.MIN_VALUE; for (int i = 0; i < size; i++) { bOut.write((byte) ((Math.random() * dataRange) + Byte.MIN_VALUE)); } bOut.flush(); bOut.close(); } } ========================================================================