JDBCUtils

Junit  @test

Build Path-->Add libraries-->Util5

@Test
  public void SayHello(){
    System.out.println("HelloJUtils")

}

JDBC:java操作数据库

安装驱动的jar包

   private String className= "oracle.jdbc.driver.OracleDriver";
   private String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
   private String user = "briup"; 
   private String password = "briup";

   @Test
   public void test_connection1() {
    	 Connection conn=null;
    	try {
			Class.forName(className);
			conn = DriverManager.getConnection(url, user, password);
			System.out.println(conn);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	finally {
			if(conn!=null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
     }

       在编译的过程中我们要用到配置文件,让我们的代码更加安全。一般会把一些配置信息放在配置文件中,用读取文件的方式去读取配置文件。

封装JDBC获取连接的方式

	public static Connection getConnection() throws Exception {
		 InputStream is = 
         ClassLoader.getSystemClassLoader().getResourceAsStream("jdbcoracla.Properties");
		 
		 Properties pros = new Properties();
			pros.load(is);

			String user = pros.getProperty("user");
			String password = pros.getProperty("password");
			String url = pros.getProperty("url");
			String driver = pros.getProperty("driver");
		 
		 Class.forName(driver);
		 Connection conn = DriverManager.getConnection(url, user, password);
		return conn;		
	}

配置文件(oracla):创建jdbcoracla.Properties

user=briup
password=briup
url=jdbc:oracle:thin:@127.0.0.1:1521:XE
driver=oracle.jdbc.driver.OracleDriver

封装连接池的方式(druid):创建druid.Properties

	private static DataSource dataSource;
	static {
		 Properties properties = new Properties();
		 try {
			InputStream is = 
            JDBCUtils.class.getClassLoader().getResourceAsStream(" druid.properties");
			properties.load(is);
			dataSource = DruidDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getPoolConnection() throws Exception {
		return dataSource.getConnection();	
	}

DML语句和DDL语句类似:简单表示

 @Test
   public void psTest() {
	Connection conn = null;
	PreparedStatement ps = null;
	try {
		conn = JDBCUtils.getConnection();
		String sql = "insert into t_user(id,name,age) values(t_user_seq.nextval,?,?)";
			ps = conn.prepareStatement(sql);
			for (int i = 0; i <=100000; i++) {
				ps.setString(1, "tom"+i);
				ps.setInt(2, (int) (Math.random()*80));
				ps.execute();
					
			}
		   System.out.println("ps执行结束了:");
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		JDBCUtils.closeResourse(conn, ps, null);
	}
	
}

DQL语句查询操作:简单表示

       DQL语句一般是查询操作,用到PreparedStatement填充占位符完成操作,而且一般要创建查询的对象。

     public static <T> List<T> queryForList2(String sql,Function<ResultSet, 
      List<T>>f,Object... args) throws Exception{
		Connection conn =null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		List<T> list =null;
	   try {
		   conn = getConnection();
		   ps = conn.prepareStatement(sql);	
		   for (int i = 0; i < args.length; i++) {
			ps.setObject(i+1, args[i]);
		}
		   rs = ps.executeQuery();
		   list = f.apply(rs);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return list;
	}



    @Test
	public void queryForList_test() {
		String sql="select id,name,age from t_user where id in(?,?,?)";
		
		 Function<ResultSet, List<User>> f=rs -> {
			 List<User> list=new ArrayList<User>();
			 try {
				while(rs.next()) {
					    long id = rs.getLong(1);
					    String name = rs.getString(2);	
						int age = rs.getInt(3);
						User user = new User(id, name, age);
						list.add(user);
				 }
			} catch (Exception e) {
				e.printStackTrace();
			}
			return list;
		 };
		 List<User> list1=null;
		  try {
			list1 = JDBCUtils.queryForList2(sql, f,1,2,3);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		  System.out.println(list1);
			}

Statemrete和Preparestatement区别:

Statement在执行sql语句的时候一般都是执行一个创建一个。

Preparestatement是一个预编译的sql语句,一般可以在执行conn.Preparestatement(sql);这个获取连接对象的时候已经将sql模板发送给了数据库。当执行sql语句的时候一般采用填充占位符的方式来对执行sql语句。

相对于Statemen,Preparestatement解决了sql注入的问题,会使数据库更加安全。

获取到数据库连接对象之后,可以进行批处理(Batch)操作。

批处理可以提高java代码执行sql语句的效率

for(int i=1;i<=10000;i++) {
     ps.setString(1, "tom"+i); 
     ps.setInt(2, 20); 
        //把这组数据加入到批处理中 
        ps.addBatch(); 
        //每200条提交执行一次 
    if(i%200==0) {
         ps.executeBatch(); 
} //防止批处理中的sql语句没有执行
  ps.executeBatch();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值