JDBC连接步骤
//添加
public static void insert() {
//链接对象
Connection conn = null;
//执行对象
PreparedStatement pst = null;
//接收返回对象
int result = 0;
try {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、创建链接
String url = "jdbc:mysql://localhost:3306/student?characterEncoding=utf-8"; //地址
String user = "root"; //用户名
String password = "123456"; //密码
conn = DriverManager.getConnection(url, user, password); //链接
//3、创建执行对象
//sql语句
String sql = "insert into stu (stuname,age,address) values (?,?,?)";
//执行对象
pst = conn.prepareStatement(sql);
pst.setString(1, "小红");
pst.setInt(2, 22);
pst.setString(3, "上海");
//4、执行并返回结果
result = pst.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5、关闭链接
try {
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
查询
public static void select() {
//创建链接对象
Connection conn = null;
//执行对象
PreparedStatement pst = null;
//定义结果集对象
ResultSet rs = null;
//定义一个集合去接收结果集中的值
List<Student> list = new ArrayList<Student>();
try {
//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2、建立链接
String url = "jdbc:mysql://localhost:3306/student";
String userName = "root";
String password = "123456";
conn = DriverManager.getConnection(url, userName, password);
//3、创建执行对象
//sql语句
String sql = "select * from stu";
//执行对象
pst = conn.prepareStatement(sql);
//4、执行并返回结果
rs = pst.executeQuery();
while (rs.next()) { //rs包含所有数据,next()表示向下走一行
Student stu = new Student();
stu.setStuid(rs.getInt("stuid"));
stu.setStuname(rs.getString("stuname"));
stu.setAge(rs.getInt("age"));
stu.setAddress(rs.getString("address"));
//向集合中添加数据
list.add(stu);
}
//遍历集合
/*
for(Student s:list) {
System.out.println(s);
}
*/
/*
for(int i=0;i<list.size();i++) {
Student student = list.get(i);
System.out.println(student);
}
*/
//迭代器
Iterator<Student> it = list.iterator();
while(it.hasNext()) {//判断当前元素是否存在,并指向下一个
Student student1 = it.next();
System.out.println(student1);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5、关闭链接
try {
rs.close(); //关闭结果集
pst.close(); //关闭执行对象
conn.close(); //关闭链接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
删除
-
PreparedStatement :预编译执行对象,是Statement对象子类
-
把sql语句预编译并存储到PreparedStatement对象中
-
它允许该sql语句由占位符 ? ,创建完成以后去对占位符进行赋值,占位符的坐标从1开始
public static void main(String[] args) { //链接对象 Connection conn= null; //执行对象 PreparedStatement pst = null; //定义变量接收返回结果 int result = 0; try { //1、加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2、建立链接 String url = "jdbc:mysql://localhost:3306/student"; String userName = "root"; String password = "123456"; conn = DriverManager.getConnection(url, userName, password); //3、创建执行对象 //sql语句 String sql = "delete from stu where stuid = ?"; //创建执行对象 pst = conn.prepareStatement(sql); //赋值 //pst.setInt(1, 2); pst.setString(1,"2"); //4、执行并返回结果 result = pst.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { //5、关闭链接 pst.close(); //关闭执行对象 conn.close(); //关闭链接对象 } catch (SQLException e) { e.printStackTrace(); } } if(result>0) { System.out.println("删除成功"); }else { System.out.println("删除失败"); } }
二、 使用JDBC进行CRUD操作
1、 增加
A、直接拼接SQL语句
String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values('企合部','济宁',5,5,10)";
Statement stm = conn.createStatement();
int result = stm.executeUpdate(sql);
B、使用预编译访问
String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values(?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, dname);
ps.setString(2, location);
ps.setInt(3, ActualNum);
ps.setInt(4, remaindernum);
ps.setInt(5, toplimitnum);
int result = ps.executeUpdate();
2、 修改
同上
3、 删除
同上
4、 查询
String sql = "select * from dept where did=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet result = ps.executeQuery();
while(result.next()){
String dname1 = result.getString(2);
System.out.println(dname1);
}
可以根据字段名获取结果值getString(“列名”);
三、 使用JDBC进行批量操作
String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values(?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i < 3; i++) {
ps.setString(1, dname);
ps.setString(2, location);
ps.setInt(3, i);
ps.setInt(4, 0);
ps.setInt(5, i);
ps.addBatch();
}
int[] result = ps.executeBatch();
优点:提高数据库访问效率。
四、 使用JDBC进行事务处理
事务处理的核心意义:将一系列操作放在一个事务下管理,正常情况全部执行,异常情况回滚。
Connection conn = DriverManager.getConnection(URL, USER, PWD);
// 需要执行的一系列SQL语句
String sql = "insert into dept(dname,location,ActualNum,Remaindernum,toplimitnum) values('qiyebu','jining',6,4,10)";
String sql2 = "update dept set dname='yuanxiaobu' where dname='qiyebu'";
// 将事务默认提交修改为手动提交
try{
Statement s1 = conn.createStatement();
conn.setAutoCommit(false);
// 执行一系列操作
s1.executeUpdate(sql);
s1.executeUpdate(sql2);
// 提交事务
conn.commit();
// 再将事务改为默认提交
conn.setAutoCommit(true);
}catch(Exception e){
conn.rollback(); 如果有异常,则回滚
e. printStackTrace ();
}