的最佳通常-MySQL-衔接-解密-Java-决定最适宜你的模式 (最佳什么)
衔接是开发中十分经常出现的义务之一。上方将为您引见衔接MySQL的最佳通常,并提供一些实用于不同状况的方法决定。
Java衔接MySQL的模式有多种,上方咱们将一一引见这些模式,并探讨它们的优劣和实用场景。
1、经常使用JDBC驱动程序衔接MySQL:JDBC(Java>1)、导入MySQLJDBC驱动程序依赖。
2)、加载驱动程序类,即加载com.mysql.cj.jdbc.Driver类。
3)、创立数据库衔接URL,指定数据库主机名、端口、数据库称号等消息。
4)、经常使用用户名和明码建设数据库衔接。
5)、口头SQL查问或降级操作。
6)、封锁衔接。
这种模式的好处是便捷直接,并且是Java衔接MySQL的规范方法。它实用于大少数便捷的数据库衔接和操作需求。
示例代码如下:
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassJDBCExample{publicstaticvoidmn(String[]args)throwsSQLException{Connectionconnection=null;try{//加载MySQL驱动程序Class.forName("com.mysql.cj.jdbc.Driver");//创立衔接Stringurl="jdbc:mysql://localhost:3306/mydatabase";Stringusername="root";Stringpass="password";connection=DriverManager.getConnection(url,username,password);//口头查问或降级操作}catch(ClassNotFoundExceptione){e.printStackTrace();}finally{//封锁衔接if(connection!=null){connection.close();}}}}
2、经常使用衔接池衔接MySQL:衔接池是一种治理和复用数据库衔接的技术。经常使用衔接池可以提高性能,并防止频繁创立和封锁数据库衔接的开支。
在Java中,咱们可以经常使用一些成熟的数据库衔接池成功,如CommonsDBCP、HikariCP等来衔接MySQL。这些衔接池提供了各种性能选项,以满足不同的需求。
经常使用衔接池衔接MySQL的步骤如下:
1)、导入衔接池依赖。
2)、性能衔接池参数,如最大衔接数、最小衔接数等。
3)、创立衔接池对象。
4)、从衔接池中失掉衔接。
5)、口头SQL查问或降级操作。
6)、封锁衔接。
这种模式的好处是能够提高性能,并且关于频繁的数据库访问十分有效。它实用于须要高并发和高性能的场景。
示例代码如下(经常使用HikariCP衔接池):
importcom.zaxxer.hikari.HikariConfig;importcom.zaxxer.hikari.HikariDataSource;importjava.sql.Connection;importjava.sql.SQLException;publicclassConnectionPoolExample{publicstaticvoidmain(String[]args)throwsSQLException{HikariConfigconfig=newHikariConfig();//性能衔接池参数config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");config.setUsername("root");config.setPassword("password");//创立衔接池HikariDataSource>3、经常使用ORM框架衔接MySQL:ORM(Object-RelationalMing)框架是一种将对象和相关数据库启动映射的技术。经过经常使用ORM框架,咱们可以经过操作Java对象来直接地操作数据库。在Java中,有很多盛行的ORM框架可供决定,如Hibernate、等。这些框架提供了初级的对象耐久化性能,并且可以智能生成基于数据库表的Java实体类。
经常使用ORM框架衔接MySQL的步骤如下:
1)、导入ORM框架依赖。
2)、性能框架,包含数据库衔接消息、实体类映射等。
3)、创立数据库会话工厂或会话治理器对象。
4)、从会话工厂或会话治理器中失掉数据库会话对象。
5)、口头ORM操作,如查问、拔出、降级等。
6)、关开会话。
这种模式的好处是提供了初级的对象耐久化性能,并且可以简化数据库操作。它实用于须要高度形象和灵敏性的场景。
示例代码如下(经常使用HibernateORM框架):
importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configuration;publicclassHibernateExample{publicstaticvoidmain(String[]args){SessionFactorysessionFactory=null;Sessionsession=null;Transactiontransaction=null;try{//加载Hibernate性能文件Configurationconfiguration=newConfiguration().configure();//创立SessionFactorysessionFactory=configuration.buildSessionFactory();//创立Sessionsession=sessionFactory.openSession();//开启事务transaction=session.beginTransaction();//口头ORM操作//提交事务transaction.commit();}catch(Exceptione){if(transaction!=null){transaction.rollback();}e.printStackTrace();}finally{//封锁Sessionif(session!=null){session.close();}//封锁SessionFactoryif(sessionFactory!=null){sessionFactory.close();}}}}
衔接MySQL是Java开发中经常出现的义务之一。以引见了三种衔接MySQL的模式:经常使用JDBC驱动程序、经常使用衔接池和经常使用ORM框架。每种模式都有其好处和实用场景。依据实践需求和名目规模,决定适宜自己的模式来衔接MySQL,并依照最佳通常启动性能和经常使用。
无论决定哪种模式,咱们都倡导经常使用衔接池来治理数据库衔接,以提高性能并防止资源走漏。另外,在处置数据库衔接时,还须要留意正确封锁衔接,防止形成衔接走漏和资源占用。
学习Java最重要的是什么
Java前景是很不错的,像Java这样的专业还是一线城市比较好,师资力量跟得上、就业的薪资也是可观的,学习Java可以按照路线图的顺序,
0基础学习Java是没有问题的,关键是找到靠谱的Java培训机构,你可以深度了解机构的口碑情况,问问周围知道这家机构的人,除了口碑再了解机构的以下几方面:
1. 师资力量雄厚
要想有1+1>2的实际效果,很关键的一点是师资队伍,你接下来无论是找个工作还是工作中出任哪些的人物角色,都越来越爱你本身的技术专业java技术性,也许的技术专业java技术性则绝大多数来自你的技术专业java教师,一个好的java培训机构必须具备雄厚的师资力量。
2. 就业保障完善
实现1+1>2效果的关键在于能够为你提供良好的发展平台,即能够为你提供良好的就业保障,让学员能够学到实在实在的知识,并向java学员提供一对一的就业指导,确保学员找到自己的心理工作。
3. 学费性价比高
一个好的Java培训机构肯定能给你带来1+1>2的效果,如果你在一个由专业的Java教师领导并由Java培训机构自己提供的平台上工作,你将获得比以往更多的投资。
希望你早日学有所成。
怎么把mysql数据库中现有的数据进行des加密,加密后的结果和java中des加密的结果一样。
最近需要对数据进行加密/解密, 因此选用了CryptoJS库, 对数据做DES算法的加密/解密首选查看官方示例, 将密文进行Base64编码, 掉进一个大坑<script src=htt p:/ / e.c om/svn/tags/3.1.2/build/rollups/></script><script>var encrypted = (Message, Secret Passphrase);// ciphertext changed every time you run it// 加密的结果不应该每次都是一样的吗?((), (64));var decrypted = (encrypted, Secret Passphrase);((8));</script>对这些加密算法不了解, 只能求助Googledes encrypion: js encrypted value does not match the java encrypted valueIn cryptoJS you have to convert the key to hex and useit as word just like above (otherwise it will be considered as passphrase)For the key, when you pass a string, its treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key.原来是我指定key的方式不对, 直接将字符串做为参数, 想当然的以为这就是key, 其实不然, CryptoJS会根据这个字符串算出真正的key和IV(各种新鲜名词不解释, 问我也没用, 我也不懂 -_-)那么我们只需要将key和iv对应的字符串转成CryptoJS的WordArray类型, 在DES加密时做为参数传入即可, 这样对Message这个字符串加密, 每次得到的密文都是YOa3le0I+dI=var keyHex = (abcd1234);var ivHex = (inputvec);var encrypted = (Message, keyHex, { iv: ivHex });这样是不是就万事OK了? 哪有, 谁知道这坑是一个接一个啊.我们再试试Java这边的DES加密是不是和这个结果一样, 具体实现请参考Simple Java Class to DES Encrypt Strings果真掉坑里了, Java通过DES加密Message这个字符串得到的结果是8dKft9vkZ4I=和CryptoJS算出来的不一样啊...亲继续求助GoogleC# and Java DES Encryption value are not identicalSunJCE provider uses ECB as the default mode, and PKCS5Padding as the default padding scheme for DES.(JCA Doc)This means that in the case of the SunJCE provider,Cipher c1 = (DES/ECB/PKCS5Padding);andCipher c1 = (DES);are equivalent statements.原来是CryptoJS进行DES加密时, 默认的模式和padding方式和Java默认的不一样造成的, 必须使用ECB mode和PKCS5Padding, 但是CryptoJS中只有Pkcs7, 不管了, 试试看...<script src=htt p:/ / de.c om/svn/tags/3.1.2/build/rollups/></script><script src=ht tp:/ / de.c om/svn/tags/3.1.2/build/components/></script><script>var keyHex = (abcd1234);var encrypted = (Message, keyHex, {mode: ,padding: 7});((), (64));</script>咦...使用Pkcs7能得到和Java DES一样的结果了, 哇塞...好神奇那我们试试统一Java也改成(DES/ECB/PKCS7Padding)试试, 结果得到一个大大的错误: Cannot find any provider supporting DES/ECB/PKCS7Padding没办法, 继续: Cannot find any provider supporting AES/ECB/PKCS7PADDINGI will point out that PKCS#5 and PKCS#7 actually specify exactly the same type of padding (they are the same!), but its called #5 when used in this context. :)这位大侠给出的解释是: PKCS#5和PKCS#7是一样的padding方式, 对加密算法一知半解, 我也只能暂且认可这个解释了.忙完了DES的加密, 接下来就是使用CryptoJS来解密了. 我们需要直接解密DES加密后的base64密文字符串. CryptoJS好像没有提供直接解密DES密文字符串的方法啊, 他的整个加密/解密过程都是内部自己在玩, 解密时需要用到加密的结果对象, 这不是坑我吗?只好研究下CryptoJS DES加密后返回的对象, 发现有一个属性ciphertext, 就是密文的WordArray, 那么解密的时候, 我们是不是只要提供这个就行了呢?var keyHex = (abcd1234);// direct decrypt ciphertextvar decrypted = ({ciphertext: (8dKft9vkZ4I=)}, keyHex, {mode: ,padding: 7});((8));果不其然, 到此为止, 问题全部解决, 豁然开朗...完整代码请参考 CryptoJS encrypt message by DES and direct decrypt ciphertext, compatible with Java (DES)
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。