JDBC-1
1.引入JDBC
什么是Jdbc
Java数据库连接,java可以操作各种关系型数据库
jdbc的本质是什么
本质就是一个普通的java类,数据库厂商提供的驱动jar包,来实现sun公司提供一套"应用程序接口规范"
2.JDBC七大操作步骤
1)注册驱动
Class.forName("com.mysql.jdbc.Driver");
2)获取数据库的连接对象
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/库名",
"用户名(root)",
"密码(8053698)"
);
3)准备好的sql语句
String sql = "...";
4)获取数据库的执行对象---执行sql语句
Statement statement = connection.createStatement();
5)数据库的执行对象 去操作数据库
int i = statement.executeUpdate(sql);
6)返回结果
syso("影响了"+i+"行");
7)释放资源
statement.close();
connection.close();
3.JDBC七大操作步骤的关于API的介绍
java.sql.Drvier 驱动接口
java.sql.DriverManager:驱动管理类(管理jdbc的驱动服务)
java.sql.Connection:与特定数据库的一种会话连接
java.sql.Statement:执行静态sql语句 (执行对象,操作数据库)
java.sql.ResultSet:获取数据表的结果集 (接口)
4.使用Statement对象完成DDL语句以及DML语句的操作
DDL语句(创建表):
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection();
String sql = "create table 表名(字段名称1 字段类型,...)";
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
statement.close();
connection.close();
DML语句(增删改):
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection();
增:String sql = "insert into 表名 values(...),...";
删:String sql = "delete from 表名 where 条件";
改:String sql = "update 表名 set 修改内容 where 条件";
Statement statement = connection.createStatement();
int i = statement.executeUpdate(sql);(i为受到影响的数据库表中的行数)
sout(i)
statement.close();
connection.close();
5.使用Statement完成DQL语句的操作
DQL语句(查):
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection();
String sql = "select * from 表名";
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
while(rs.next()){
数据类型 变量名=rs.getString("字段名称") 或者 数据类型 变量名=rs.getString(列的索引值);
使用变量名;
}
rs.close();
statement.close();
connection.close();
6.关于Statement完成DQL语句的应用
通过DQL语句将查询到的数据表中的数据赋值给对象,再将对象添加到集合中,这样数据库表中的数据就保存到集合中了
例如:
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection();
String sql = "select * from Student";
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
List<Student> list = new Arraylist<>();
Student stu = null ;
while(rs.next()){
stu = new Student();
数据类型 变量名=rs.getString("字段名称") 或者 数据类型 变量名=rs.getString(列的索引值);
使用变量名;
...
list.add(stu);
}
rs.close();
statement.close();
connection.close();
return list;
7.将jdbc的部分操作封装到工具类中
注意:首先要在src目录下配置文件(jdbc.properties)
public class JdbcUtils {
//成员变量声明
private static String url = null;
private static String username = null;
private static String password = null;
private static String driverClassname = null;
//静态代码块
static {
try {
//应该要获取url,username,password,driverClassname 这几个值
//需要properties配置文件
//java.util.Properties:属性集合列表 :属性列表中的每个键及其对应的值都是一个字符串。
Properties prop = new Properties();
//有个功能:public void load(InputStream inStream):将输入流中的内容到属性集合列表中
//读取src下面的jdbc.properties配置文件
//当期类.class.getClassLoader().getResourceAsStream("配置文件的名称xxx.properties") ;---获取资源文件所在的输入流对象
InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
//加载流对象到属性集合列表中
prop.load(inputStream);
//java.util.Properties的特有功能:可以通过键获取值
//public String getProperty(String key)
driverClassname = prop.getProperty("driverClassname"); //获取驱动类
url = prop.getProperty("url"); //获取url
username = prop.getProperty("username"); //用户名
password = prop.getProperty("password");//密码
//注册驱动
Class.forName(driverClassname);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private JdbcUtils() {
}
//获取连接对象
public static Connection getConnnection() {
try {
Connection connection = DriverManager.getConnection(
url,
username,
password
);
return connection;
} catch (SQLException e) {
e.printStackTrace();
}
return null ;
}
//释放资源
//如果是针对ddl语句或者dml语句,Statement对象以及Connection对象关闭
public static void close(Statement stmt, Connection conn) {
close(null, stmt, conn);
}
//如果是针对DQL语句,ResultSet对象以及Statement以及Connection对象关闭
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}