关于元数据和大数据的操作

元数据

         定义:描述数据的含义的一些信息

Jdbc为我们提供了多种元数据

1:表示数据库连接的元数据

DatabaseMetaData dmd=(DatabaseMetaData) conn.getMetaData();

通过用对象 dmd 来调用方法来获取信息

例如

		System.out.println(dmd.getDatabaseProductName());//获取当前数据库名称
			System.out.println(dmd.getDatabaseProductVersion());//获取数据库的版本

执行结果如下

2:获得数据库的元数据

		public static void printResult(String sql) throws SQLException {
	Connection conn=Jdbcutil.getConnection();
	try(Statement st=conn.createStatement();
			ResultSet rs=st.executeQuery(sql)) {
		//获得结果集的列数
		ResultSetMetaData rmd=rs.getMetaData();
		int count =rmd.getColumnCount();
		System.out.println(sql+"列数为"+count);
		for(int i=1;i<=count;i++) {
			System.out.println(rmd.getColumnLabel(i)+"\t");//获取列名
			System.out.println(rmd.getColumnTypeName(i));//获取当前列的类型
		}
	}
}

Jdbc对大数据的处理

思路

        1:使用Connection。reateBlob()创建一个blob对象;
		2:获得这个blob对象的输出流:setBinaryStream(1);
		3:向流中写入字节;
		4:通过ps.setBlob()将二进制存在数据库中
	public static void main(String[] args) throws Exception {
		String sql="insert into emp values(?,?,?)";
		try(Connection conn=Jdbcutil.getConnection();
				PreparedStatement ps=conn.prepareStatement(sql)){
			Blob blob =conn.createBlob();//创建一个blob类型
			OutputStream os=blob.setBinaryStream(1);//获得blob的输出流
			//向os中输出图片
			FileInputStream fis=new FileInputStream("F:\\AboutMywork\\MyWorkspase\\yy.png");
			byte[] bs=new byte[100];
			int size=-1;
			while((size=fis.read(bs))!=-1) {
				os.write(bs,0,size);
			}
			fis.close();
			os.close();
			ps.setBlob(1,blob);
			ps.setString(2, "李白");
			ps.setInt(3, 1);	
			ps.execute();
			System.out.println("存入成功");
		}			
	}
}
		}
	}
}

在这里插入图片描述

大对象的读取

1:查出resultSet
2:获得这个blob对象的出入流:setBinaryStream(1);
3:向流中写入字节,写到blob硬盘上,getBinaryStream();

		String sql="select * from emp where empno=?";
		try(Connection conn=Jdbcutil.getConnection();
				PreparedStatement ps=conn.prepareStatement(sql)){
			ps.setInt(1, empno);
			ResultSet rs=ps.executeQuery();
			if(rs.next()) {
				System.out.println(rs.getString(2));
				String fileName ="d:/"+rs.getString(3);
				Blob b=rs.getBlob(1);
				//写到blob硬盘上
				InputStream is=b.getBinaryStream();
				FileOutputStream fos =new FileOutputStream(fileName);
				byte[] bs=new byte[100];
				int size=-1;
				while((size=is.read(bs))!=-1) {
					fos.write(bs, 0, size);
				} 
				fos.close();
				is.close();

在这里插入图片描述

运行结果

在这里插入图片描述

返回生成的主键

如何获得数据库生成的主键
1.通过一个重载的prepareStatement(sql,int),来设置是否返回有数据库生成的主键,然后在使用ps。getGenereatedKeys();

				String sql1="insert into emp(ename) valuse(?)";
		String sql2="insert into hp valuse(null,?,?)";
		Connection conn=Jdbcutil.getConnection();
		conn.setAutoCommit(false);
		try(
				PreparedStatement ps=conn.prepareStatement(sql1,Statement.RETURN_GENERATED_KEYS);
				PreparedStatement ps2=conn.prepareStatement(sql2);){
			//插入emp
			ps.setString(1, name);
			ps.execute();
			ResultSet rs=ps.getGeneratedKeys();
			rs.next();
			int empno=rs.getInt(1);
			System.out.println(empno);
			for(String s:hobby) {
				ps2.setString(1, s);
				ps2.setInt(2,empno);
				ps2.execute();
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值