1、加载驱动
2、获取连接
3、获取statement对象,执行sql语句
(1)sql没有?----》Statement
(2)sql有?------》PreparedStatement
执行sql:
添加/更新/删除 ----》execute()
查询------》executeQuery()
Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。
4、关闭资源
resultSet
statement
Connection
特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。(使用原则:尽量晚的创建,尽量早的释放)
ResultSet提供了将数据库类型转换为java中可以使用的类型
其他知识:
ip:计算机在网络中的唯一标识域名
与ip地址一一对应DNS:域名解析服务器
url:统一资源定位符:uniform resource location
协议://ip/文件路径
jdbc:mysql://localhost:3306/db_0425
数据库连接基本操作
public static void add(){
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
/* url:统一资源定位符 uniform resource location
* 格式: 协议://ip/资源文件路径
* 告诉JDBC要连接哪个数据库
*/
//2.获取连接
//param1: 数据库地址 url
//param2: 用户名
//param3: 密码
/*
*Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的
*一个对象,客户端与数据库所有交互都是通过
*
*/
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_0425", "root", "123456");
//3.获取statement对象 , 执行sql语句
//Statement对象用于向数据库发送SQL语句
Statement statement = connection.createStatement();
// 执行查询语句: executeQuery()
// 执行添加/删除/修改: execute()
statement.execute("insert into user(name,password,age) values('王五','123',20)");
//4. 关闭资源
connection.close();
//ResultSet用于代表SQL语句的执行结果。Resultset封装执行结果时,采用的类似于表格的
//方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之
//前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的
//数据。注意:列的索引从1开始。
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
遍历数据库表中数据
//查询user表中所有数据
public static void queryAll(){
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/db_0425";
Connection connection = DriverManager.getConnection(url, "root", "123456");
Statement statement = connection.createStatement();
//查询:query
// 查询到的结果在ResultSet中
ResultSet set = statement.executeQuery("select * from user");
// 遍历
while(set.next()){
//set 指向当前这条数据
//获取这条数据的各个字段数据
//根据索引获取(列的索引从1开始)
int id = set.getInt(1);
//根据字段名称获取 (表中字段名)
String name = set.getString("name");
String password = set.getString("password");
int age = set.getInt("age");
System.out.println("id:"+id+" name:"+name+" password:"+password+" age:"+age);
}
//4.关闭资源
set.close();
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
带参数的数据对数据库进行操作
public static void addUser(String name,String password,int age){
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/db_0425";
Connection connection = DriverManager.getConnection(url, "root", "123456");
/*
Statement statement = connection.createStatement();
statement.execute("insert into user(name,password,age) values('"+name+"','"+password+"')")
*/
// ? :占位符
String sql = "insert into user(name,password,age) values(?,?,?)";
//PreparedStatement 预处理statement
PreparedStatement pStatement = connection.prepareStatement(sql);
// 把?替换成具体数据
//parameter:参数
//param1: 参数的索引 ?的索引 :从1开始
//param2: ?对应的具体数据
pStatement.setString(1, name);
pStatement.setString(2, password);
pStatement.setInt(3, age);
//执行sql (调用不带参数的方法)
pStatement.execute();
//关闭资源
pStatement.close();
connection.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}