标签:jdbc
JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是操作数据库的Java语言。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
所以说你想连接什么数据库就得先导入该数据库的驱动
下面是jdbc操作oracle数据库的代码.
查询时executeQuery(),有结果集resultSet.其余操作时executeUpdate(),返回的数字.
package testJdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class TestJdbc { public static void main(String[] args) { //先定义好三个对象 Connection con=null; PreparedStatement pstmt=null;//防止sql注入,提高效率 ResultSet rs=null;//执行查询需要结果集 try { //加载oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //oracle的url String url="jdbc:oracle:thin:@10.1.0.169:1521:orcl"; //获得数据库连接 con=DriverManager.getConnection(url, "CL", "123456"); String sql="select producercode,producername from T_PRODUCER_INFO where telephone=?"; pstmt=con.prepareStatement(sql); //设置参数,从1开始 pstmt.setString(1, "110"); rs=pstmt.executeQuery(); while(rs.next()){ //获取这一行的列数据.索引从1开始 String code=rs.getString(1); String name=rs.getString(2); System.out.println("代码为"+code+"------"+"名称为"+name); } } catch (Exception e) { throw new RuntimeException(e); }finally{ //后使用的先关闭 try { if(rs!=null){ rs.close(); } if(pstmt!=null){ pstmt.close(); } if(con!=null){ con.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
时间类型
l 领域对象(domain)中的所有属性不能出现java.sql包下的东西!即不能使用java.sql.Date;
l ResultSet#getDate()返回的是java.sql.Date()
l PreparedStatement#setDate(int, Date),其中第二个参数也是java.sql.Date
时间类型的转换:
l java.util.Date à java.sql.Date、Time、Timestamp
把util的Date转换成毫秒值
使用毫秒值创建sql的Date、Time、Timestamp
l java.sql.Date、Time、Timestamp à java.util.Date
这一步不需要处理了:因为java.sql.Date是java.util.Date的子类;
java.sql包下给出三个与数据库相关的日期时间类型,分别是:
l Date:表示日期,只有年月日,没有时分秒。会丢失时间;
l Time:表示时间,只有时分秒,没有年月日。会丢失日期;
l Timestamp:表示时间戳,有年月日时分秒,以及毫秒。
大数据(Blob,Clob)
类型 | 长度 |
tinyblob | 28--1B(256B) |
blob | 216-1B(64K) |
mediumblob | 224-1B(16M) |
longblob | 232-1B(4G) |
tinyclob | 28--1B(256B) |
clob | 216-1B(64K) |
mediumclob | 224-1B(16M) |
longclob | 232-1B(4G) |
大数据比如视频,歌曲,图片,文本子类的.将他们存入数据库是通过IO流(插入的是IO流对象,读取的也是IO流)
CREATE TABLE tab_bin( id INT PRIMARYKEY AUTO_INCREMENT, filename VARCHAR(100), data MEDIUMBLOB );
插入数据库
con = JdbcUtils.getConnection(); String sql = "insertinto tab_bin(filename,data) values(?, ?)"; pstmt = con.prepareStatement(sql); pstmt.setString(1, "a.jpg"); InputStreamin = new FileInputStream("f:\\a.jpg");//得到一个输入流对象 pstmt.setBinaryStream(2,in);//为第二个参数赋值为流对象 pstmt.executeUpdate();
查询数据库
con = JdbcUtils.getConnection(); String sql = "selectfilename,data from tab_bin where id=?"; pstmt = con.prepareStatement(sql); pstmt.setInt(1, 1); rs = pstmt.executeQuery(); rs.next(); String filename = rs.getString("filename"); OutputStream out = new FileOutputStream("F:\\" + filename); InputStream in = rs.getBinaryStream("data"); IOUtils.copy(in, out); out.close();
大批处理
批处理就是一批一批的处理,而不是一个一个的处理!
当你有10条SQL语句要执行时,一次向服务器发送一条SQL语句,这么做效率上很差!处理的方案是使用批处理,即一次向服务器发送多条SQL语句,然后由服务器一次性处理。
批处理只针对更新(增、删、改)语句
l void addBatch(String sql):添加一条语句到“批”中;
l int[] executeBatch():执行“批”中所有语句。返回值表示每条语句所影响的行数据;
l void clearBatch():清空“批”中的所有语句。
con = JdbcUtils.getConnection(); String sql = "insertinto stu values(?,?,?,?)"; pstmt = con.prepareStatement(sql); for(int i = 0; i < 10; i++) { pstmt.setString(1, "S_10" + i); pstmt.setString(2, "stu" + i); pstmt.setInt(3, 20 + i); pstmt.setString(4, i % 2 == 0 ? "male" : "female"); pstmt.addBatch(); } pstmt.executeBatch();
标签:jdbc
原文地址:http://s5650326.blog.51cto.com/10667626/1726893