JDBC初级应用

自己写的一个使用jdbc连接mysql的源代码 自己写的一个使用jdbc连接mysql的源代码,暂时未补充其他的方法,其中内置一个字符串MD5算法的类 立即下载

                                                              JDBC初级应用

    在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会
在这个类的基础上,随着介绍的深入不断提供优化的方案.
    要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面:
    1.对于不同层次的应用,应该有不同的得到连结的方法,如果得到连结的方法要随
着应用层次的不同而改变,我们就应该把他独立成一个专门的类中,而把在任何应用层次
中都通用的处理方法封装到一个(类)Bean中.
    2.既然考虑到既作为javaBean使用又可以用为一个普通类调用,要考虑到javaBean
的规范和普通类的灵活性.
    3.对于特定的数据库操作不应封装到共性的(类)Bean中,而应该成为它的扩展类.

    以上几点是充分考虑JAVA的面象对象的思想,经过深入的抽象形成的层次,下面我
们就按这个思想来设计:
    一:定义一个用于连结的Bean,以后如果要在不同的应用中,如可以在J2EE中从
DataSource中得到连结,或从普通的连结池中得到连结,以及直接从DriverManager中得到
连结,只需修改本类中的得到连结的实现方法.
    package com.imnamg.axman.beans;
    import java.sql.*;
    import ..................
    public class ConnectionFactory{
        protected Connection conn;
        ConnectionFactory() throws SQLException 
        {    //构造方法中生成连结
            //无论是从DataSource还是直接从DriverManager中取得连结.
            //先初始化环境,然后取得连结,本例作为初级应用,从
            //DriverManager中取得连结,因为是封装类,所以要把异常抛
            //给调用它的程序处理而不要用try{}catch(){}块自选处理了.
            //因为要给业务方法的类继承,而又不能给调用都访问,所以
            //conn声明为protected
            conn =     DriverManager.getConnection(url,user,passwd);
        }
        
        /**
            在多线程编程中,很多时候有可能在多个线程体中得到同一连
            结的引用,但如果在一个线程中关闭了连结,则另一个得到相同
            引用的线程就无法操作了,所以我们应该加一个重新建立连结
            的辅助方法,有人问为什么既然有这个辅助方法不直接调用这个
            辅助而要在构造方法中生成连结?因为这样可以增加效率,如果
            在构造时不能生成连结则就不能生成这个对象了,没有必要在
            对象生成后再测试能不能生成连结.
        */
        public void makeConnection(){
            //此处的代码同构造方法,无论以后如果实现连结,都将构造方
            //法的代码复制到此处.
            conn =     DriverManager.getConnection(url,user,passwd);
        }
    }

    这个类就封装到这里,当然你可以在这儿增加业务方法,但如果要修改连结的实现,
整个类都要重新编译,因为业务方法和应用层次无关,代码一经生成不易变动,所以独立封装.
以下我们实现业务方法:

    package com.imnamg.axman.beans;
    import java.sql.*;
    import ..................
    public class DBOperater extends ConnectionFactory{
        //private Statement stmt;
        //private ResultSet rs;
        //为什么要注释成员变量stmt和rs,基础部分已经说过,如果声明为成员变量,
        //在关闭conn时可以显示地先关闭rs和stmt,别的没有任何好处,而显示关
        //闭只是说明你编程风格好,但综合考虑,我们要生成多个stmt或不是类型的
        //stmt就不能声明为成员方法,否则引用同一对象,所以我们要业务方法中生
        //成stmt对象.不仅可以同时处理多个结果集,还可以提高性能和灵活性.

        public ResultSet executeQuery(String sql) throws SQLException{
            if(conn==null || conn.isClosed())
                makeConnection();
            Statement stmt = con.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                                         ResultSet.CONCUR_READ_ONLY);
            //对于一般的查询操作,我们只要生成一个可流动的结果集就行了.
            //而对于在查询时要更新记录,我们用另一个业务方法来处理,这样,
            //这样可以在普通查询时节省回滚空间.
            ResultSet rs = stmt.executeQuery(sql);
            return rs;
        }
        

        public ResultSet executeUpdatabledQuery(String sql) throws SQLException{
            if (con == null || con.isClosed())
                makeConnection();
            Statement stmt = con.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLED);
            //可更新的结果结要更大的回滚空间,普通查询时不要调用这个方法
            ResultSet rs = stmt.executeQuery(sql);
            return rs;
        }

        /**
            基于同上的原因,在执行更新操作是我们根本不要任何回滚空间,所以建立
            一个基本类型的stmt,实现如下
        */



        public int executeUpdate(String sql) throws SQLException{
            if (con == null || con.isClosed()) 
                makeConnection();
            Statement stmt = con.createStatement();
            //这个stmt在执行更新操作时更加节省内存,永远记住,能节省的时候要节省
            //每一个字节的内存,虽然硬件设备可能会有很大的物理内存,但内存是给用
            //户用的而不是给程序员用的(!!!!!!!!!!!!!!!!!!)
            int s = stmt.executeUpdate(sql);
            return s;
        }

        //以上实现了常用功能,还有两个通用的功能也是"共性"的,我们一起在这个封装类
        //中实现:
        public PreparedStatement getPreparedStmt(String sql) throws SQLException{
            if (con == null || con.isClosed()) 
                makeConnection();
            PreparedStatement ps = con.prepareStatement(sql);
            return ps;
        }
        public CallableStatement getCallableStmt(String sql) throws SQLException{
            if (con == null || con.isClosed()) 
                makeConnection();
            PreparedStatement ps = con.prepareCall(sql);
            return ps;
        }

        //记住:对于封装类而言预编译语句和存储过程调用应该从连结中返PreparedStatement
        //和CallableStatement供调用者处理而不是返回它们的处理结果.也就是说封装类只封
        //装了它们的连结过程.最后再次声明,一定要有一个close()方法供调用者调用,而且告
        //诉调用者无论如果要调用这个方法:

        public void close() throws SQLException{
            if(conn != null && !conn.isClosed())
                conn.close();
        }
        //这个方法最好放在ConnectionFactory中,这样可以直接调用来只测试连结.而不用再
        调用子类来关闭
    }

    OK,我们已经实现了数据库常用操作的封装,注意这些业务方法都是把异常抛给调用者而没有用
