packagejdbcOper;import java.sql.*;importjava.util.ArrayList;//ZC: 基类(基本全是static方法)

public classTjdbcOperA

{public voidfinalize()

{

System.out.println("TjdbcOperA.finalize");//ConnectionClose();

}private static Class> Fclazz = null;//加载驱动

protected staticBoolean DriverLoad(String _strDriver)

{//_strDriver 类似 "oracle.jdbc.driver.OracleDriver"

if (Fclazz == null)

{try{

Fclazz=Class.forName(_strDriver);

}catch(ClassNotFoundException e) {

Fclazz= null;

e.printStackTrace();

}

}return (Fclazz != null);

}private static Connection Fconn = null;protected staticConnection ConnectionOpen(String _strUrl, String _strUserName, String _strPassword)

{//_strUrl 类似 "jdbc:oracle:thin:@localhost:1521:ORCLHSP"//_strUserName 类似 "scott"//_strPassword 类似 "tiger"

if (Fconn == null)

{try{

Fconn=DriverManager.getConnection(_strUrl, _strUserName, _strPassword);

}catch(SQLException e) {

Fconn= null;

e.printStackTrace();

}

}returnFconn;

}protected static voidConnectionClose()

{if (Fconn != null)

{try{

Fconn.close();

}catch(SQLException e) {

e.printStackTrace();

}

Fconn= null;

}

}//ZC: 单条的 insert语句//ZC: 返回 成功的SQL语句条数

protected static intInsertSingle(Connection _conn, String _strInsert, String[] _strsParameter)

{int iRtn = 0;

PreparedStatement ps= null;try{

_conn.setAutoCommit(true);

ps=_conn.prepareStatement(_strInsert);if (_strsParameter != null)

{for (int i=0; i<_strsparameter.length i>

ps.setString(i+1, _strsParameter[i]);

}

iRtn=ps.executeUpdate();

}catch(SQLException e) {

e.printStackTrace();

}finally{if (ps != null)

{try{

ps.close();

}catch(SQLException e) {//e.printStackTrace();

}//ZC: (1)、若 上面关闭成功了,这里 赋值为 null,没有任何效果//ZC: (2)、若 上面关闭失败,这里 赋值为 null,以便让垃圾回收机制来处理//ZC: 这里的 ps是局部变量,函数退出后,栈空间回收,也没有变量再指向 PreparedStatement实例 了,应该不用显示的赋值为null了?//ZC: 观察到ps的关闭需要调用close()函数,是否 和 普通的类实例不同?函数退出时 不会自动关闭?//ZC: 然而,记得在哪里见过函数退出后 还能保持局部变量的 机制,是在 C#里还是在java里?

ps = null;

}

}returniRtn;

}//ZC: executeUpdate() 执行单条 insert/delete/update语句//ZC: 返回 成功的SQL语句条数

protected static intExecuteUpdate_Single(Connection _conn, String _str, String[] _strsParameter)

{

PreparedStatement ps= null;try{

_conn.setAutoCommit(true);

ps=_conn.prepareStatement(_str);for (int i=0; i<_strsparameter.length i>

ps.setString(i+1, _strsParameter[i]);int iRtn =ps.executeUpdate();returniRtn;

}catch(SQLException e) {

e.printStackTrace();return 0;

}

}protected static intExecuteUpdate_SingleNoParameter(Connection _conn, String _str)

{

PreparedStatement ps= null;try{

_conn.setAutoCommit(true);

ps=_conn.prepareStatement(_str);int iRtn =ps.executeUpdate();returniRtn;

}catch(SQLException e) {

e.printStackTrace();return 0;

}

}//ZC: 使用的是 单个 PreparedStatement (多个 PreparedStatement 怎么耍?)//ZC: executeUpdate() 执行多条 insert/delete/update语句//ZC: 返回 成功的SQL语句条数(ZC: 如果是insert/delete/update语句的组合,那返回的条数如何计算?加起来?)

protected static intExecuteUpdate_Multi(Connection _conn, String[] _strsSql, String[][] _strssParameter)

{int iRtn = 0;

PreparedStatement ps= null;try{

_conn.setAutoCommit(false);for (int i=0; i<_strssql.length i>

{if (_strssParameter[i] != null)

{

ps=_conn.prepareStatement(_strsSql[i]);for (int j=0; j<_strssparameter j>

ps.setString(j+1, _strssParameter[i][j]);//ZC: 每次得到 PreparedStatement,都要 执行executeUpdate(),不然 它只会执行会有一条语句

iRtn +=ps.executeUpdate();//ZC: 每次获得的都是 新的实例,记得关闭

ps.close();

ps= null;

}

}

_conn.commit();

}catch(SQLException e) {

e.printStackTrace();try{

iRtn= 0;//ZC: 如果回滚也异常了,那怎么办?已经执行的语句 就没办法撤回了?//ZC: 还是说不执行commit()的话,SQL语句默认没有提交?可能是的.

_conn.rollback();

}catch(SQLException e1) {

e1.printStackTrace();

}

}finally{if (ps != null)

{//try {//ps.close();//} catch (SQLException e) {//e.printStackTrace();//}//上面已经有关闭的代码了,这里就不必再关闭了,赋值为null后若有需要 就交给JVM处理吧

ps = null;

}

}returniRtn;

}//ZC: 貌似 PreparedStatement.addBatch(); 和 PreparedStatement.addBatch(sql); 不能组合使用。

public static intBatch_SameSQL(Connection _conn, String _strSql, String[][] _strssParameter)

{int iRtn = 0;

PreparedStatement ps= null;try{

_conn.setAutoCommit(false);

ps=_conn.prepareStatement(_strSql);for (int i=0; i<_strssparameter.length i>

{if (_strssParameter[i] != null)

{for (int j=0; j<_strssparameter j>

ps.setString(j+1, _strssParameter[i][j]);

ps.addBatch();

}

}int[] iRtns =ps.executeBatch();for (int i=0; i

iRtn+=iRtns[i];

_conn.commit();

}catch(SQLException e) {

e.printStackTrace();try{

iRtn= 0;//ZC: 如果回滚也异常了,那怎么办?已经执行的语句 就没办法撤回了?//ZC: 还是说不执行commit()的话,SQL语句默认没有提交?可能是的.

_conn.rollback();

}catch(SQLException e1) {

e1.printStackTrace();

}

}finally{if (ps != null)

{try{

ps.close();

}catch(SQLException e) {

e.printStackTrace();

}

ps= null;

}

}returniRtn;

}//ZC: PreparedStatement.addBatch(sql);中的sql语句不能带?参数。//ZC: ==> ∵ PreparedStatement.addBatch(); 和 PreparedStatement.addBatch(sql); 不能组合使用。//ZC: PreparedStatement.addBatch(sql); 测试下来,貌似只能加入不带参数的SQL语句//ZC: 貌似 一旦执行了"PreparedStatement.addBatch(sql2);","Connection.prepareStatement(sql1)"中传入的参数sql1就无效了...

public static int Batch_DifferentSQLs(Connection _conn, ArrayList_listSql)

{int iRtn = 0;//PreparedStatement ps = null;

Statement st = null;try{//_conn.setAutoCommit(false);//ps = _conn.prepareStatement(_listSql.get(0));//

//for (int i=0; i<_listsql.size i>

//int[] iRtns = ps.executeBatch();//for (int i=0; i

//_conn.commit();

_conn.setAutoCommit(false);

st=_conn.createStatement();for (int i=0; i<_listsql.size i>

st.addBatch(_listSql.get(i));int[] iRtns =st.executeBatch();for (int i=0; i

iRtn+=iRtns[i];

_conn.commit();

}catch(SQLException e) {

e.printStackTrace();try{

iRtn= 0;//ZC: 如果回滚也异常了,那怎么办?已经执行的语句 就没办法撤回了?//ZC: 还是说不执行commit()的话,SQL语句默认没有提交?可能是的.

_conn.rollback();

}catch(SQLException e1) {

e1.printStackTrace();

}

}finally{//if (ps != null)//{//try {//ps.close();//} catch (SQLException e) {//e.printStackTrace();//}//ps = null;//}

if (st != null)

{try{

st.close();

}catch(SQLException e) {

e.printStackTrace();

}

st= null;

}

}returniRtn;

}public staticTselectResult SelectGet(Connection _conn, String _strSql, String[] _strsParameter)

{

PreparedStatement ps= null;try{

_conn.setAutoCommit(true);//加上两个参数:ResultSet.TYPE_SCROLL_INSENSITIVE / ResultSet.CONCUR_READ_ONLY,才能使得结果集指针滚动

ps =_conn.prepareStatement(_strSql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);if (_strsParameter != null)

{for (int i=0; i<_strsparameter.length i>

ps.setString(i+1, _strsParameter[i]);

}

ResultSet rs=ps.executeQuery();

TselectResult selRst= newTselectResult();

selRst.Fps=ps;

selRst.Frs=rs;returnselRst;

}catch(SQLException e) {

e.printStackTrace();

}return null;

}public static voidSelectClose(TselectResult _selRst)

{if (_selRst.Frs != null)

{try{

_selRst.Frs.close();

}catch(SQLException e) {//e.printStackTrace();

}

_selRst.Frs= null;

}if (_selRst.Fps != null)

{try{

_selRst.Fps.close();

}catch(SQLException e) {//e.printStackTrace();

}

_selRst.Fps= null;

}

}public static void main(String[] args) throwsException

{//PreparedStatement批量处理,参考网址:http://mousepc.iteye.com/blog/1131462

DriverLoad("com.mysql.jdbc.Driver");

Connection conn=ConnectionOpen("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8","root", "");

conn.setAutoCommit(false);//insert

String strInsert = "insert into test_z (username,password)values(?,?);";

PreparedStatement ps= conn.prepareStatement("");//update

String strUpdate = "update test_z set password=\"TTT\" where username=\"AAA\";";

ps.addBatch(strInsert);//ps.clearBatch();

ps.setString(1, "111");

ps.setString(2, "222");

ps.addBatch();

ps.addBatch(strUpdate);int[] iRtns =ps.executeBatch();

conn.commit();for (int i=0; i

System.out.println(i+ " : " +iRtns[i]);

ConnectionClose();

}

}

java packetmaster_TCP中间件_java_server相关推荐

  1. 我的2017年文章汇总——Java及中间件篇

    2018即将到来,大家看着2017给自己制定的计划有没有感慨?当你觉得过去一年没有什么进步时,那么请行动起来,能开始总是好的. 近期准备把过去一年写的文章按照分类重新整理推送一遍,包括:"分 ...

  2. Glassfish JAVA容器中间件使用(咋个办呢 zgbn)

    Glassfish JAVA容器中间件使用 安装Glassfish Glassfish官方下载页面:https://javaee.github.io/glassfish/download 下载Glas ...

  3. java中间件有哪些java常用中间件介绍

    之前给大家介绍了很多的java基础知识,今天同样的也是要给大家介绍这方面的内容,那么对于java中间件你都了解多少呢究竟什么是java中间件比较常用的java中间件都有哪些一起来了解一下吧. 一.什么 ...

  4. JAVA WEB_中间件

    目录 中间件 常见的web中间件有哪些 Tomcat Weblogic Jboss Jetty Webshere Glasshfish 中间件 我们经常会看到中间件,但是,一直好奇的是,中间件到底是什 ...

  5. java 中间件_从头到尾说一遍Java(中间件)垃圾回收

    之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员. 确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的专注,很多初学者 ...

  6. Java Web中间件

    目录 中间件 常见的web中间件有哪些 Tomcat Weblogic Jboss Jetty Webshere Glasshfish 中间件 我们经常会看到中间件,但是,一直好奇的是,中间件到底是什 ...

  7. 工行银企直联(dom4j+java无中间件版)

    工行银企直联(dom4j无中间件版) 最近,接手了工行银企直联的任务,在网上找了很多,发现能一次说清的文章很少,此篇文章专为第一次接触银企直联的同学准备. 1.准备包:dom4j(自行百度,如果这一步 ...

  8. Java总结 - 中间件

    文章目录 - - -中间件- - - 1 Redis 2 MongDB 3 Nginx 3.1 概述 3.1 正向代理&反向代理 3.2 Nginx的作用 3.2 事件驱动架构 3.2.1 I ...

  9. java数据库中间件实现,分布式数据库中间件DDM的实现原理

    随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性.甚至指数级上升的情况.此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也就是我们说的数据库中间 ...

最新文章

  1. CCF NOI1040 除法游戏
  2. oracle spm buffer get比较过程,Oracle 11g 新特性 -- SQL Plan Management 示例
  3. 【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )
  4. 爬虫之Selenium
  5. webpack学习笔记 (三) webpack-dev-server插件和HotModuleReplacementPlugin插件使用
  6. 夏意秋尽-08年1月
  7. (链表 栈 队列 递归)
  8. 【CodeForces - 289D】Polo the Penguin and Houses (带标号的无根树,Cayley定理,Prufer编码)
  9. 33个常见问题!超全Windows排查手册
  10. solr dih mysql 注意事项
  11. java基础类与对象_Java基础---类与对象
  12. 雷军:程序员如何成功创业?
  13. android视图绘制流程,android视图绘制流程完全解析带你一步步深入了解view二.docx...
  14. 有人说做运营死路一条,但他没搞清运营是做什么的!
  15. uview去除u-button按钮自带边框细线
  16. Isito - Rate Limits(请求限速)- 再战
  17. unity blend 笔记
  18. 第一章Java概述及开发环境搭建
  19. 离线地图开发下实现GPS定位,坐标纠偏回放,偏离路线
  20. 从G1到G16 HTC Android帝国超级大盘点

热门文章

  1. BrokenPipeError: [WinError 109] 管道已结束。
  2. sina stock历史数据
  3. torch.where用法
  4. 生成对抗网络GANs理解(附代码)
  5. Pycharm搜索文件名、符号名
  6. subprocess installed post-installation script returned error exit status 1
  7. 四、唱歌不如跳舞(上)
  8. 渗透知识-sqlmap
  9. CentOS7升级JDK
  10. oracle生成xml格式化,介绍关于Oracle下存取XML格式数据的方式教程一览