加载驱动
创建连接
Class.forName("com.mysql.jdbc.Driver");
public static Connection conn;
public static ResultSet rs;
public static PreparedStatement st;
private static String url ="jdbc:mysql://localhost:3306/stu?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false";
// 建立连接
public static String[] getConn() {
String[] user = new String[2];
user[0] = "admin";
user[1] = "admin";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, "root", "root");
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
// 释放连接
public static void closeConn() { // 关闭连接
try {
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
execute 执行 query查询 update 更新
statement 缺点 1.不安全 2.需要进行字符串的拼接 3,效率低
PreparedStatement 是statement的升级版
1.使用statement创建连接代码
// 查询数据 表
public static void searchAll() throws Exception {
getConn();
// 3.写sql语句
String sql="select * from 表名";
// 4.创建statement实例
st = conn.createStatement();
// 5.执行sql 执行查询方法,有返回值,返回的是一个结果集
//execute 执行 query查询
rs = st.executeQuery(sql);
// 6.遍历结果集,输出结果
System.out.println("学号 \t" + "姓名 \t" + "年龄\t" + "性别");
while (rs.next()) {
System.out.println(rs.getInt("stuNo") + "\t" + rs.getString("name"));
}
// 7.关闭连接 先开的后关,后开的先关
closeConn();
}
// 更新数据
public static void updateEmp(String sql) throws Exception {
getConn();
// 3.写sql语句
// 4.创建statement实例
st = conn.createStatement();
// 调用此方法实现数据的删除,返回值类型是int类型,返回的是受影响的行数
// 如果成功的删除了若干(3)行,就会返回3;如果删除失败,则返回0;
// 我们就可以根据返回值是否为0,判断是否删除成功
int i = st.executeUpdate(sql);
if (i > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
// 7.关闭连接 先开的后关,后开的先关
closeConn();
}
2.使用PreparedStatement创建连接
// 查询数据 emp 中某一条记录
public static Stu searchById(int id) throws Exception {
Stu stu = new Stu();
getConn();
// 3.写sql语句
String sql = "select * from students where stuNo=?";
// 4.创建statement实例
st = conn.prepareStatement(sql);
st.setInt(1, id);
// System.out.println("st byid: " + st);
// 5.执行sql 执行查询方法,有返回值,返回的是一个结果集
rs = st.executeQuery();
// 6.遍历结果集,输出结果
/*
* System.out.println("学号 \t" + "姓名 \t" + "年龄\t"+ "性别\t"+ "年级\t "+
* "电话\t " + "Email" + " " + "地址");
*/
if (rs.next()) {
/*
* System.out.println(rs.getInt("stuNo") + "\t" +
* rs.getString("name") + "\t" + rs.getInt("age") + "\t" +
* rs.getString("sex") + "\t" +
* rs.getString("grade")+"\t"+rs.getLong("tel")+" \t "+rs.getString(
* "email")+"\t"+rs.getString("address"));
*/
stu.setStuNo(rs.getInt("stuNo"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
stu.setSex(rs.getString("sex"));
stu.setGrade(rs.getString("grade"));
stu.setTel(rs.getLong("tel"));
stu.setAddress(rs.getString("address"));
stu.setGid(rs.getInt("gid"));
}
// 7.关闭连接 先开的后关,后开的先关
closeConn();
return stu;
}
public static Boolean searchChose(String sql) throws Exception{
getConn();
st = conn.prepareStatement(sql);
rs = st.executeQuery();
boolean flag=rs.next();
closeConn();
return flag;
}
// 更新数据
public static void updateEmp(String sql,Object[] prim) throws Exception {
getConn();
// 3.写sql语句
// 4.创建statement实例
PreparedStatement ps = conn.prepareStatement(sql);
// 调用此方法实现数据的删除,返回值类型是int类型,返回的是受影响的行数
// 如果成功的删除了若干(3)行,就会返回3;如果删除失败,则返回0;
// 我们就可以根据返回值是否为0,判断是否删除成功
for (int i = 0; i < prim.length; i++) {
ps.setObject(i+1,prim[i] );
}
int i = ps.executeUpdate();
if (i > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
// 7.关闭连接 先开的后关,后开的先关
closeConn();
}
删除
System.out.println("请输入要删除的学生id");
int stuNo = input.nextInt();
String sql2 = "delete from students where stuNo=?";
Stu st=new Stu();
st.setStuNo(stuNo);
Object[] prim={st.getStuNo()};
stu.updateEmp(sql2,prim);
添加
String sql = "insert into students values(?,?,?,?,?,?,?,?,?)";
Stu st=new Stu();
st.setStuNo(id);
st.setName(name);
st.setAge(age);
st.setAddress(address);
st.setEmail(email);
st.setGid(gid);
st.setSex(sex);
st.setTel(tel);
st.setGrade(grade);
Object[] prim={st.getStuNo(),st.getName(),st.getAge(),st.getSex(),st.getGrade(),st.getTel(),st.getEmail(),st.getAddress()
,st.getGid()};
stu.updateEmp(sql,prim);