try...catch来处理,你如果在这里处理了那么调用者则无法调试了.对于特定的数据库的特殊操作,不要封
装到此类中,可以再从这个类继承,或直接从ConnectionFactory类继承,当然最好是从这个业务类中继承,
这样不仅可以调用特殊方法也可以调用共性的业务方法,兴一个例子,我在应用Oracle时要把XML文件直接
存到数据数和把数据直接读取为XML文件,那么这两个方法只对Oracle才用到,所以:

    package com.inmsg.axman.beans;

    import java.sql.*;
    import oracle.xml.sql.query.OracleXMLQuery;
    import oracle.xml.sql.dml.OracleXMLSave;
    
    public class OracleDBOperater extends DBOperater{
         public OracleXMLQuery getOXQuery(String sql,String table) throws Exception
                 {
                         OracleXMLQuery qry = new OracleXMLQuery(con,sql);
                         qry.setRowsetTag(table);
                         qry.setRowTag("RECORD");
                         return qry;
                 }
                 public int insertXML(String path,String table) throws Exception
                 {
                         OracleXMLSave sav = new OracleXMLSave(con,table);
                         URL url = sav.createURL(path);
                         sav.setRowTag("RECORD");
                         int x = sav.insertXML(url);
                         sav.close();
                         return x;
                 }
    }

    现在,有了这样的几个"东西"在手里,你还有什么觉得不方便的呢?
    虽然本处作为初级应用,但设计思想已经是JAVA高手的套路了,是不是有些自吹自擂了啊?
好的,休息一下吧.
 

C++实现设计ATM机系统 这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM========= 阅读详情

相关推荐

提高机器学习模型准确率的八大方法

原文连接:http://www.techweb.com.cn/network/system/2016-01-27/2269274.shtml 此文仅是一个小品文,详细理论请读论文,参考书籍。 前言:我的概述 机器学习面对的是一个受限有穷空间 到 一个扩大的有穷空间 的泛化问题。若假设空间足以覆盖真实的数据空间,机器学习方法可以弃之不...

alppkk4545的博客 1301

数据库开发基础案例——JDBC技术应用

在数据库中,数据是以表(Table)为单位进行组织的。数据表由列(column)组成,通过列名和数据类型等来指定列的属性,数据表的每一列存储了表中某一类特定的信息,如学号或者姓名等。列(column)也可以叫做数据表的一个字段,列(column)的名字也叫做字段名;表中的数据是按行(row)进行存储的,每一行代表一条数据记录。

weixin_51970555的博客 4014

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3359

JDBC应用最全笔记(附带案例)

对JDBC的理解与应用 以及连接并操作数据库实现增删改查的步骤、SQL注入问题、两种连接池的使用、事务实现、批处理、对Dbutils的理解与使用、Dao封装详细步骤、以及项目的三层架构的理解和特点。。

PIKapikaaaa的博客 1426

避开这些坑!医疗影像数据增强的6个安全操作指南(附PyTorch代码)

本文详细介绍了医疗影像数据增强的六大安全准则,包括解剖结构守恒、密度值物理意义保留和病灶特征保护等关键原则,并提供了PyTorch实战代码。通过具体案例和参数建议,帮助开发者在肺结节检测和MRI分割等医疗AI应用中实现安全有效的数据增强,避免因不当操作导致的诊断误差。

cola5的博客 555

GPU算力租用平台推荐

阿里云作为中国领先的云计算服务提供商,提供了丰富的GPU云服务器实例,包括NVIDIA Tesla V100、A100等多种高性能GPU型号。阿里云GPU云服务器适用于深度学习、科学计算、图形渲染等多种场景,能够满足不同用户的计算需求。

