JDBC(Java DataBase Connectivity)
称为:java访问数据库的解决方案,希望以相同的方式访问不同的数据库
目的:以实现与具体数据库无关的java操作。JDBC定义了一整套的标准接口,即访问数据库通用的API,不同的数据库厂商根据各自数据库特点去实现这些接口,从而得到java程序的访问。
1、JDBC接口
1)驱动管理(用来获取连接)
DriverManager
2)连接接口
Connection
3)语句对象(对应执行的操作)
Statement
PreparedStatement
4)结果集接口
ResultSet
2、JDBC工作流程
1)加载驱动,建立连接
2)创建语句对象
3)执行sql语句
4)处理结果集
第一种:查询(包含结果集,执行第四步)
第二种:更新(不需要去处理结果集,可省略第四步)
5)关闭连接
3、代码说明
Driver接口及驱动类加载(oracle)
Class.forName("oracle.jdbc.driver.OracleDriver");
说明:使用反射机制实例化OracleDriver驱动类(从jdbc2开始就不需要显示调用,调用getConnection()会自动加载合适的驱动。建议直接添加驱动)
con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","123456");
说明:127.0.0.1表示服务器地址(也可以用localhost)
1521表示oracle端口号
orcl表示数据库应用名
Connection只是一个接口,真正的实现是由数据库厂商提供的驱动包完成
Statement st=con.createStatement(); //创建语句对象
st.executeQuery(sql); //返回ResuitSet结果集,用于查询
st.executeUpdate(sql); //返回int,用于增加、修改、删除
说明:ResultSet结果集:执行查询sql语句返回的结果集,查询的结果存放在ResultSet对象的一系列中,最初位置是位于行首
rs.next()方法用于在行间移动,rs.getXX()方法用来取字段对应的数据
4、MySQL的Driver接口及驱动类
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student","root","1234");
5、在src下面创建文件:db.properties(.properties后缀名为这样的文件)将驱动和连接数据库的操作都放在该文件中
注意:
a. 更改编码格式为utf-8
b. 该文件存储方式是以键值对存储的(key-value)
c. 文件中使用注释是以“#”开头,中文字符存储会乱码,使用英文
6、语句对象:Statement与PreparedStatement的区别
Statement:主要用于执行静态的sql语句(表示内容固定不变的sql语句)。Statement每一次执行都要对传入的sql语句进行编译,效率低
某些情况下,sql语句只是其中的参数不同,其他的字句都是相同的,这种适合用PreparedStatement,PreparedStatement能够预防sql注入攻击问题
PreparedStatement也是一个接口,继承Statement,sql语句有提前编译(效率高)。常用的方法以被修改,方法不在需要参数。executeQuery()、executeUpdate()
如:insert into dept_xu values(?,?,?); //用问号代替参数
PreparedStatement实例包含事先编译的sql语句,sql语句可以有一个或n个IN参数,IN参数的值在sql语句创建时未被指定,此语句为每个IN参数保留一个问号(问号作为占位符),每一个问号的值必须在执行语句之前,通过这样的setInt或setString方法提供进行赋值
PreparedStatement对象以被预编译过,其执行速度是快于Statement对象的,建议多次执行的sql语句创建为PreparedStatement对象,以提高效率,如:批处理。