高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例一全网唯一

高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例一全网唯一

高级Java开发工程师手把手教你用AI人工智能帮你写Java代码实际案例一

一、前言

现在AI人工智能概念炒的很火,人们到处听到的讯息是AI人工智能颠覆我们的生活,或者是代替什么岗位,但是到底AI能帮助到我们什么,能给我们生活带来什么?可能我们普通人没有能真正的感知到!笔者本身就是一个多年研发经验的JAVA工程师,笔者把实际工作过程中,运用的简单场景分解成简单的教案共享到社会中,希望能让更多的IT从业者能享受到人工智能带来的巨大福利!

二、 AI人工智能是什么

人工智能把它看成是一个巨大的无限的机器人或者是巨型的知识库,它能是模拟人类的神经大脑的一个创造的巨大的机器人,它可以通过自主学习与训练变得知识变得越来越丰富!我们普通人就帮它看成一个机器人即可!这个机器人可以协助你帮助你做一些工作、生活的事情,你要指导它、训练它让它为你所用!我们都看过施瓦辛格《未来战士》的天网,AI类似于天网的概念!你可能从脑子里想象你可以给他对话,他是你的管家!很多电影都有类似这些场景!笔者主要是从实际运用出发!就是生活中我们怎么运用到人工智能!

三、AI人工智能平台的选取“通义千问”

作者的课程主要用到AI平台是
通义千问
通义千问是阿里云研发的一款超大规模预训练语言模型,能够进行多轮对话、文案创作、逻辑推理、多模态理解及多语言支持等功能。4月7日,阿里云通义千问开源320亿参数模型Qwen1.5-32B,加上此前已经开源的5亿、18亿、40亿、70亿、140亿和720亿参数的六款大语言模型,至此凑齐阿里云的开源“葫芦娃”家族。
通义千问可应用于客户服务、在线教育、内容创作、智能搜索等诸多领域,通过与用户进行自然对话的方式提供帮助和服务。

https://tongyi.aliyun.com/qianwen/ 

在这里插入图片描述
在这里插入图片描述

四、实际案例场景

(一)实际需求:

实际工作需要写一个简单ETL工具,也就是将Mysql数据库读出来用jdbc插入到clickhouse数据库!

(二)与AI描述需求口令

这个相当于是代码逻辑需求讲述口令,这个口令是要了解计算机编程原理的,你要引领AI,所以你首先要有很明确的思路!

步骤思路引导1
口令1:帮我用java代码生成JDBC接口一个插入clickhouse数据库的实际代码例子 

这个口令要明确说出用什么语言,用什么接口,先要一个比较范围大的概念,然后按实际生成代码调试过程,让AI帮你修改,改进,当然真正负责调整检查的也是你!AI只是干活的!

在这里插入图片描述

简单的代码生成了,你拿着代码去自己的JAVA编辑器跑跑!
并跑通了!

步骤思路引导2

然后自己根据最简单的AI编码封装一个通用的方法这个还是需要自己做的,稍微改改!

 public static int update(Connection conn, String sql, ArrayList paraList) throws Exception { 
    int result = 0; try { 
    PreparedStatement ps = null; ps = conn.prepareStatement(sql); if (paraList != null && paraList.size() > 0) { 
    for (int i = 0; i < paraList.size(); i++) { 
    ps.setObject(i + 1, paraList.get(i)); } } result = ps.executeUpdate(); if (ps != null) { 
    ps.close(); } } catch (Exception ex) { 
    LogUtil.exceptionPrint(log, ex); throw new Exception(ex); } return result; } 

然后我在跑跑代码跑通了!这个方法可以并入到我的项目的工具类里面!
但是笔者觉得这个代码,单独插入可以跑,作者还想用批处理提升一下性能,再封装一个方法!

直接将代码复制给AI,让它阅读!

在这里插入图片描述

注意:上方是代码,下方是描述,要一起发给AI,描述要准确,要不断根据实际需求修改描述,因为AI可能理解的不正确,或者它生成出来的不是你想要的!

步骤思路引导3

口令2 :这个是一个JAVA插入clickhouse JDBC的方法,我写让你帮我改进代码,用批处理实现,提升插入性能,每批5000条 

在这里插入图片描述
AI回答的方法按我们的需求改进好了,我们把代码copy到自己项目的工具类跑跑!

下面是AI回答的内容:

好的,针对您的需求,这里是一个改进版的Java方法,该方法利用了ClickHouse JDBC驱动的批量处理功能来提高插入性能,每次批量插入5000条记录。请注意,ClickHouse的JDBC驱动支持批量插入,但具体的批量大小可能需要根据实际负载和系统配置进行调整。

