前言:
想必大家在实际编码中都遇到过JDBC的操作, 这里仅做自己的一个总结, 有错误和不完整之处还请大家提出来.
1,JDBC其实一套规范(接口)
数据库厂商需要实现此接口(实现类)--数据库驱动
2,jdbc的作用:
可以和数据库创建链接
发送sql语句
接收返回值,处理结果
3,api详解(java.sql或者javaX.sql)
DriverManager 类:
管理一组 JDBC 驱动程序的基本服务。
常用方法:
registerDriver(Driver):注册驱动
查看 mysql的Driver的时候有下面一段代码:
发现在类加载的时候已经注册过驱动,我们以后只需要把Driver加载到内存即可
类.Class
对象.getClass()
Class.forName("全限定名(包名+类名)")
以后开发中我们通过Class.forName("com.mysql.jdbc.Driver")把驱动注册进去即可.
static Connection getConnection(String url, String user, String password) :获取链接
参数说明:
url:告诉jdbc去连接那个数据库
固定格式: 协议:子协议:子协议名称 参数
mysql: jdbc:mysql ://localhost:3306/databaseName
oracle: jdbc:oracle:thin :@localhost:1521:实例名
user:数据库的登录名
password:数据库的登录密码
Connection 接口:
创建语句执行者:
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");
常用方法:
Statement createStatement():创建Statement -语句执行者
PreparedStatement prepareStatement(String sql) :创建一个预编译的语句执行对象
CallableStatement prepareCall(String sql) :(了解) 创建一个 CallableStatement 对象来调用数据库存储过程。
Statement 接口(容易产生sql注入, 后期使用PreparedStatement. 后面会有blog说明这个问题)
sql语句执行者:
Statement st=conn.createStatement();
常用方法:
ResultSet executeQuery(String sql) :执行查询语句,返回一个集合 ☆
int executeUpdate(String sql) :执行更新 插入 删除语句,返回影响行数.☆
boolean execute(sql):执行给定的 SQL 语句,该语句可能返回多个结果。
若返回true ,执行是的查询语句
调用 getResultSet 获取查询结果
若返回false,执行的是更新 插入 删除语句
调用 getUpdateCount 获取影响的行数 ResultSet rs=st.executeQuery(sql);
4, 实例JDBCUtil类的书写
(1)配置文件 jdbc.properties
drivername=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ddatabaseName user=root password=1234
(2)JDBCUtil.java
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 import java.util.ResourceBundle; 7 8 public class JDBCUtil { 9 //ctrl + shift + x 转成大写 10 //ctrl + shift + y 转成小写 11 static final String DRIVERNAME; 12 static final String URL; 13 static final String USERNAME; 14 static final String PASSWORD; 15 16 static{ 17 18 /*通过ResourceBundle 专门用来加载properties文件 19 ResourceBundle bundle=ResourceBundle.getBundle("文件名称"); 20 21 通过 bundle.getString(键的名字) 22 String value=bundle.getString("url"); 23 */ 24 25 ResourceBundle bundle=ResourceBundle.getBundle("jdbc"); 26 DRIVERNAME=bundle.getString("drivername"); 27 URL=bundle.getString("url"); 28 USERNAME=bundle.getString("user"); 29 PASSWORD=bundle.getString("password"); 30 } 31 32 static{ 33 try { 34 Class.forName(DRIVERNAME); 35 } catch (ClassNotFoundException e) { 36 e.printStackTrace(); 37 } 38 } 39 40 //获取链接 41 public static Connection getConnection() throws SQLException{ 42 return DriverManager.getConnection(URL,USERNAME,PASSWORD); 43 } 44 45 //释放资源 46 public static void closeResource(Connection conn,Statement st,ResultSet rs){ 47 if (rs!=null) { 48 try { 49 rs.close(); 50 } catch (SQLException e) { 51 e.printStackTrace(); 52 } 53 } 54 55 if (st!=null) { 56 try { 57 st.close(); 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 } 61 } 62 63 if (conn!=null) { 64 try { 65 conn.close(); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 } 70 71 } 72 }