介绍:
JDBC(Java DataBase Connectivity) 称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。 有了JDBC,就不必为访问Mysql数据库专门写一个程序,为访问Oracle又专门写一个程序等等。
JDBC核心接口与类JDBC核心类库包含在java.sql包中。
接口:
Connection:特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。
PreparedStatement:表示预编译的 SQL 语句的对象。
Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
ResultSet :表示数据库结果集的数据表,通常通过执行查询数据库的语句生成 。
CallableStatement :用于执行 SQL 存储过程的接口 。
类:
DriverManager:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并注册后才可以使用,同时提供方法来建立与数据库的连接。
SQLException:有关数据库操作的异常。
加载驱动(只做一次):
1.打出SQLServerDriver,按快捷2.使用Class.forName加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
建立连接(Connection):
String url = "jdbc:sqlserver://localhost:1433;databasename=数据库名称";
//注:SqlServer也可以更换成其他的 (如:MySQL等)
Connection con = DriverManager.getConnection(url, "sa", "sa123");
//注:(url, "sa", "sa123") 这里的是我的SqlServer的连接账号和密码
执行语句(preparedstatement):
PreparedStatement ps = con.prepareStatement("insert into student values(?,?,?)");
//注: ?代表占位符,一个占位符意味着需要一个变量来填充
Scanner mys=new Scanner(System.in);
System.out.println("请输入你的名字");
String name=mys.next();
System.out.println("请输入你的年龄");
int age=mys.nextInt();
//默认生日是当前时间
Date brithday=new Date(System.currentTimeMillis());
int n = ps.executeUpdate();// n就是数据库收到影响的行数
// 怎么判断是否操作成功
System.out.println(n>0?"成功":"失败");
关闭资源:
if(con!=null&&!con.isClosed()) {
con.close();
}
if(ps!=null) {
ps.close();
}
以上的执行语句 增删改查 中有许多代码都是重复的非常的麻烦,下面请看优化版本:
———————————————
首先建立一个包 come.util 在这个包中建立一个帮助类 DBHelper
//使用静态代码块加载驱动
static {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//定义连接语句
private static final String URL="jdbc:sqlserver://localhost:1433;databasename=api_284";
//获得连接
public static Connection getCon() {
try {
return DriverManager.getConnection(URL,"sa","123456");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//关闭资源:连接con,执行对象ps,结果集rs
public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
try {
if (con!=null&&!con.isClosed()) {
con.close();
}
if (ps!=null) {
ps.close();
}
if (rs!=null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
首先建立一个包 come.dao 在这个包中建立一个dao类 以数据库中的表名开头(如:studedao)
//定义方法
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
//增
public int add(Student stu) {
try {
con = DBHelper.getCon();
String sql = "insert into student values(?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, stu.getName());
ps.setInt(2, stu.getAge());
ps.setDate(3, stu.getBirthday());
return ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.close(con,ps,rs);
}
return 0;
}
//删
public int delect(int id) {
try {
con=DBHelper.getCon();
ps=con.prepareStatement("delete from student where id=?");
ps.setInt(1, id);
return ps.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DBHelper.close(con, ps, rs);
}
return 0;
}
//改
public int update(Student stu ) {
try {
con=DBHelper.getCon();
String sql="update student set name=? where id=?";
ps=con.prepareStatement(sql);
ps.setString(1, stu.getName());
ps.setInt(2, stu.getId());
return ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.close(con, ps, rs);
}
return 0;
}
//查
public List<Student> list(){
List<Student> list=new ArrayList<Student>();
try {
con=DBHelper.getCon();
ps=con.prepareStatement("select*from student");
rs=ps.executeQuery();
while (rs.next()) {
Student stu=new Student();
stu.setId(rs.getInt(1));
stu.setName(rs.getString(2));
stu.setAge(rs.getInt(3));
stu.setBirthday(rs.getDate(4));
list.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.close(con, ps, rs);
}
return list;
}