hong161688的博客 8177

JDBC案例

【代码】JDBC案例。

meini32的博客 699

AI智能体协作:构建更精准的公司破产预测模型

公司破产预测对于金融机构、投资者和监管部门等具有至关重要的意义。准确的破产预测可以帮助金融机构提前做好风险防范,避免贷款损失;投资者可以根据预测结果调整投资组合,降低投资风险;监管部门可以及时发现潜在的金融风险,采取相应的监管措施。然而,传统的公司破产预测模型往往存在精度不高的问题,无法满足实际需求。本研究的目的是利用AI智能体协作的方式,构建一个更精准的公司破产预测模型。通过将多个AI智能体的优势进行整合,充分挖掘公司财务数据、市场数据等多源数据中的信息,提高预测的准确性和可靠性。

2501_92132293的博客 1082

头歌数据库jdbc的技术

第1关:数据库连接与数据库实例创建 本关的任务是在给定 MySQL 数据库中创建一个数据库实例,即实现step1/MySQLJDBC.java的createDatabaseInstance(Connection connection, String instanceName)函数: //数据库实例创建函数 public void createDatabaseInstance(Connection connection, String databaseName)` Statem...

m0_51919640的博客 3572

il2cpp分析-gobal-metadata.dat解密

打开ida,把libil2cpp拖到ida中按快捷键Shift+F12等待字符串分析完后,搜索global-metadata.dat。ida中双击sub_57EE7C进入,VS code中也跳转到LoadMetadataFile函数。VSCode打开il2cpp源代码,全局搜索global-metadata.dat。工具:010Editor,IDA 7.5,Jadx,VS Code。判断加密逻辑为根据文件的长度循环读取字节码做亦或加密。双击搜索出来的结果,切记要选il2cpp目录下的。

Android_machong的博客 8024

FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地

一、环境介绍 操作系统介绍:ubuntu 18.04 FFMPEG版本: 4.4.2 摄像头: USB摄像头、虚拟机挂载本机自带摄像头 二、FFMPEG与X264下载编译 X264下载地址: http://www.videolan.org/developers/x264.html FFMPEG下载地址:https://ffmpeg.org/download.html Yasm ...

8873

DB_exp | NWPU 头歌数据库原理实验 JDBC 银行场景化综合应用实验

这几道题都比较鬼火冒,因为题目当中并没有给出相关的表列信息,直接写是写不了的。需要在实验环境中找到数据库文件路径,连接之后再看表列信息。

Panda8qaq的博客 456

选型不再靠感觉:一文看懂 SAP Event Mesh 与 SAP Integration Suite, advanced event mesh 的能力边界

本文对比分析了SAP Event Mesh与SAP Integration Suite, advanced event mesh的差异。SAP Event Mesh适合轻量级场景,主要用于SAP系统间异步通信,支持AMQP、MQTT等协议,消息大小限制为1MB。而advanced event mesh面向企业级事件网络,提供跨云/本地部署、事件治理、监控等高级功能,支持30MB消息和更大存储容量。选择时需考虑业务规模、实时性要求、治理需求等因素:单一SAP生态内扩展可选Event Mesh;跨区域、多云环境

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 135

JDBC初级应用实例(一)

JDBC初级应用实例(一)    在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会在这个类的基础上,随着介绍的深入不断提供优化的方案.    要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面:    1.对于不同层次的应用,应该有不同的得到连结的方法,如果得到连结的方法要随着应用层次的不同而改变,我们就应该把他独立成一个专门的类中,而把在任何应用层

892

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JDBC初级应用实例

在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会 在这个类的基础上,随着介绍的深入不断提供优化的方案.     要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面:     1.对于不同层次的应用,应该有不同的得到连结的方法,如果得到连结的方法要随 着应用层次的不同而改变,我们就应该把他独立成一个专门的类中,而把在任何应用层次 中都通用的处理方法封装

254

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JDBC初级应用实例(二)

JDBC初级应用实例(二)[动态访问数据库]    上面有一位朋友问了,如果在已经连结的情况下,知道当前连结的库的表的情况呢?其实只你已经连结了,你就能知道这个库中所以情况而不仅仅上表的情况:    有时(我到目前只见到过一次),我们对一种新的数据库根本不知道它的结构或者是其中的内容,好坏么我们如何来获取数据库的情况呢?    真实的例子是这样的,我的朋友的公司接到了一个单子,对方使用的数据库是叫

诗剑书生的专栏 2166

JDBC初级应用实例(三)

再谈JDBC连结为什么要反复谈JDBC连结,因为所以JDBC的性能,最主要的就是JDBC连结,而SQL语句的优化,和JAVA编程无关,你的一个查询语句的效率,是你对于SQL语法的使用技巧,这一方面你就可请教DBA,而不是来看我这...

cuanzhang3495的博客 122
上一篇: Java程序设计的基础类-java.lang
下一篇: JDBC中级应用
baileyfu
博客等级 码龄21年 9粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值