import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class ClickhouseBatchInsertExample { 
    public static int batchUpdate(Connection conn, String sql, ArrayList<Object[]> paraList) throws SQLException { 
    int[] results; PreparedStatement ps = null; try { 
    ps = conn.prepareStatement(sql); // 分批次执行 int batchSize = 5000; int batches = (int) Math.ceil((double) paraList.size() / batchSize); for (int batchIndex = 0; batchIndex < batches; batchIndex++) { 
    int startIndex = batchIndex * batchSize; int endIndex = Math.min(startIndex + batchSize, paraList.size()); for (int i = startIndex; i < endIndex; i++) { 
    Object[] params = paraList.get(i); for (int paramIndex = 0; paramIndex < params.length; paramIndex++) { 
    ps.setObject(paramIndex + 1, params[paramIndex]); } ps.addBatch(); } // 执行当前批次的插入 results = ps.executeBatch(); } // 计算总共受影响的行数 int totalRowsAffected = 0; for (int r : results) { 
    totalRowsAffected += r; } return totalRowsAffected; } catch (BatchUpdateException buex) { 
    // 处理批量更新时可能出现的错误 int[] updateCounts = buex.getUpdateCounts(); int failedRowIndex = buex.getErrorCode(); // 这里仅打印错误信息,实际应用中可能需要更详细的错误处理逻辑 LogUtil.error(log, "批量插入发生错误,失败于第{}条记录", failedRowIndex); throw buex; } finally { 
    if (ps != null) { 
    try { 
    ps.close(); } catch (SQLException ignored) { 
    // 忽略关闭异常 } } } } } // 使用示例: ArrayList<Object[]> paraList = ... // 假设这是你的参数列表,每个素都是一个Object数组,对应一条记录的所有字段值 String sql = "INSERT INTO your_table (column1, column2, column3) VALUES (?, ?, ?)"; try { 
    int rowsAffected = batchUpdate(connection, sql, paraList); System.out.println("总共插入了 " + rowsAffected + " 条记录."); } catch (SQLException ex) { 
    LogUtil.exceptionPrint(log, ex); } 

步骤思路引导4

在这个版本中,我们遍历参数列表并将它们分批添加到PreparedStatement的批处理队列中,然后一次性执行整个批次的插入操作。同时,在finally块中确保了Statement的关闭,即使在执行过程中出现异常也能保证资源的释放。最后,还处理了可能出现的BatchUpdateException,以便捕获并报告批量插入过程中的任何错误。

在这里插入图片描述
把AI生成的代码复制到自己项目里面也是要人工调整的,AI生成的代码也不是全部正确的,也是的需要有开发基础的,去人工的调试,解决,修改AI生成的代码的!可能遇到有些类引入不到,或者是有些变量不对,异常捕获机制,参数,自己修改!

在这里插入图片描述

步骤思路引导5

我们还需要修改一下这个工具方法的参数

口令3:帮我把这个JAVA方法的ArrayList<Object[]> paraList改成List<ArrayList<Object>> paraList,帮我改下代码 

AI回复的内容:

public int batchUpdate(Connection conn, String sql, List<ArrayList<Object>> paraList) { 
    PreparedStatement ps = null; int[] results = null; try { 
    ps = conn.prepareStatement(sql); // 分批次执行 int batchSize = 5000; int batches = (int) Math.ceil((double) paraList.size() / batchSize); for (int batchIndex = 0; batchIndex < batches; batchIndex++) { int startIndex = batchIndex * batchSize; int endIndex = Math.min(startIndex + batchSize, paraList.size()); for (int i = startIndex; i < endIndex; i++) { 
    ArrayList<Object> params = paraList.get(i); for (int paramIndex = 0; paramIndex < params.size(); paramIndex++) { 
    ps.setObject(paramIndex + 1, params.get(paramIndex)); } ps.addBatch(); } // 执行当前批次的插入 results = ps.executeBatch(); } // 计算总共受影响的行数 int totalRowsAffected = 0; for (int r : results) { 
    totalRowsAffected += r; } return totalRowsAffected; } catch (Exception ex) { 
    // 这里仅打印错误信息,实际应用中可能需要更详细的错误处理逻辑 LogUtil.exceptionPrint(log, ex); } finally { 
    if (ps != null) { 
    try { 
    ps.close(); } catch (SQLException ignored) { 
    // 忽略关闭异常 } } } return 0; } 

重复的步骤再粘贴到自己项目跑一跑,然后修改报错,自己再调试,最终解决问题!

笔者经过测试验证,这段代码是真正可以跑的,并且执行成功!

五、让人工智能帮你解答你的代码错误或运行中遇到的问题案例

上述代码确实能执行,但是执行过程中又遇到新的问题!

原始代码执行过程中遇到报错,执行一会批处理之后,报错!

 java.sql.SQLException: statement is closed 

我的提问如下(代码附上,然后问题要针对性并且说明核心问题):

 for (int i = startIndex; i < endIndex; i++) { ArrayList<Object> params = paraList.get(i); for (int paramIndex = 0; paramIndex < params.size(); paramIndex++) { ps.setObject(paramIndex + 1, params.get(paramIndex)); } ps.addBatch(); } // 执行当前批次的插入 results = ps.executeBatch(); } // 计算总共受影响的行数 int totalRowsAffected = 0; for (int r : results) { totalRowsAffected += r; } return totalRowsAffected; } catch (Exception ex) { // 这里仅打印错误信息,实际应用中可能需要更详细的错误处理逻辑 LogUtil.exceptionPrint(log, ex); } finally { if (ps != null) { try { ps.close(); } catch (SQLException ignored) { // 忽略关闭异常 } } } return 0; 

}这段代码执行一会之后 java.sql.SQLException: statement is closed报错,帮我想想解决办法

口令:这段代码执行一会之后 java.sql.SQLException: statement is closed报错,帮我想想解决办法 

AI的回答如下:

这个报错“java.sql.SQLException: statement is closed”通常意味着在尝试访问或操作PreparedStatement对象(ps)时,该对象已经被关闭。在这个代码片段中,尽管finally块中包含了关闭PreparedStatement的逻辑,但在某些情况下可能在执行完executeBatch后就提前关闭了PreparedStatement。

为了解决这个问题,确保在所有批次都执行完毕后再关闭PreparedStatement,可以将关闭PreparedStatement的代码移到finally块之外,放在for循环之后:

public static int batchUpdate(Connection conn, String sql, List<ArrayList<Object>> paraList) { 
    PreparedStatement ps = null; int[] results = null; try { 
    ps = conn.prepareStatement(sql); // 分批次执行 int batchSize = 5000; int batches = (int) Math.ceil((double) paraList.size() / batchSize); for (int batchIndex = 0; batchIndex < batches; batchIndex++) { 
    // ...(中间批次处理代码不变) // 执行当前批次的插入 results = ps.executeBatch(); } // 计算总共受影响的行数 int totalRowsAffected = 0; for (int r : results) { 
    totalRowsAffected += r; } } catch (Exception ex) { 
    LogUtil.exceptionPrint(log, ex); } finally { 
    if (ps != null) { 
    try { 
    // 移动到此处关闭PreparedStatement ps.close(); } catch (SQLException ignored) { 
    // 忽略关闭异常 } } } return totalRowsAffected; // 直接返回totalRowsAffected,无需在finally块外再返回0 } 

另外,为了更好地处理可能出现的异常情况,可以在每个批次执行后检查是否存在异常,并根据需要采取相应的措施,而不是等到最后才抛出异常。例如,可以在每次executeBatch后增加try-catch逻辑,如果某一批次出现异常,则记录异常并决定是否继续执行后续批次。

AI已经反馈出代码的执行逻辑错误了,老办法,还是粘贴到自己的项目中跑一跑再试试!!
在这里插入图片描述
还是有些细微的错误,变量没有 声明!自己帮AI改改,问题不大!
在这里插入图片描述
AI居然也会偷懒,这段代码居然没有从源代码带过来,AI真可怕!偷懒!谁训练它学会省略的意识的!!!!!

六、人工智能改变生活的笔者总结

你给AI口令,让它生成代码,然后你再修改代码,然后你把代码不断回馈给AI,让它读懂之后,再不断的完善!最终达到目标,让你拿到你要的代码!前提是,你能引领AI,你需要有编程的思路与基础!而且你的口令描述要很具体并且要带有计算机AI可以读懂的逻辑描述!这个笔者会在今后的文章中拿更多的案例讲述!希望大家多关注!!
笔者经过测试验证,这段代码已经真正用到我的ETL项目中,并且再生产中执行,AI人工智能帮我真正提升了工作效率,笔者觉得有AI的加持,笔者的编程水平从有限变成了无限,因为AI是无限自主学习的,它的编程水平肯定高过我们任意一个人,但是我们掌握着逻辑也灵性,我们才是驾驭人工智能的第一批先驱人类,跟笔者一起学习吧!

七、笔者简介

国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

在这里插入图片描述

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/168669.html

(0)
上一篇 2024年 7月 2日 下午4:28
下一篇 2024年 7月 2日 下午4:36

相关推荐

关注微信