数据库相关编程、设计技巧

数据库相关编程、设计技巧

由于这段实习阶段用到数据库相关的知识较多大概列举了一下流程,边实践变写。

尽量对每个技术点的认识更加深刻


第一部分:JDBC编程部分技巧

    1.批处理SQL(Batch)

    PrepareStatment的addBatch()

     使用场景1:多条sql批处理

    批量添加同时可以动态set静态sql中占位符?.

    简单举例

    public static int[] batchTest() {

int[] result=null;

Connection conn = null;

PreparedStatement ps = null;

conn = DataBaseUtils.getConnection();

String sql="insert into bzb_test(id,name,pass) values (?,?,?)";

try {

conn.setAutoCommit(false);

ps=conn.prepareStatement(sql);

ps.setInt(1, 4);

ps.setString(2, "root4");

ps.setString(3, "root4");

ps.addBatch();

ps.setInt(1, 5);

ps.setString(2, "root5");

ps.setString(3, "root5");

ps.addBatch();

result=ps.executeBatch();

// 成功执行完提交

conn.commit();

return result;

} catch (SQLException e) {

// 失败后将开始的执行回滚

try {

conn.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

e.printStackTrace();

return null;

} finally {

DataBaseUtils.close(ps);

DataBaseUtils.close(conn);

}

}

        将结果数组控制台输出结果:(-2状态代表执行成功,未知影响条数)

        

        数据库查询结果:

       


    

    

    使用场景2::多条静态的sql批处理

    addBatch("put static sql String");    example: select * from user where username='test';

    addBatch("put static  sql String");

    addBatch("put static  sql String");

    最后执行PrepareStatment的executeBatch();

     亲测提示:ps.addBatch("insert into bzb_test(id,name,pass) values (1,'root9','root9')");

    有的版本可能不支持此特性

    

    小感悟:使用addBatch()的executeBatch()的优点在于可以高效的批量执行。

    但应该根据不同的业务场景选择不同的实现技术,比如addBatch有时返回状态码返回-2,代表sql执行成功,但位置影响行记录数。

    这就打不到对状态的精准控制,有时候不如ps.executeUpdate()返回的int来得直接;

    我在业务代码中就用下面的方法获取每条sql影响的记录数:

    for (String str : sqls) {//遍历执行sql集合

    ps = conn.prepareStatement(str);

        ps.executeUpdate();//这里可以单独提取每条sql的影响行记录数

    }


    2.游标设置(分段读取)


    3.流读取(Blob等“大内容”)


    4.连接池(DBCP---commons.xxx.jar---xxx:dbcp,pool,logging)


    参数设置:最小空闲连接数 最大连接数


连接池连接失效问题(DBMS的连接超过设置的连接时长后超时,就像Mysql的默认8小时超时设置)

定时的去判断连接是否失效,失效丢弃重新获取,这个需要根据项目,根据 数据库设置调优

第二部分:数据库架构设计方面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值