一:DriverManager(驱动管理类)
1注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
提示Mysql 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/Services/java.sql.Driver文件中的驱动类
2获取连接
getConnection(String url,String User,String password)
参数
url:连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2.....
例如:
String url="jdbc:mysql://127.0.0.1:3306/school";//school为你自己的数据库名称
细节:
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写
String url="jdbc:mysql:///school";//school为你自己的数据库名称
配置useSSL=false 参数,禁用安全连接方式,解决警告提示
String url="jdbc:mysql:///school?useSSL=false";//school为你自己的数据库名称
二:Connection(数据库连接对象)
1获取执行sql的对象
普通执行sql对象
Statement createStatement()
预编译Sql的执行sql对象:防止sql注入
PreparedStatement prepareStatement(sql)
执行存储过程的对象
CallableStatement prepareCall(sql)
2管理事务
Mysql事务管理
开启事务:Begin;/Start Transaction;
提交事务: commit
回滚事务 :rollback;
mysql默认自动提交事务
JDBC事务管理:connection接口定义3个对应的方法
开启事务 setAutoCommit(boolean autoCommit) true为自动提交事务,false为手动提交事务,即开启事务
提交事务:commit()
回滚事务:rollback()
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test2 {
//事务模拟
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
String url="jdbc:mysql:///school"; //school为你的数据名称
String userName="root";
String passWord="666";
Connection con=DriverManager.getConnection(url, userName, passWord);
try {
con.setAutoCommit(false);//开启事务
String sql="UPDATE employee set e_money=3000 WHERE e_name='张三'";
Statement st=con.createStatement(); //获取执行对象
int count =st.executeUpdate(sql); //执行sql
String sql2="UPDATE employee set e_money=3000 WHERE e_name='李四'";
int count2=st.executeUpdate(sql2);
System.out.println(count);
System.out.println(count2);
con.commit();//如果正确就提交事务
} catch (Exception e) {
con.rollback();//出错回滚事务
e.printStackTrace();
}
}
}
三:Statement
执行sql语句
int executeUpdate(sql) :执行DML,DDL语句
返回值:DML语句影响行数,,DML可以根据返回值是否大于0,判断是否执行成功; DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql) :执行 DQL语句
返回值:ResultSet结果集
ResultSet(结果集对象)
1封装DQL查询的语句的结果
ResultSet Stmt.executeQuery(sql) 执行DQL语句,返回ResultSet 对象
2获取查询的结果
Boolean next() 将光标从当前位置向前移动一行 判断当前行是否为有效行(是否有数据)
返回值:
true :有效行 ,当前行有数据
false :无效行 ,当前行没有数据
获取数据
xxx getXxx(参数)
xxx为数据类型 如 int getlnt(参数); String getString(参数)
参数有两种类型
int :列的编号,从1开始
String :列的名称
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test3 {
public static void main(String[] args) throws Exception{
String url="jdbc:mysql:///school";
String username="root";
String passWard="666";
Connection con=DriverManager.getConnection(url, username, passWard);//获取连接
String sql="select * from employee";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
/*
while(rs.next()) {//判断是否有数据
System.out.println("-----------");
int in=rs.getInt(1);
String s=rs.getString(2);
int in2=rs.getInt(3);
System.out.println("学号:"+in);
System.out.println("姓名:"+s);
System.out.println("奖学金:"+in2);
}
*/
System.out.println("-----------");
//第二种方式参数填字段名
while(rs.next()) {
System.out.println("------------");
int myin=rs.getInt("e_id");
String mys=rs.getString("e_name");
int money=rs.getInt("e_money");
System.out.println("学号:"+myin);
System.out.println("姓名:"+mys);
System.out.println("奖学金:"+money);
}
}
}
案例:
把查询的数据,封装成Student对象,并且存储到Arraylist集合中去
创建一个学生类
public class Student {
private int id;
private String name;
private int money;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the money
*/
public int getMoney() {
return money;
}
/**
* @param money the money to set
*/
public void setMoney(int money) {
this.money = money;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", money=" + money + "]";
}
public Student(int id, String name, int money) {
super();
this.id = id;
this.name = name;
this.money = money;
}
}
主函数
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Test4 {
//把从mysql中遍历的数据封装成student对象,并用ArrayList存起来
public static void main(String[] args) throws Exception {
String url="jdbc:mysql:///school";
String userName="root";
String PassWord="666";
Connection con=DriverManager.getConnection(url, userName, PassWord);//创建连接
Statement st=con.createStatement();
String sql="select * from employee";
ResultSet rs=st.executeQuery(sql);
//创建一个ArrayList集合
List<Student> list=new ArrayList<>();
while(rs.next()) {
int id=rs.getInt(1);
String name=rs.getString(2);
int money=rs.getInt(3);
list.add(new Student(id, name, money)); // 把学生对象添加到集合中
}
System.out.println(list); //我已经重写了toStirng方法
//输出[Student [id=1, name=张三, money=3000], Student [id=2, name=李四, money=3000]]
}
}