数据库批量增删改查工具

https://www.cnblogs.com/gqhwk/p/9041222.html

从sql.txt读取sql语句,将运行结果写到result.txt

batch.java

复制代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class batch2 {

public static void main(String[] args) {

    testOracle();
}

   public static boolean supportBatch(Connection con) {
        try {
            // 得到数据库的元数据
            DatabaseMetaData md = con.getMetaData();
            return md.supportsBatchUpdates();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

public static void testOracle()
{
    Connection con = null;// 创建一个数据库连接
    PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
    ResultSet result = null;// 创建一个结果集对象
    String sb="";
    try
    {
        //读取配置
        InputStream inStream = new FileInputStream(new File(System.getProperty("user.dir")+"\\data\\Paras.properties"));
        Properties prop = new Properties();    
        prop.load(inStream);    
        // 加载Oracle驱动程序
        Class.forName("oracle.jdbc.driver.OracleDriver");
        System.out.println("开始尝试连接数据库!");
        //读取配置文件中数据库主机名,端口号,服务名
        String url = prop.getProperty("url");
        String user = prop.getProperty("username");// 用户名,系统默认的账户名
        String password = prop.getProperty("password");// 你安装时选设置的密码
        con = DriverManager.getConnection(url, user, password);// 获取连接
        System.out.println("连接成功!");

        try {

// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(System.getProperty(“user.dir”)+”\data\sql.txt”),”UTF-8”));
BufferedReader br = new BufferedReader(new UnicodeReader(new FileInputStream(System.getProperty(“user.dir”)+”\data\sql.txt”), Charset.defaultCharset().name()));
System.out.println(“”);
for (String line = br.readLine(); line != null; line = br.readLine()) {
System.out.println(line);
if(line.startsWith(“select”)){
String sql = line;// 预编译语句,“?”代表参数
pre = con.prepareStatement(sql);// 实例化预编译语句
result = pre.executeQuery();

                   FileOutputStream fos = new FileOutputStream(new File(System.getProperty("user.dir"))+"\\data\\result.txt",true);
                PrintStream p = new PrintStream(fos);
                p.print(line);p.println();
                ResultSetMetaData m=result.getMetaData();  
                int columns=m.getColumnCount();  
                while(result.next())  
                {  
                 for(int i=1;i<=columns;i++) 
                 {  
                  System.out.print(result.getString(i));  
                  System.out.print(",");  
                  sb=result.getString(i)+",";
                  p.print(sb);
                 }  
                 System.out.println();
                 p.println();
                } 
                System.out.println();
                p.println();
                p.close();
                fos.flush();
                 }else if(!line.contains("#"))
                 {
                   String sql = line;// 预编译语句,“?”代表参数
                   pre = con.prepareStatement(sql);// 实例化预编译语句
                   pre.executeUpdate();// 执行非查询语句
                   System.out.println("执行成功!");
                 }
             }                       
           br.close();
           } catch (IOException e) {
               e.printStackTrace();
           }

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
            // 注意关闭的顺序,最后使用的最先关闭
            if (result != null)
                result.close();
            if (pre != null)
                pre.close();
            if (con != null)
                con.close();
            System.out.println("数据库连接已关闭!");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

}

UnicodeReader.java
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PushbackInputStream;
import java.io.Reader;

public class UnicodeReader extends Reader {
PushbackInputStream internalIn;
InputStreamReader internalIn2 = null;
String defaultEnc;

  private static final int BOM_SIZE = 4;


  UnicodeReader(InputStream in, String defaultEnc) {
     internalIn = new PushbackInputStream(in, BOM_SIZE);
     this.defaultEnc = defaultEnc;
  }

  public String getDefaultEncoding() {
     return defaultEnc;
  }


  public String getEncoding() {
     if (internalIn2 == null) return null;
     return internalIn2.getEncoding();
  }


  protected void init() throws IOException {
     if (internalIn2 != null) return;

     String encoding;
     byte bom[] = new byte[BOM_SIZE];
     int n, unread;
     n = internalIn.read(bom, 0, bom.length);

     if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
                 (bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
        encoding = "UTF-32BE";
        unread = n - 4;
     } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
                 (bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
        encoding = "UTF-32LE";
        unread = n - 4;
     } else if (  (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
           (bom[2] == (byte)0xBF) ) {
        encoding = "UTF-8";
        unread = n - 3;
     } else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
        encoding = "UTF-16BE";
        unread = n - 2;
     } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
        encoding = "UTF-16LE";
        unread = n - 2;
     } else {
        // Unicode BOM mark not found, unread all bytes
        encoding = defaultEnc;
        unread = n;
     }    
     //System.out.println("read=" + n + ", unread=" + unread);

     if (unread > 0) internalIn.unread(bom, (n - unread), unread);

     // Use given encoding
     if (encoding == null) {
        internalIn2 = new InputStreamReader(internalIn);
     } else {
        internalIn2 = new InputStreamReader(internalIn, encoding);
     }
  }

  public void close() throws IOException {
     init();
     internalIn2.close();
  }

  public int read(char[] cbuf, int off, int len) throws IOException {
     init();
     return internalIn2.read(cbuf, off, len);
  }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值