jdbcutil.java
来自「数据库远程同步软件NetBeans项目源文件 项目采用Jdesktop集成组件」· Java 代码 · 共 180 行
JAVA
180 行
package com.qixuan.jdbc.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
/***************************
* 这是一个JDBC的实效类,它提供了
* 释放JDBC资源,动态获取主键,分析结果集,
* 分析批处理的结果,..等相关操作
* @author yejf
*
*/
public class JdbcUtil {
/*************************
* 释放JDBC 相关的资源
* @param con 连接
* @param stm Statement
* @param rs 结果集
*/
public static void release(
Connection con,
Statement stm,
ResultSet rs) {
try {
if(rs != null)
rs.close();
if(stm != null)
stm.close();
if(con != null)
con.close();
} catch (SQLException ee) {
ee.printStackTrace();
}
}
public static void printRS(ResultSet rs)
throws SQLException {
//获取元数据
ResultSetMetaData rsmd = rs.getMetaData();
// 获取此结果集的列数
int columnCount = rsmd.getColumnCount();
//打印出头部
for(int i=1;i<=columnCount;i++) {
String columnLabel = rsmd
.getColumnLabel(i);
System.out.print(columnLabel+"\t");
}
//换行
System.out.println();
System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-===-=-=-");
//输出结果集本身
while(rs.next()) {
for(int i=1;i<=columnCount;i++) {
System.out.print(rs.getObject(i)+"\t");
}
//换行
System.out.println();
}
}
/*************************************
* create sequence hibernate_sequence;
* @param seqName
* @return
*/
public static int getPKBySeq(String seqName) {
int pk = -1;
String seq = null;
if(seqName == null || seqName.trim().length() <= 0){
seq = "hibernate_sequence";
} else {
seq = seqName;
}
String sql = "select "+seq+".nextval from dual";
Connection con = null;
Statement stm = null;
ResultSet rs = null;
try {
con = ConnectionFactory.getConnection();
stm = con.createStatement();
rs = stm.executeQuery(sql);
if(rs.next()) {
pk = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.release(con, stm, rs);
}
return pk;
}
/*********************************
* 作业:请实现此方法;
* 要求:通过一个单行单列的表来获取主键值;
* 如:create table id_table(
* next_id number
* );
* insert into id_table values(1);
* commit;
* 注:
* 每取一次,都要把此列+1并更新回去
* //查询SQL
* String sql = "select next_id from id_table for update";
* //更新SQL
* String sql = "update id_table set next_id = next_id + 1";
* @param tableName 表名
* @param columnName 列名
* @return
*/
public static int getPKByTable(
String tableName,
String columnName) {
int pk = -1;
Connection con = null;
PreparedStatement pstm= null;
Statement stm = null;
ResultSet rs = null;
try {
con=ConnectionFactory.getConnection();
String sql = "select "+columnName.toLowerCase()+" from "+tableName+" for update ";
stm = con.createStatement();
rs = stm.executeQuery(sql);
if(rs.next()) {
pk = rs.getInt(1);
}
sql="update "+tableName+" set "+columnName.toLowerCase()+" = ? ";
pstm=con.prepareStatement(sql);
int next_pk=pk;
pstm.setInt(1, ++next_pk);
pstm.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtil.release(con, pstm, rs);
JdbcUtil.release(null, stm, null);
}
return pk;
}
/***************************
* 分析批处理的结果集
*/
public static void analysisBatchRS
(int[] results) {
// 分析批处理的结果
for(int i=0;i<results.length;i++) {
switch (results[i]) {
case Statement.SUCCESS_NO_INFO:
System.out.println("-- SQL 执行成功,但受影响的记录数未知...");
break;
case Statement.EXECUTE_FAILED:
System.out.println("-- 本SQL命令执行失败,并且驱动会继续执行批中剩下的SQL命令....");
break;
default:
System.out.println("-- SQL 执行成功,本命令影响的记录数为:"+results[i]);
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?