Jdbc常见数据类型及PreparedStatement接口

我们使用jdbc在对数据操作的时候我们需要知道数据库里的数据类型和我们的java数据类型是如何对应的,这样存取的时候才不会出现不必要的错误,

我们就拿mysql为例

类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述
      
VARCHARL+NVARCHARjava.lang.String12 
CHARNCHARjava.lang.String1 
BLOBL+NBLOBjava.lang.byte[]-4 
TEXT65535VARCHARjava.lang.String-1 
      
INTEGER4INTEGER UNSIGNEDjava.lang.Long4 
TINYINT3TINYINT UNSIGNEDjava.lang.Integer-6 
SMALLINT5SMALLINT UNSIGNEDjava.lang.Integer5 
MEDIUMINT8MEDIUMINT UNSIGNEDjava.lang.Integer4 
BIT1BITjava.lang.Boolean-7 
BIGINT20BIGINT UNSIGNEDjava.math.BigInteger-5 
FLOAT4+8FLOATjava.lang.Float7 
DOUBLE22DOUBLEjava.lang.Double8 
DECIMAL11DECIMALjava.math.BigDecimal3 
BOOLEAN1同TINYINT   
      
ID11PK (INTEGER UNSIGNED)java.lang.Long4 
      
DATE10DATEjava.sql.Date91 
TIME8TIMEjava.sql.Time92 
DATETIME19DATETIMEjava.sql.Timestamp93 
TIMESTAMP19TIMESTAMPjava.sql.Timestamp93 
YEAR4YEARjava.sql.Date91


红色标注基本就是比较常用的数据类型了、其他的用到的情况并不是很多这个BLOB是用于存储二进制的比如图片什么的


我们主要来说一下这个DATE和BLOB这两个数据类型


日期类型DATE

这里我们要注意jdbc数据库里面日期类型如果是date那么他返回的java就应该是个java.sql.Date类型的

而Java.sql.Date是java.util.Date的子类我们不要混为一谈

Java.sql.Date 是不带有时间的

java.util.Date是带有时间的

如果我们错误的将java.util.Date 存到DATE数据类型里那么时间他就丢失了这个要格外注意

那我们如果要保持时间我们应该怎么办呢

setTimestamp 我们使用这个方法来存 他会将时间自动转换为TIMESTAMP这个类型


我们来看一下例子


public void insertTimeStamp() throws SQLException {
		Connection conn = null;
		//注意这个接口
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			conn = ConnCreate.getConnection("jdbc:mysql://localhost:3306/test",
					"root", "r66t");
			//注意这个sql 我们使用了一个?作为一个占位符
			String sql = "insert into user(id,name,birthday,money) values(5,'zhaowu',?,13000.00)";
			stmt = conn.prepareStatement(sql);
			//我们在这里为这个占位符替换了值、他是按照1.2.3.4的顺序来进行替换的
			stmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
			stmt.execute();
		} finally {
			ConnCreate.close(conn, stmt, rs);
		}
	}




这个结果我就不给大家贴上来了、自己可以去试一下我们可以PreparedStatement 这个接口在这里被我使用了、我建议大家永远都不要使用Statement这个借口而使用我们PreparedStatement这个接口、原因有很多比如他是预编译的执行速度比Statement要快,他继承了Statement所有的方法还额外扩展了一些方法,还有使用它有利于我们的代码可读和可维护性。

同时我们使用参数化查询、不必每次都发送sql语句、从而减小数据库的压力、而他的使用方法和Statement是一样只是多了一个设置参数的步骤、相关的方法可以自己去查看一下文档即可。

最后我们贴一个BLOB类型的代码

public void insertBlob() throws SQLException, IOException {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			conn = ConnCreate.getConnection(
					"jdbc:mysql://192.168.1.153:3306/bpf_test", "root",
					"123456");
			String sql = "insert into blob_test(id,info) values(?,?)";
			stmt = conn.prepareStatement(sql);
			stmt.setInt(1, 3);
			File file = new File(
					"e:\\kt_000091.jpg");
			FileInputStream fis = new FileInputStream(file);
			stmt.setBinaryStream(2, fis, (int) file.length());
			stmt.execute();
			fis.close();
		} finally {
			ConnCreate.closeConnection(conn, stmt, rs);
		}
	}

	public void queryBlob() throws SQLException, IOException {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			conn = ConnCreate.getConnection(
					"jdbc:mysql://192.168.1.153:3306/bpf_test", "root",
					"123456");
			String sql = "select info from blob_test where id=3";
			stmt = conn.prepareStatement(sql);
			rs = stmt.executeQuery();
			if (rs.next()) {
				InputStream is = rs.getBinaryStream(1);
				File file = new File("e:\\a.jpg");
				OutputStream os = new FileOutputStream(file);
				int len = 0;
				byte[] buffers = new byte[1024];
				while ((len = is.read(buffers)) > 0) {
					os.write(buffers, 0, len);
				}
				os.flush();
				os.close();
				is.close();
			}
		} finally {
			ConnCreate.closeConnection(conn, stmt, rs);
		}
	}

它用来将我们的图片等转化为二进制的形式存放在数据库里面、我们怎么存进去的只要按照规则在读取出来就可以了。

这里我们jdbc的一些基本操作就已经说完了、我们在实际项目中还有很多比如如何开启事物、调用存储过程等等、以后记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值