精华内容
下载资源
问答
  • Java】如何用Java实现数据库查询

    万次阅读 2017-11-17 17:39:06
    首先要创建需要查询的文件在你的文件里。记住路径,需要用文件流来找到这个文件,我的文本创建如下: import java.io.*; import java.util.*; public class DAO { //通过学生姓名找到学生学号 private String ...

    首先要创建需要查询的文件在你的文件里。记住路径,需要用文件流来找到这个文件,我的文本创建如下:
    这里写图片描述
    这里写图片描述

    这里写图片描述

    import java.io.*;
    import java.util.*;
    public class DAO {
        //通过学生姓名找到学生学号
        private String findSnumBySname(String Sname)
        {
         String result = "";
         try
          {
             //相对路径创建文件字符输入流:..\\..\\名字
            FileReader file = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\Student.txt");
            //创建缓冲的字符输入流对象
            BufferedReader brea = new BufferedReader(file);
            //读取第一行数据
            String str = brea.readLine();
            while(str!=null)
            {
                //用逗号将一行数据切割为字符串数组
                String[] strs = str.split(",");
                if(strs[1].equals(Sname))
                {
                    result = strs[0];
                    break;
                }
                //未找到读取下一行数据
                str = brea.readLine();
            }
            file.close();
            }catch(Exception ex)
            {
                System.out.println("未找到");
            }
            return result;
        }
    
        //通过学生学号找到课程号,返回值为多个,用ArrayList(容器)
        private ArrayList<String> findCnumsBySnum(String Snum)
        {
            ArrayList<String> result = new ArrayList<String>();
            try
            {
                FileReader file1 = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\SC.txt");
                BufferedReader bre = new BufferedReader(file1);
                String tmp = bre.readLine();
                while(tmp != null)
                {
                    String[] strs = tmp.split(",");
                    if(strs[0].equals(Snum))
                    {
                        result.add(strs[1]);
                    }
                    tmp = bre.readLine();
                }
                file1.close();
            }
            catch(Exception ex)
            {
                System.out.print("");
            }
            return result;
        }
        //通过课程号找学号
        private ArrayList<String> findSnumByCnum(String cnum)
        {
            ArrayList<String> result = new ArrayList<String>();
            try
            {
                FileReader file = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\SC.txt");
                BufferedReader rea = new BufferedReader(file);
                String str = rea.readLine();
                while(str!=null)
                {
                    String[] tmp = str.split(",");
                    if(tmp[1].equals(cnum))
                    {
                        result.add(tmp[0]);
                    }
                    str = rea.readLine();
                }
                file.close();
            }catch(Exception ex)
            {
                System.out.println("");
            }
            return result;
        }
        //通过学号找姓名
        private String findSnameBySnum(String Snum)
        {
            String result = "";
            try
            {
                FileReader file = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\Student.txt");
                BufferedReader bre = new BufferedReader(file);
                String str = bre.readLine();
                while(str!=null)
                {
                    String[] tmp = str.split(",");
                    if(tmp[0].equals(Snum))
                    {
                        result = tmp[1];
                    }
                    str = bre.readLine();
                }
                file.close();
            }
            catch(Exception ex)
            {
                System.out.println("");
            }
            return result;
        }
        //通过课程号找到课程名称
        private ArrayList<String> findCnamesByCnum(String Cnum)
        {
            ArrayList<String> list=new ArrayList<String>();
            try
            {
                FileReader  file2 = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\Course.txt");
                BufferedReader brea2 = new BufferedReader(file2);
                String tmp = brea2.readLine();
                while(tmp!=null)
                {
                    String[] strs = tmp.split(",");
                    for(int i = 0;i<list.size();i++)
                    {
                        if(strs[0].equals(Cnum))//?????
                        {
                            list.add(strs[1]);
                            //break;
                        }
                    }
                    tmp = brea2.readLine();
                }
                file2.close();
            }
            catch(Exception ex)
            {
                System.out.println("");
            }
            return list;
        }
        //通过课程号找课程名
        private String findCnameByCnum(String cno)
        {
            String result = "";
            try
            {
                FileReader  file2 = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\Course.txt");
                BufferedReader brea2 = new BufferedReader(file2);
                String tmp = brea2.readLine();
                while(tmp!=null)
                {
                    String[] strs = tmp.split(",");
                        if(strs[0].equals(cno))
                        {
                            result = strs[1];
                            break;
                        }
                        tmp = brea2.readLine();
                }
                file2.close();
            }
            catch(Exception ex)
            {
                System.out.println("");
            }
            return result;
        }
        //通过学生姓名找到课程名称
        public ArrayList<String> findCnamesBySname(String sname)
        {
            //找学号
            String snum = findSnumBySname(sname);
            //找课程号
            ArrayList<String> cnums = findCnumsBySnum(snum);
            if(cnums.size()!=0)
            {
                ArrayList<String> list = new ArrayList<String>();
                for(int i = 0;i<cnums.size();i++)
                {
                    list.add(findCnameByCnum(cnums.get(i)));
                }
                return list;
            }
            else
            {
                return null;
            }
        }
        //通过课程名找课程号
        private String findCnumByCname(String Cname)
        {
            String result = "";
            //ArrayList<String> list=new ArrayList<String>();
            try
            {
                FileReader  file2 = new FileReader("d:\\Workspaces\\MyEclipse 8.5\\Course.txt");
                BufferedReader brea2 = new BufferedReader(file2);
                String tmp = brea2.readLine();
                while(tmp!=null)
                {
                    String[] strs = tmp.split(",");
                        if(strs[1].equals(Cname))
                        {
                            result = strs[0];
                            break;
                        }
                    tmp = brea2.readLine();
                }
                file2.close();
            }
            catch(Exception ex)
            {
                System.out.println("");
            }
            return result;
        }
        //通过课程名找到该门课的所有成绩
         private ArrayList<String> findGradeByCname(String Cname)
         {
             ArrayList<String> result = new ArrayList<String>();
             String cnum = findCnumByCname(Cname);
             try
             {
                FileReader  file = new FileReader("d:\\Workspaces\\MyEclipse 8.5\\SC.txt");
                BufferedReader brea = new BufferedReader(file);
                String str = brea.readLine();
                while(str!=null)
                {
                    String[] tmp = str.split(",");
                    if(tmp[1].equals(cnum))
                    {
                        result.add(tmp[2]);
                    }
                    str = brea.readLine();
                }
                file.close();
             }catch(Exception ex)
             {
                 System.out.println("");
             }
             return result;
         }
        //通过课程名找到选修该课程的学生
        public ArrayList<String> findSnameByCname(String Cname)
        {
            ArrayList<String> result = new ArrayList<String>();
            String cnum = findCnumByCname(Cname);
            ArrayList<String> Snum = findSnumByCnum(cnum);
            try 
            {
                FileReader file4 = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\Student.txt");
                BufferedReader bre = new BufferedReader(file4);
                String str = bre.readLine();
                while(str!=null)
                {
                    String[] tmp = str.split(",");
                    for(int i = 0;i<Snum.size();i++)
                    {
                        if(tmp[0].equals(Snum.get(i)))
                        {
                            result.add(tmp[1]);
                        }
                    }
                    str = bre.readLine();
                }
                file4.close();
            }catch(Exception ex)
            {
                System.out.println("未找到");
            }
            return result;
        }
        //根据所给课程名返回该课程的平均成绩
        public float AverageGrade(String Cname)
        {
            float result = -1.0f;
            ArrayList<String> list = findGradeByCname(Cname);
            for(int i = 0;i<list.size();i++)
            {
                result+=Integer.parseInt(list.get(i));
            }
            result = result/(float)(list.size());
            return result;
        }
        //通过学生姓名和课程名找到成绩
        public int findGradeBySnameCname(String sname,String cname)
        {
            int result =-1;
            String snum = findSnumBySname(sname);
            String cnum = findCnumByCname(cname);
            try
            {
                FileReader file3 = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\SC.txt");
    
                BufferedReader bre = new BufferedReader(file3);
                String str = bre.readLine();
                while(str!=null)
                {
                    String[] tmp = str.split(",");
                    if((tmp[0].equals(snum))&&(tmp[1].equals(cnum)))
                    {
                        result =Integer.parseInt(tmp[2]);
                    }
                    str = bre.readLine();
                }
                file3.close();
            }
            catch(Exception ex)
            {
                System.out.println("");
            }
            return result;
        }
    }
    
    
    //主函数
    import java.util.ArrayList;
    //import java.util.*;
    public class test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            DAO file = new DAO();
            System.out.println(file.AverageGrade("数学"));
    
            //通过学生姓名找到选修课程
            /*ArrayList<String> list = file.findCnamesBySname("李勇");
            if(list!=null)
            {
            for(int i = 0;i<list.size();i++)
                {
                    System.out.println(list.get(i));
                }
            }*/
    
    
            //通过课程名找到学生姓名
            /*ArrayList<String> list = file.findSnameByCname("数学");
            if(list!=null)
            {
            for(int i = 0;i<list.size();i++)
            {
                System.out.println(list.get(i));
            }
            }*/
    
            //通过学生姓名和课程名找到成绩
            //System.out.println(file.findGradeBySnameCname("王敏", "数据库"));
    
    
            //部分接口函数的测试
            //System.out.println(file.FindSNumBySName("刘晨"));
            //System.out.println(file.FindCnumBySname("刘晨").size());
            //System.out.println(file.findSnumBySname("刘晨"));
            //System.out.println(file.findSnameBySnum("201215123"));
            //System.out.println(file.findSnumByCnum("2"));
            /*ArrayList<String> list = file.findGradeByCname("数学");
            if(list!=null)
            {
            for(int i = 0;i<list.size();i++)
                {
                    System.out.println(list.get(i));
                }
            }*/
    
        }
    }
    
    展开全文
  • JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作

    转载自:http://www.cnblogs.com/sodawoods-blogs/p/4415858.html

    (—)通过mysql workbench 创建一个数据库,在这里命名为company,然后建一个tb_employee表

    (二)以下是java代码对表tb_employee的操作

    1 创建一个Employee类,包括员工的一些信息,如  id  name age sex

    2创建DatabaseConnection类,用于数据库的连接

    3创建一个EmployeeOperation类,用于操作数据库,它里面包括了 以下方法

    (1)getInstance()   //返回EmployeeOperation类实例的静态方法

    (2)saveEmployee(Employee emp)   //向数据库中加入数据

    (3)selectEmployee()        //从数据库中查询所需数据

    (4)updateEmployee(Employee emp)  //根据员工的编号更改员工的年龄信息

    (5)deleteEmployeeById(Employee emp)  //根据员工id删除员工

    4创建测试类

     

    各个类的代码如下

    复制代码
     1 package 数据库_向数据库插入数据;
     2 //尽量将属性定义为私有的,写出对应的setXXX和getXXX的方法
     3 public class Employee {
     4     private int empId;
     5     private String empName;
     6     private int empAge;
     7     private String empSex;
     8     
     9     public Employee(){}
    10     
    11     public int getEmpId() {
    12         return this.empId;
    13     }
    14     public void setEmpId(int id) {
    15         this.empId = id;
    16     }
    17     
    18     public String getEmpName() {
    19         return this.empName;
    20     }
    21     public void setEmpName(String name) {
    22         this.empName = name;
    23     }
    24     
    25     public int getEmpAge() {
    26         return this.empAge; 
    27     }
    28     public void setEmpAge(int age) {
    29         this.empAge = age;
    30     }
    31     
    32     public String getEmpSex() {
    33         return this.empSex;
    34     }
    35     public void setEmpSex(String sex) {
    36         this.empSex = sex;
    37     }
    38 
    39 }
    复制代码

     

     

    复制代码
     1 package 数据库_向数据库插入数据;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 
     6 public class DatabaseConnection {
     7     private static Connection conn = null;
     8     public static Connection getCon() {
     9         try {
    10             Class.forName("com.mysql.jdbc.Driver"); //加载数据库连接驱动
    11             String user = "root";
    12             String psw = "XXX";  //XXX为自己的数据库的密码
    13             String url = "jdbc:mysql://localhost:3306/ZZZ";                   //ZZZ为连接的名字
    14             conn = DriverManager.getConnection(url, user, psw);  //获取连接
    15         } catch (Exception e) {
    16             System.out.println("连接数据库失败");
    17             e.printStackTrace();
    18         }
    19         return conn;
    20     }
    21 
    22 }
    复制代码

     

    复制代码
      1 package 数据库_向数据库插入数据;
      2 
      3 import java.sql.Connection;
      4 import java.sql.PreparedStatement;
      5 import java.sql.ResultSet;
      6 import java.sql.SQLException;
      7 import java.sql.Statement;
      8 import java.util.ArrayList;
      9 import java.util.List;
     10 
     11 //EmployeeOperation类用于操作数据库,以下的编写方法是JAVA软件编程的一种设计模式,称为!!!!! 单例模式,!!!!!!!
     12 //方法中先判断该类的对象是否为空,只有为空才创建(new) ,因此保证该对象在程序中永远是唯一的,可以避免重复创建对象造成的系统内存被过多占用
     13 public class EmployeeOperation {
     14     private static  EmployeeOperation instance = null;
     15     
     16     public static EmployeeOperation getInstance() { //返回EmployeeOperation类实例的静态方法,单例模式!!!!
     17         if (instance == null) {
     18             instance = new EmployeeOperation();
     19         }    
     20         return instance;
     21     }
     22     
     23     public boolean saveEmployee(Employee emp) {   //向数据库中加入数据
     24         boolean result = false;
     25         Connection conn = null;
     26         try {
     27             
     28         conn = DatabaseConnection.getCon();  //建立数据库连接
     29         String sqlInset = "insert into company.tb_employee(empId, empName, empAge, empSex) values(?, ?, ?, ?)";
     30         PreparedStatement stmt = conn.prepareStatement(sqlInset);   //会抛出异常
     31         
     32         stmt.setInt(1, emp.getEmpId());         //设置SQL语句第一个“?”的值
     33         stmt.setString(2, emp.getEmpName());    //设置SQL语句第二个“?”的值
     34         stmt.setInt(3, emp.getEmpAge());        //设置SQL语句第三个“?”的值
     35         stmt.setString(4, emp.getEmpSex());     //设置SQL语句第四个“?”的值
     36         int i = stmt.executeUpdate();            //执行插入数据操作,返回影响的行数
     37         if (i == 1) {
     38             result = true;
     39         }
     40         } catch (SQLException e) {
     41             // TODO Auto-generated catch block
     42             e.printStackTrace();
     43         } finally { //finally的用处是不管程序是否出现异常,都要执行finally语句,所以在此处关闭连接
     44             try {
     45                 conn.close(); //打开一个Connection连接后,最后一定要调用它的close()方法关闭连接,以释放系统资源及数据库资源
     46             } catch(SQLException e) {
     47                 e.printStackTrace();
     48             }
     49         }
     50         
     51         return result;
     52         
     53     }
     54     
     55     
     56     public List<Employee> selectEmployee() {       //从数据库中查询所需数据
     57         List<Employee> empList = new ArrayList<Employee>();
     58         Connection conn = null;
     59         try {
     60             conn = DatabaseConnection.getCon();
     61             Statement stmt = conn.createStatement();
     62             ResultSet rs = stmt.executeQuery("select * from company.tb_employee");//执行SQL并返回结果集
     63             while (rs.next()) {
     64                 Employee emp = new Employee();
     65                 emp.setEmpId(rs.getInt("empId"));   //从结果集rs中获取内容时,若为字符串类型的,用rs.getString("string")方法
     66                 emp.setEmpName(rs.getString("empName"));   //其中str为想要从    数据库的    表    中获取的信息
     67                 emp.setEmpAge(rs.getInt("empAge"));  //若为int类型,用rs.getInt(number);
     68                 emp.setEmpSex(rs.getString("empSex"));
     69                 empList.add(emp);
     70             }
     71         } catch (Exception e) {
     72             e.printStackTrace();
     73         } finally {
     74             try {
     75                 conn.close();                                         //关闭连接
     76             } catch (SQLException e) {
     77                 // TODO Auto-generated catch block
     78                 e.printStackTrace();
     79             }
     80         }
     81         return empList;                                             //返回结果
     82     }
     83     
     84     
     85     public boolean updateEmployee(Employee emp) { //根据员工的编号更改员工的年龄信息
     86         boolean result = false;
     87         Connection conn = null;
     88         try {
     89             conn = DatabaseConnection.getCon();
     90             String sql = "update company.tb_employee set empAge=? where empId=?";  //update语句
     91             PreparedStatement stmt = conn.prepareStatement(sql);
     92             stmt.setInt(1, emp.getEmpAge());                //设置SQL语句第一个"?"的参数值
     93             stmt.setInt(2, emp.getEmpId());                    //设置SQL语句第二个"?"的参数值    
     94             int flag = stmt.executeUpdate();                //执行修改操作,返回影响的行数
     95             if (flag == 1) {                                //修改成功返回true
     96                 result = true;
     97             }
     98         } catch(Exception e) {
     99             e.printStackTrace();
    100         } finally {
    101             try {
    102                 conn.close();
    103             } catch (SQLException e) {
    104                 // TODO Auto-generated catch block
    105                 e.printStackTrace();
    106             }
    107         }
    108         return result;
    109     }
    110     
    111     public boolean deleteEmployeeById(Employee emp) {
    112         boolean result = false;
    113         Connection conn = null;
    114         try {
    115             conn = DatabaseConnection.getCon();
    116             String sql = "delete from company.tb_employee where empId = ?";
    117             PreparedStatement stmt = conn.prepareStatement(sql);
    118             stmt.setInt(1, emp.getEmpId());
    119             int i = stmt.executeUpdate();
    120             if (i == 1) {
    121                 result = true;
    122             } 
    123         } catch (Exception e) {
    124             e.printStackTrace();
    125         } finally {
    126             try {
    127                 conn.close();
    128             } catch (SQLException e) {
    129                 // TODO Auto-generated catch block
    130                 e.printStackTrace();
    131             }
    132         }
    133         return result;
    134     }
    135 
    136 }
    复制代码

     

    复制代码
     1 package 数据库_向数据库插入数据;
     2 
     3 public class MainTest {
     4     public static void main(String[] args) {    //测试向数据库的表中插入元素的方法
     5         Employee emp = new Employee();
     6         emp.setEmpId(2);
     7         emp.setEmpName("LILEI");
     8         emp.setEmpAge(33);
     9         emp.setEmpSex("male");
    10         boolean res = EmployeeOperation.getInstance().saveEmployee(emp);
    11         if (res == true) {
    12             System.out.println("向company.tb_employee表中插入数据成功");
    13         } else {
    14             System.out.println("向company.tb_employee表中插入数据失败");
    15         }
    16     }
    17 
    18 }
    复制代码

     

    复制代码
     1 package 数据库_向数据库插入数据;
     2 
     3 import java.util.List;
     4 
     5 public class SelectMainTest {     //测试从数据库中获取数据的方法
     6     public static void main(String[] args) {
     7         List<Employee> empList = EmployeeOperation.getInstance().selectEmployee();
     8         System.out.println("员工ID\t员工姓名\t员工年龄\t员工性别");
     9         for (Employee emp : empList) {
    10             System.out.print(emp.getEmpId() + "\t" + emp.getEmpName() + "\t" + emp.getEmpAge() + "\t" + emp.getEmpSex());
    11             System.out.println();
    12         }
    13     }
    14 
    15 }
    复制代码

     

     

    复制代码
     1 package 数据库_向数据库插入数据;
     2 
     3 import java.util.List;
     4 
     5 public class UpdateMainTest {    //根据员工的id修改员工年龄的方法
     6     public static void main(String[] args) {
     7         List<Employee> empList = EmployeeOperation.getInstance().selectEmployee();
     8         System.out.println("员工ID");
     9         for (Employee emp : empList) {
    10             System.out.println(emp.getEmpId());
    11         }
    12         Employee emp = new Employee();
    13         emp.setEmpId(2);
    14         emp.setEmpAge(50);
    15         boolean res = EmployeeOperation.getInstance().updateEmployee(emp);
    16         if (res == true) {
    17             System.out.println("编号为2的员工的年龄修改成功");
    18         } else {
    19             System.out.println("编号为2的员工的年龄修改失败");
    20         }
    21         
    22     }
    23 
    24 }
    复制代码

     

    复制代码
     1 package 数据库_向数据库插入数据;
     2 
     3 public class DeleteMainTest {
     4     public static void main(String[] args) {   //测试删除对应id的员工的方法
     5         Employee emp = new Employee();
     6         emp.setEmpId(1);
     7         boolean res = EmployeeOperation.getInstance().deleteEmployeeById(emp);
     8         if (res == true) {
     9             System.out.println("成功删除id为1的员工");
    10         } else {
    11             System.out.println("未能成功删除id为1的员工");
    12         }
    13     }
    14 
    15 }
    复制代码

     

    以上代码经个人亲测,想要运行上述代码的同学注意一下

    1 DatabaseConnection类中用户名和密码要改一下,

    2 在数据库中建立的表的名字 以及表的各个列的名字需要一致

    3 在JAVA工程中要引入 mysql-connector-java-5.1.34-bin.jar,如下图所示

    大概就是这些,有错误的地方,请!拍!砖 !

     

     

    展开全文
  • Java导出数据库查询结果为excel和csv的简易实现

    万次阅读 热门讨论 2016-12-04 23:43:03
    Java导出大数据量的数据库查询结果为excel和csv的简易实现.

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53457953,建议读者阅读原文,确保获得完整的信息

    1.背景

           最近在应对一个数据查询导出模块,总体要求就是依据给定的SQL语句,输出其查询结果为csv或者xlsx文件。其中查询数据量可能会有大数据量,成百上千万都可能。

    2.探讨

           针对上述数据导出这个问题,提取出几个关键词:

    • 1、SQL是由作业人员临时写的。
    • 2、数据量大。
    • 3、输出csv或xlsx文件。

           针对这几个关键词,咱分别扩展下其含义:

           第一个关键词:SQL是临时写的,这就意味着咱只是去执行这条语句,并不能对语句进行分页设计啥的,如果要重新分析SQL可能比较困难。这个时候比较贴近的场景就是“数据库查询客户端”,客户端只管执行SQL,至于执行得快慢等取决于语句及数据库性能等。

           第二个关键词:数据量大,即查询的返回结果可能比较多,你如何处理返回结果,是将其先存到List列表还是直接在结果集里面就给输出到文件。这就需要考虑内存、机器性能问题,不要一条语句执行了,直接导致你的java程序死掉了,比如JVM内存溢出,CPU使用率蹭蹭的涨到99%,导致整个程序无响应。

           第三个关键词:输出csv或xlsx文件,比如csv是利用成熟的三方库还是自己写(毕竟就是逗号分隔的文本),不同人可能有不同看法,但是我主张大家用现成的三方依赖包,比如javacsv\opencsv都是比较成熟的工具包。

           其中,有关csv读写在文章《 利用JavaCSV API来读写csv文件》中有详细介绍。而有关xlsx读写需要的jar包则在前面的文章《 Java处理excel两种不同的方式》有过介绍。

    3.实现

           在实例“Java导出数据库查询结果”中,我选取的实现方法为直接在ResultSet结果集中将数据写入到文件,这么操作基于两点:

    • 1、做分页困难,没法降低查询数据量。
    • 2、大数据量内存稀缺,尽量减少重复数据存储。

    3.1导出csv

           使用的依赖库:

    <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv -->
    <dependency>
        <groupId>net.sourceforge.javacsv</groupId>
        <artifactId>javacsv</artifactId>
        <version>2.1</version>
    </dependency>
    

           截取部分代码片段

    // 判断文件是否存在,存在则删除,然后创建新表格
    File tmp = new File(filePath);
    if (tmp.exists()){
    
    	if (tmp.delete()){
    		logger.info(filePath + Constant.DUPLICATE_FILE_DELETE);
    	}
    }
    
    // 创建CSV写对象
    CsvWriter csvWriter = new CsvWriter(filePath,Constant.SEPARATOR, Charset.forName("GBK"));
    
    // 数据查询开始
    preparedStatement = connection.prepareStatement(sql);
    resultSet = preparedStatement.executeQuery();
    
    // 获取结果集表头
    ResultSetMetaData md = resultSet.getMetaData();
    int columnCount = md.getColumnCount();
    logger.debug("返回结果字段个数:" + columnCount);
    
    JSONArray columnName = new JSONArray();
    for (int i = 1; i <= columnCount; i++) {
    JSONObject object = new JSONObject();
    object.put(KEY.COLUNM_NAME,md.getColumnName(i));
    columnName.add(object);
    }
    
    // 获取表头数组
    int columnSize = columnName.size();
    String[] columnNameList = ListUtil.getListFromJSONArray(columnName);
    csvWriter.writeRecord(columnNameList);
    
    // 数据记录数
    int i = 0;
    // 临时数据存储
    StringBuffer stringBuffer = new StringBuffer();
    
    while (resultSet.next()) {
    
    	// 记录号
    	i++;
    	// 依据列名获取各列值
    	for (int j = 1; j<=columnSize; j++){
    
    		String value = resultSet.getString(j);
    		//创建列
    		stringBuffer.append(value);
    		if (j != columnSize){
    			stringBuffer.append(Constant.COMMA);
    		}
    	}
    
    	String buffer_string = stringBuffer.toString();
    	String[] content = buffer_string.split(Constant.COMMA);
    	csvWriter.writeRecord(content);
    	stringBuffer.setLength(0);
    }
    
    // 文件输出
    csvWriter.flush();
    csvWriter.close();
    

           针对相同文件导出csv结果如下:

    这里写图片描述

    3.2导出xlsx

           使用的依赖库:

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi</artifactId>
    	<version>3.15</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi-ooxml</artifactId>
    	<version>3.15</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans -->
    <dependency>
    	<groupId>org.apache.xmlbeans</groupId>
    	<artifactId>xmlbeans</artifactId>
    	<version>2.6.0</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi-ooxml-schemas</artifactId>
    	<version>3.14</version>
    </dependency>
    

           截取部分代码片段:

    // 数据查询开始
    preparedStatement = connection.prepareStatement(sql);
    resultSet = preparedStatement.executeQuery();
    
    // 获取结果集表头
    ResultSetMetaData md = resultSet.getMetaData();
    int columnCount = md.getColumnCount();
    logger.debug("返回结果字段个数:" + columnCount);
    
    JSONArray columnName = new JSONArray();
    for (int i = 1; i <= columnCount; i++) {
        JSONObject object = new JSONObject();
        object.put(KEY.COLUNM_NAME,md.getColumnName(i));
        columnName.add(object);
    }
    int columnNameSize = columnName.size();
    
    //ExcelUtil.createSXSSFFile(columnName,filePath);
    //inputFS = new FileInputStream(tmp);
    
    // 读取工作薄
    Workbook wb = new SXSSFWorkbook(500);
    // 记录总数
    int i = 0;
    
    while (resultSet.next()) {
    
        // 记录号
        i++;
        // logger.info("i:"+i);
        
        int factor = CalculateUtil.getMultiplyingFactor(i);
        int index = i%Constant.XLSX_LENGTH;
        // logger.info("index:"+index);
        
        if ( index == 1){
            // 创建工作表
            sheet = wb.createSheet("sheet"+factor);
            // 写表头
            ExcelUtil.writeTitle(sheet,columnName);
        }
        // 创建行
        Row row;
        if ( index != 0) {
            row = sheet.createRow(index);
        } else {
            row = sheet.createRow(Constant.XLSX_LENGTH);
        }
        // 依据列名获取各列值
        for (int j = 0; j < columnNameSize; j++) {
        
            String value = resultSet.getString(j + 1);
            //创建列
            Cell cell = row.createCell((short) j);
            cell.setCellValue(value);
        }
    }
    
    // 文件输出
    FileOutputStream out = new FileOutputStream(filePath);
    wb.write(out);
    out.flush();
    out.close();
    

           在导出xlsx里面需要补充说明一点的就是SXSSFWorkbook这个对象的使用,如下:

    Workbook wb = new SXSSFWorkbook(500);
    

           因为通常咱使用习惯都是利用XSSFWorkbook来创建xlsx,两者明显的区别就是,SXSSFWorkbook可以设定内存数据写入硬盘的阈值,即每提交多少条数据就写入一次硬盘,有效的避免了大数据量存储时内存溢出的风险。比如代码中我指定的阈值为500条。

           有关SXSSFWorkbook对象的详细说明可以参考以下内容:

    这里写图片描述

           从上图中可以看出,SXSSF是对XSSF的扩展,用来应对大容量电子表格的输出,自3.8-beta3版本的poi库就添加了。

           针对相同文件导出excel结果如下:

    这里写图片描述

           补充说明:

    excel存储容量,2010版后支持单张sheet表格最大行数1048576,sheet表最大数目没有统一说法,但有一点可以肯定,数据量大太加上自己电脑的性能的限制,excel整体性能会受影响,不是说无限制往里存。

    4.总结

    csv与excel数据存储能力及效率对比:

    属性 csv excel
    存储容量 没有限制,类似txt文本 单张sheet表有限制,可以存大量sheet表
    存储效率 相对csv慢
    占用空间 相同内容,少量时占用空间少,大量时占用空间大 相同内容,少量占用空间大,大量占用空间少

           其中相同文件名均代表同一SQL输出不同格式的文件,从下图中可以看出,相同的查询结果,如果内容较少(几十KB),存放在csv文件中占用空间较少。如果内容较大(几百KB),存放在excel文件中占用空间较少,这个应该是excel文件在大容量时做了性能优化。毕竟MicroSoft是靠系统和办公软件起家,其excel还是具备含金量的,不仅仅是好看,在高级层面还是做了不少工作的。

           输出csv及excel文件结果对比图:

    这里写图片描述

    5.交流

           最近有同学说需要完整的代码,限于公司规定,完整代码不能提供。但是如果有同学在实际操作过程中碰到问题、不理解之处都可以通过留言指出来,看看可否协助你分析下。

    6.工具类

    样例代码中包含以下工具类,有不清楚的请留言。

    CalculateUtil .java

    import com.amap.axf.data.batch.constant.Constant;
    
    /**
     * Created by loongshawn on 2016/12/7.
     *
     * NOTE 计算指定数字所属区间段
     */
    public class CalculateUtil {
    
        public static int getMultiplyingFactor(int num){
    
            int factor = 1;
    
            for (int i=1;i<= Constant.MAX_PAGE;i++){
    
                int tmp = num - (i*Constant.XLSX_LENGTH);
                if (tmp <= 0){
                    factor = i;
                    break;
                }
            }
    
            return factor;
        }
    
    }
    

    ListUtil .java

    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.amap.axf.data.batch.constant.Constant;
    import com.amap.axf.data.batch.constant.KEY;
    
    import java.util.List;
    
    /**
     * Created by loongshawn on 2016/11/29.
     *
     * NOTE 排序
     */
    public class ListUtil {
    
        // 顺序排序
        public static List<Integer> getSortedList(List<Integer> list){
    
            int size = list.size();
    
            for (int i=0;i<size;i++){
    
                for (int j=i;j<size;j++){
    
                    Integer item_i = list.get(i);
                    Integer item_j = list.get(j);
    
                    if (item_i.intValue() > item_j.intValue()){
    
                        list.set(i,item_j);
                        list.set(j,item_i);
                    }
                }
            }
    
            return list;
        }
    
        public static String[] getListFromJSONArray(JSONArray jsonArray){
    
            // 获取表头数组
            int columnSize = jsonArray.size();
    
            StringBuffer tmp_column = new StringBuffer();
    
            for (int m=0;m<columnSize;m++){
                // 获取JSONObject
                JSONObject jsonCloumn = jsonArray.getJSONObject(m);
                String title_name = jsonCloumn.getString(KEY.COLUNM_NAME);
                tmp_column.append(title_name);
                if (m != columnSize-1){
                    tmp_column.append(Constant.COMMA);
                }
            }
    
            String[] columnNameList = tmp_column.toString().split(Constant.COMMA);
    
            return columnNameList;
        }
    
        public static String getStringFromJSONArray(JSONArray jsonArray){
    
            // 获取表头数组
            int columnSize = jsonArray.size();
    
            StringBuffer tmp_column = new StringBuffer();
    
            for (int m=0;m<columnSize;m++){
                // 获取JSONObject
                JSONObject jsonCloumn = jsonArray.getJSONObject(m);
                String title_name = jsonCloumn.getString(KEY.COLUNM_NAME);
                tmp_column.append(title_name);
                if (m != columnSize-1){
                    tmp_column.append(Constant.TAB);
                }
            }
    
            return tmp_column.toString();
        }
    }
    
    展开全文
  • JAVA实现数据库查询

    千次阅读 2016-06-14 14:43:20
    import java.sql.*; public class MSSQLText { public static void main(String args[]) { String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind"; String user="s
    import java.sql.*;
     public class MSSQLText
     {
         public static void main(String args[])
         {
         String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind";
         String user="sa";//这里替换成你自已的数据库用户名
         String password="sa";//这里替换成你自已的数据库用户密码
         String sqlStr="select CustomerID, CompanyName, ContactName from Customers";
            try
      {   //这里的异常处理语句是必需的.否则不能通过编译!    
                 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                 System.out.println("类实例化成功!");
                 
                 Connection con = DriverManager.getConnection(url,user,password);
                 System.out.println("创建连接对像成功!");
                 
                 Statement st = con.createStatement();
                 System.out.println("创建Statement成功!");
                 
                 ResultSet rs = st.executeQuery(sqlStr);
                 System.out.println("操作数据表成功!");
                System.out.println("----------------!");
     
                 while(rs.next())
                 {
                     System.out.print(rs.getString("CustomerID") + "    ");
                     System.out.print(rs.getString("CompanyName") + "    ");
                     System.out.println(rs.getString("ContactName"));
                 }
                 rs.close();
                 st.close();
                 con.close();
       }
       catch(Exception err){
                 err.printStackTrace(System.out);
             }
      }
     }
    展开全文
  • java对数据库中Date类型的处理

    千次阅读 2020-08-11 20:26:18
    java对数据库中Date类型的处理 想必在日常的敲代码生活总,用java操作数据库中的Date类型是不同于其他的,因为Date在导包的时候就分为 import java.sql.Date; import java.util.Date 这两种情况,他们也是互相不...
  • Java实现数据库查询自动封装成对象

    千次阅读 2018-01-08 21:39:04
    用过框架的人应该都知道,像mybatis这种将数据库查询出的结果自动封装成对象是如何实现的呢?这篇文章将会模仿此功能。 1、首先设计一个工具类,用来获取数据库连接,关闭资源 public class ConnUtil { final ...
  • 以下查询修改操作基于上图数据库: package 数据库; import java.sql.*; import java.util.Scanner; public class online { public static void main(String[] args) { // TODO Auto-generated method stub ...
  • 创建数据库表格(学生考勤信息),以每周为单位,怎样在java中创建统计并查询出一个月的信息。 个人思路:在java中另外创建各个周的表格,表格结构一样
  • java对数据库连接后进行两张表的查询对比
  • Java中操作数据库查询数据

    万次阅读 2019-06-08 12:23:11
    Java操作数据库查询数据的大概流程: 1)创建数据库连接(这里用的是MySQL数据库) private static String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/test"; //数据源(mysql)的...
  • Java对数据库的关闭操作

    千次阅读 2013-08-04 15:51:10
    一般都是不太注意关闭数据库的 其实这是很必须的 所以在给大家共享一个函数的   package cn.edu.nwsuaf.cie.aisa.wsc.operation;   import java.sql.Connection; import java.sql.ResultSet; import java....
  • HSQLDB(Hypersonic SQL)是纯Java开发的关系型数据库,并提供JDBC驱动存取数据。支持ANSI-92标准SQL语法。而且他占的空间很小。大约只有160K,拥有快速的数据库引擎。  Axion  Axion是一个小型,快速,开源的关系型...
  • java对数据库的增删改查

    千次阅读 2019-03-04 01:51:36
    Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。它JDBC是...
  • 怎么样用代码实现数据库中数据的分页查询,实现首页,上一页,下一页,末页的效果啊,求大神们指点一二!
  • 在实现简单网页上数据内容进行增删改查,需要用到三个部分,分别是jsp网页部分+java后台部分+数据库表 我用一个新闻的例子来实现,首先编写java后台程序 java后台程序: 我们用三层的模式进行设计:分别是...
  • JAVA实现数据库中信息的查询

    千次阅读 2019-09-03 20:07:11
    查询代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; Connection connection=null; Statement ...
  • 输入查询条件后,点击查询按钮后怎样使旁边表格中不符合的记录自动隐藏起来。
  • Java获取数据库各种查询结果

    万次阅读 2014-06-24 21:21:12
    查询时候有时候要一条数据,有时候要的是一个结果集,然而有时候返回j
  • JAVA 对数据库的插入操作

    千次阅读 2009-04-15 13:23:00
    因为数据库的更新,新的数据库是基于原有的数据库,只是新的数据库对部分表进行了修改,并加入了一些新的表。但原数据库中的数据是比需要导入到新的数据库中。手工的话,工作量太大,也没有什么通用性。所有就想用...
  • Java实现数据库查询

    万次阅读 2018-06-20 21:30:18
    输入一个学号,如果该学号信息存在,则显示出该学号... import java.sql.*;import java.util.Scanner;//输入一个学号,//如果该学号信息存在,则显示出该学号对应的学生的基本信息,包括学号,姓名,性别,年龄...
  • 这软件是一个集成开发环境,安装启动后即可使用,集成了tomcat和mysql数据库首先我们先新建一个首页文件index.jsp&lt;%@ page language="java" contentType="text/html; charset=utf-8" ...
  • Java数据库查询结果的输出

    千次阅读 2005-01-20 15:31:00
    Java数据库查询结果的输出摘自:北京海脉信息咨询有限公司 利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。类Vector:...
  • Java数据库模糊查询写法

    千次阅读 2018-07-24 12:56:27
    1. xml中拼接    (1)SELECT * FROM tableName WHERE name like concat('%'... Java  String param = "%" + text + "%";  s qlMapper.xml  SELECT * FROM tableName WHERE name LIKE #{param};
  • //注意:要求数据库的列名必须和JAVA实体类的属性名、类型完全一致 public static List resultSetToList(ResultSet rs,Class cls) { //定义接收的集合 List list = new ArrayList(); //创建一个对象,方便后续反射...
  • java对数据库中NULL的处理

    千次阅读 2009-11-18 16:46:00
    数据库中NULL的概念:数据库中,null表示未填写、未知、不可用的概念,和java不同的是数据库中可以将null赋给任何数据类型。这样一来,我们从数据库中读取字段的值后,在java程序中如何判断读取的值是否为null呢?用x...
  • Java操作数据库

    万次阅读 2015-11-19 17:14:34
    Java操作数据库--以SQL Server为例 crud介绍(增、删、改、查操作) CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单记事的首字母简写。主要被用在...
  • Java操作数据库详解

    千次阅读 2016-09-29 10:21:27
    Statement和PreparedStatement的区别JDBC简介JDBC(Java Data Base Connectivity)即java数据库连接,是Java核心类库的一部分,提供了操作多种关系数据库提供统一访问,是一种用于执行SQL语句的Java API。...
  • ![![图片说明]... 我使用orcale11 输入相同的语句是可以查询的到数据的,并且已经commit过了 但是我用java jdbc连接成功数据库之后,却发现next方法的返回值始终为false 麻烦各位大神指点迷津
  • 这里博主为了偷懒,就没有使用mybatis以及前端页面了,纯...Cs.java - - - 主方法类 package com.export;   import java.util.List; import java.util.Map;   import javax.swing.JFileChooser; impor...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,754,702
精华内容 701,880
关键字:

java对数据库的查询

java 订阅