使用配置文件properties进行连接数据库

首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties;

然后双击config.properties进行编辑:此文件数据是根据键值对来存储的:我们可以把连接数据库的一些连接字符串存储在此文件里;然后用的时候直接读配置文件,到时候更换的时候方便移植和修改。

name                                                                               value

driver                                                                               com.microsoft.sqlserver.jdbc.SQLServerDriver

con                                                                                  jdbc\:sqlserver\://localhost\:1433;databaseName\=Test

user                                                                                 sa

pwd

然后用的时候:

public class TestMain {
     Connection con=null;
     Properties pro=new Properties();
     public TestMain() throws IOException, ClassNotFoundException, SQLException
     {
      pro.load(TestMain.class.getClassLoader().getResourceAsStream("config.properties"));
      //加载驱动
      Class.forName(pro.getProperty("driver"));
      //创建连接
      con=DriverManager.getConnection(pro.getProperty("con"),pro.getProperty("user"),pro.getProperty("pwd"));
     
     }

  //测试上传图片

   @Test
    public void setImg() throws SQLException, FileNotFoundException{
     String sql="INSERT INTO [Test].[dbo].[User]([name],[age],[image])VALUES(?,?,?)";
     PreparedStatement ps=con.prepareStatement(sql);
     ps.setObject(1,"测试name");
     ps.setObject(2,22);
     FileInputStream fis=new FileInputStream(new File("D:\\img\\Picture1.jpg"));//从D盘Img读取
     ps.setBinaryStream(3,fis);
     int num=ps.executeUpdate();
     System.out.println("num为:"+num);  
    }

    //取图片并写入到硬盘文件夹
    @Test
    public void getIma() throws SQLException, IOException{
      Statement state=con.createStatement();
     String sql="select [image] from [User] where id=6";
     ResultSet rs=state.executeQuery(sql);
     rs.next();
     InputStream input=rs.getBinaryStream(1);
     OutputStream out=new FileOutputStream("D:\\15.jpg");//写入到D盘
     byte[] bte=new byte[1024];
     int length=0;
     while((length=input.read(bte))>0){
      out.write(bte,0,length);
     }
     input.close();
     out.close();
    }

//批处理:测试时,使用批处理比使用循环.executeUpdate()节省大概一半时间
    @Test
    public void useBatch() throws SQLException{
     String sql="INSERT INTO [Test].[dbo].[User]([name],[age])VALUES(?,?)";
     PreparedStatement ps=con.prepareStatement(sql);
     long noe=System.currentTimeMillis();
     for (int j = 0; j < 10000; j++) {
      ps.setObject(1,"sp"+j);
         ps.setObject(2,j);
         //ps.executeUpdate();原时间为5875毫秒
         ps.addBatch();
         
  }
     ps.executeBatch();
     
     System.out.println("增加10000次的时间为:"+(System.currentTimeMillis()-noe));  
    }

 //时间戳
    @Test
    public void testDate() throws SQLException{
     String sql="INSERT INTO [Test].[dbo].[User]([name],[age],[startTime],[endTime])VALUES(?,?,?,?)";
     PreparedStatement ps=con.prepareStatement(sql);
     ps.setString(1,"测试名");
     ps.setInt(2,20);
     ps.setTimestamp(3,new Timestamp(System.currentTimeMillis()));
     ps.setDate(4,new Date(System.currentTimeMillis()));//这个Date是.sql包下的,不是.util包下的,莫导错包了!
     int zong=ps.executeUpdate();
     System.out.println("时间戳"+zong);   

}

    //测试回滚不提交
    @Test
    public void testTransaction() throws SQLException{
        con.setAutoCommit(false);//设置默认不自动提交
        try {
         String sql="update [User] set money=money-100 where id=5";
         Statement state=con.createStatement();
         state.executeUpdate(sql);
         //int a=10/0;
         sql="update [User] set money=money+100 where id=1";
         state.executeUpdate(sql);
         con.commit();//提交事务
  } catch (Exception e) {
   con.rollback();
  }
    //用jdbc同样可以实现事物回滚!如果没有设置默认不自动提交,那么执行到int a=10/0;就不向下执行了,转账会出现扣钱,没加钱的错误!
    }

}

还有,这里在执行读取操作的时候,用到了 rs.getMetaData().getColumnCount();和rs.getMetaData().getColumnName()很有用;

 private List<Map<String,Object>> setMap() throws SQLException{
      List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
      Statement state=con.createStatement();
      
      String sql="select * from [User]";
   ResultSet rs=state.executeQuery(sql);
   while(rs.next()){
    Map<String,Object> map=new HashMap<String, Object>();
    for (int i = 1; i <=rs.getMetaData().getColumnCount(); i++) {
    map.put(rs.getMetaData().getColumnName(i),rs.getObject(i));
    }
          list.add(map);
   }  
      rs.close();
      state.close();
      con.close();
   return list;
     }
     @Test
     public void getMap() throws SQLException{
      List<User> users=new ArrayList<User>();
      List<Map<String,Object>> list=setMap();
      for (Map<String, Object> map : list) {
       User user=new User();
    user.setAge(Integer.valueOf((map.get("age").toString())));
    user.setId(Integer.valueOf((map.get("id").toString())));
    user.setName(map.get("name").toString());
    users.add(user);
  }
     
      for (User item : users) {
   p(item.getId()+"\t"+item.getAge()+"\t"+item.getName());
  }
     }
    
    
    
    
     @Test
     public void getList() throws SQLException{
      List<List> list=setList();
      for (List list2 : list) {
   for (Object object : list2) {
    p(object);
   }
  }
     }
    private List<List> setList() throws SQLException{
     Statement state=con.createStatement();
     List<List> list=new ArrayList<List>();
     String sql="select * from [User]";
  ResultSet rs=state.executeQuery(sql);
  while(rs.next()){
   List l=new ArrayList();
   for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
   l.add(rs.getObject(i));
   }
         list.add(l);
  }  
     rs.close();
     state.close();
     con.close();
  return list;
     
    }

 

