• 数据库批量增删改查工具


    目录结构:

    从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);
          }
    
    }
  • 相关阅读:
    关于阿里云带宽监控指标记录
    mongodb备份还原
    squid3.5缓存代理实践记录
    kafka依赖zookeeper原因解析及应用场景
    Zookeeper+Kafka集群部署(转)
    dubbo框架提供Main方法运行容器的几种方式(转)
    html标签简介(常用)
    数据库中和表并列的其他对象
    外键约束
    数据库中的约束
  • 原文地址:https://www.cnblogs.com/gqhwk/p/9041222.html
Copyright © 2020-2023  润新知