- 用途
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果
- 怎么使用jdbc
贾 --》jar包(导入jar)
琏 à连接对象
欲 àsql 语句
执 –-》curd(增删改查)
事à 关闭连接 释放资源
- 使用jdbc进行curd
- 添加jar
- 创建连接对象(注意:jdbc中操作用到的对象 都是在import java.sql.Connection;)
//获取连接对象 static Connection connection; //静态代码块 执行时机 只会在类第一次被加载的时候执行 并且始终只会执行一次 static{
try { //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接对象 //url 路径 数据库在哪里 //user 填写的 是连接数据库的用户名 root //password 填写的 是连接数据库的密码 root //jdbc:mysql://localhost:3306/数据库名字 connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/7505test", "root", "root"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
} |
- 执行新增操作
public static void main(String[] args) { add_subject("dba", 12, 4); }
/** * 新增科目 * @return 0 新增失败 其他新增成功 */ public static int add_subject(String subjectname,int hour,int gradeid) { int num=0; PreparedStatement ps=null; //每次在java中编写sql 请先在navicate中将 sql语句写好 运行无问题再copy //1.编写sql //参数用?代替 不管什么类型 ?都不需要加 '' String sql="insert into `subject` values(NULL,?,?,?)"; //获取执行对象 try { ps= connection.prepareStatement(sql); //给参数赋值 //parameterIndex参数索引 jdbc操作的时候 索引都是从1开始 ps.setObject(1, subjectname); ps.setObject(2, hour); ps.setObject(3, gradeid);
//执行新增操作 //execute执行 Query查询 executeQuery()--》执行查询操作 executeUpdate()-->执行更新操作(增删改) num= ps.executeUpdate();
} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //先创建后关闭 后创建先关闭 try { ps.close(); //连接对象 //connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
return num; } |
- 删除操作(根据主键删除)
public static void main(String[] args) { // add_subject("dba", 12, 4); deletebyid("16"); } /** * 删除 * @param id 科目id * @return 0删除失败 其他删除成功 */ public static int deletebyid(String id) { int num=0;
//sql语句 String sql="delete from `subject` where SubjectId=?"; //执行对象是根据sql语句来的 所以每次需要重新获取执行对象 PreparedStatement ps=null; try { ps= connection.prepareStatement(sql); //给sql的参数赋值 ps.setObject(1, id); //执行删除操作 num= ps.executeUpdate(); if (num>0) { System.out.println("删除成功"); }else { System.out.println("系统正忙........"); }
} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
return num;
} |
- 修改(在后续修改的操作一般都是通过主键来完成)
public static void main(String[] args) { // add_subject("dba", 12, 4); //deletebyid("16"); update_subject("啊啊啊啊", 15, 44, 2);
}
public static int update_subject(String subjectname, int subjectid, int hour, int gradeid) { int num = 0; String sql = "update `subject` set SubjectName=?,ClassHour=?, GradeId=? where SubjectId=?"; // 执 PreparedStatement ps = null;
try { ps = connection.prepareStatement(sql); // 给sql的参数赋值 参数 1,2代表的是sql中第几个?号 ps.setObject(1, subjectname); ps.setObject(2, hour); ps.setObject(3, gradeid); ps.setObject(4, subjectid); num = ps.executeUpdate(); if (num > 0) { System.out.println("修改成功"); } else { System.out.println("未知错误...."); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
return num; } |
- 查询
查询全部科目信息
思路分析:
查询操作与增删改不一样 返回的不是受影响的行数,而是一行或多行记录
如果我需要将数据库中数据查询出现显示在页面该怎么传递呢?
所以引用javabean(数据库的每一张表创建一个类与其对应,表名与类名相同,属性名与列名相同)
//如果要求展示的数据是来源于数据库多张表 按照上面的规则就实现不了
这种情况—》创建一个辅助实体类 在原来类的基础之上再添加需要的属性
方法2:直接在该类中再添加一个属性与查询的列对对应
好处在于:一行记录对应该类的一个对象
多行记录对应该类的一个集合
实体类一般会创建一个包 名字为 com.xx.pojo
public class Subject {
private int subjectid; private String subjectname; private int classhour; private int gradeid;
public int getSubjectid() { return subjectid; }
public void setSubjectid(int subjectid) { this.subjectid = subjectid; }
public String getSubjectname() { return subjectname; }
public void setSubjectname(String subjectname) { this.subjectname = subjectname; }
public int getClasshour() { return classhour; }
public void setClasshour(int classhour) { this.classhour = classhour; }
public int getGradeid() { return gradeid; }
public void setGradeid(int gradeid) { this.gradeid = gradeid; }
@Override public String toString() { return "Subject [subjectid=" + subjectid + ", subjectname=" + subjectname + ", classhour=" + classhour + ", gradeid=" + gradeid + "]"; }
} |
public static void main(String[] args) { // add_subject("dba", 12, 4); //deletebyid("16"); //update_subject("啊啊啊啊", 15, 44, 2); List<Subject> subjects=querySubjectAll(); System.out.println("科目id\t科目名称\t课时\t年级id"); for (Subject subject : subjects) { System.out.println(subject); }
}
/** * 查询全部科目 * @return */ public static List<Subject> querySubjectAll() { List<Subject> subjects=new ArrayList<Subject>(); String sql="SELECT * from `subject` "; PreparedStatement ps=null; ResultSet rSet=null;//用来接收查询数据的结果集
try { ps=connection.prepareStatement(sql); rSet=ps.executeQuery(); //next() 判断下一行是否有数据 有true 无 false while (rSet.next()) { //创建Subject对象 用来接收每一行数据 Subject subject=new Subject();//别写在循环外面了..... int id=rSet.getInt(1);//填写列的索引 subject.setSubjectid(id); subject.setSubjectname(rSet.getString("subjectname"));//填写获取数据的列名 subject.setClasshour(rSet.getInt(3)); subject.setGradeid(rSet.getInt(4)); //将该行对应的对象添加到集合 subjects.add(subject); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
return subjects; } |