复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等的更多相关文章

  1. java jdbc使用配置文件连接数据库:

    java jdbc使用配置文件连接数据库: 创建后缀名为:.properties的文件,文件内容包括,数据库驱动.连接的数据库地址.用户名.密码…… 以Mysql为例创建config.properti ...

  2. JDBC实例--通过连接工具类DBUtil +配置文件来获取连接数据库,方便又快捷

    根据前面的连接方法,还有缺点就是,如果人家要换数据库,还得改动源代码,然后还要编译什么的.这样客户修改也不容易. 做法:我们写一个配置文件,把该数据写在配置文件上面,然后通过类来加载改文件,然后读取相 ...

  3. 读取配置文件properties的几种方式

    介绍几种读取方式:参考:https://www.cnblogs.com/sebastian-tyd/p/7895182.html .基于ClassLoder读取配置文件 注意:该方式只能读取类路径下的 ...

  4. MyBatis XML 配置文件 properties 元素扩展

    在分析 MyBatis XML 配置文件 properties 元素时提到了三种配置方式,其中 property 子元素 和 properties 文件都比较容易理解,但是为什么还要提供一种代码参数传 ...

  5. 操作配置文件Properties

    // */ // ]]>   操作配置文件Properties Table of Contents 1 定义 2 读取配置值 3 修改和保存配置 4 注意 1 定义 csharp中在Settin ...

  6. Java配置文件Properties的读取、写入与更新操作

    /** * 实现对Java配置文件Properties的读取.写入与更新操作 */ package test; import java.io.BufferedInputStream; import j ...

  7. 【转】spring管理属性配置文件properties——使用PropertiesFactoryBean|spring管理属性配置文件properties——使用PropertyPlaceholderConfigurer

     spring管理属性配置文件properties--使用PropertiesFactoryBean 对于属性配置,一般采用的是键值对的形式,如:key=value属性配置文件一般使用的是XXX.pr ...

  8. 对Java配置文件Properties的读取、写入与更新操作

    http://breezylee.iteye.com/blog/1340868 对Java配置文件Properties的读取.写入与更新操作 博客分类: javase properties  对Jav ...

  9. 实现对Java配置文件Properties的读取、写入与更新操作

    /** * 实现对Java配置文件Properties的读取.写入与更新操作 */ package test; import java.io.BufferedInputStream; import j ...

随机推荐

  1. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  2. 怎么用ABBYY创建属于自己的PDF

    怎么创建一份属于自己的PDF文档呢?由于PDF格式文件具有跨平台.支持超长文件.安全可靠性高等诸多优势,在日常办公学习中应用越来越广泛.而随着技术的发展,各种办公软件也对PDF提供越来越多的支持,但P ...

  3. ERP中自定义报表制作流程

    查询制作流程 新增单表查询--查询语句设置--表格设置(列信息)--参数设置--关联设置--着色设置 报表设计需求(以差旅报销单为例) 1.制作按部门统计每个月的 报销金额并且可以关联到明细进行比对 ...

  4. NOIWC2018滚粗记

    Day0 \(THUWC\)刚刚结束..顺利的滚粗了 Day1 整理一下自己咸鱼的心 下午到学校坐车出发 这次队伍浩大THUWC只有4个 又到了雅礼洋湖这个地方 路上突然多了许多有关\(NOI\)的标 ...

  5. 【转载】ASP.NET MVC重写URL制作伪静态网页,URL地址以.html结尾

    在搜索引擎优化领域,静态网页对于SEO的优化有着很大的好处,因此很多人就想把自己的网站的一些网页做成伪静态.我们现在在网络上发现很多博客网站.论坛网站.CMS内容管理系统等都有使用伪静态这一种情况,伪 ...

  6. Vue.js中记不住 的东西

    给样式背景赋值: :style="{backgroundImage:'url(' + otherInfo.head_image + ')'}" <img :src=" ...

  7. flask 模板block super()的讲解

    Flask强大的地方就可以引用模板,而且非常方便. 这里不得不介绍block这个概念. 模板的文件一般放在templates文件夹下,我们这里新建一个HTML文件,存放模板,'base.html' 在 ...

  8. 记Asp.Net Core Swagger 使用 并带域接口处理

    引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升.但是使用Swagger时如果只是一般的控 ...

  9. Mac 流程图

    https://www.lucidchart.com/pages/signup?utm_expid=39895073-174.qKyHpBEbQS26y86OArD-rQ.1 https://www. ...

  10. 六.jQuery源码分析之jQuery原型属性和方法

    97 jQuery.fn = jQuery.prototype = { 98 constructor: jQuery, 99 init: function( selector, context, ro ...