当简单学完sql脚本的编写,对数据库有简单的认识之后,就学习JDBC对JAVA和数据库的连接。
首先Java 连接数据库的两种方式有JDBC直连(纯连:需要jar包)和JDBC-ODBC桥连两种方式。
ODBC是微软制定的编程语言连接数据库的语言规范。
JDBC(JAVA Database Connectivity):是SUN公司制定的一套用Java连接数据库执行sql语句的规范标准。
这套标准提供了几个重要的接口Connection,Statement,ResultSet,Diver
而规范实现者提供驱动程序jar包实现这些接口。
那为什么还需要 JDBC? 参考: 因为ODBC 不适合直接在 Java 中使用,因为它使用 C 语言接口。 从Java 调用本地 C代码在安全性、实现、坚固性和程序的自动移植性方面都有许多缺点。 从 ODBC C API 到 Java API 的字面翻译是不可取的。 例如,Java 没有指针,而 ODBC 却对指针用得很广泛(包括很容易出错的指针"void *")。 ———————————————— 版权声明:本文为CSDN博主「追着蜗牛打」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:[](https://blog.csdn.net/u010191243/article/details/46685951)实现JDBC操作—项目部分
首先实现Java对数据库的连接就需要先去对应数据库官网上去下载驱动程序jar包,通常我们将其命名为lib文件放在项目文件中。
但是这时ide(idea)还没有导入这个jar包,所以我们需要在项目中打开library导入jar包。
并导入模块
建立项目,通常我们对一张表进行crud所以我们将一个表的四个操作放到一类中,起名为 表名DAO(Data Access Object)。
DAO是一种设计模式(持久化层设计思想),将所有的DAO放入一个包。
如果要对方法进行测试,创建表名DAOTest 的测试类放入另一个包创建方法调用对象进行测试。
1.加载驱动程序
调用Class.forname("包名 + 类名 ")方法(静态方法的调用方式:类名.方法名)在这里插入代码片
a.调用时这个方法会抛出一个编译时异常,ClassNotFoundException。(用try/catch解决后)
b.调用Driver接口,去包名里面截取.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2.得到连接
创建Connection 对象,调用DrivermanagerDriverManager.getConnection(url,“sa”,“sa”)返回对象
String url = "jdbc:sqlserver://localhost:1433;databaseName=PAS"; Connection con = DriverManager.getConnection(url,"sa","sa");
统一资源定位符:url = “jdbc:db类型://ip:port;databaseName=数据库名称”
localhost1433需要在配置管理器中调配
3.创建statement对象
Statement sta = con.createStatement();
4.执行sql
String sql = "insert into student (stunum, clsid, stuname, stubtd, pwd, static, sex) values (212117111217, 47, '小王', '2001-1-1', 1, 1, 1)"; int rows = sta.executeUpdate(sql);
sta的executeUpdate(sql)方法返回值是一个sql语句影响的行数
可以用来做判断。
if(rows == 1){
System.out.println("operate success");
}else{
System.out.println("operate error");
}
5.关闭资源
在sql执行完毕之后,con和sta对象就没用了,建议垃圾回收车回收,释放资源。
con.close(); con = null; sta.close(); sta = null;
而关闭资源总要执行,所以在最后的finally块中编写。如果放在try块中写使sta = null;在后续程序进行中易报空指针异常。 但是他们在try块里为局部变量,所以这里需要将他们声明为方法的全局变量,创建在try块中,释放在finall块里。 但是如果try中出现异常还没来得及创建,finally块中就会报空指针异常,所以我们在finally块中还需要做一层判断。
finally {
try {
if(con != null){
con.close();
con = null;
}
if(sta != null){
sta.close();
sta = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
6.再在Test里面调用就可以了
注意:这里只能增添数据或者删除数据一次,下次增添或者删除需要在sql换个数据。
public class StudentDAOTest {
public static void main(String[] args) {
StudentDAO stu = new StudentDAO();
stu.save();
// stu.delete();
// stu.update();
}
}
所有代码结构
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class StudentDAO {
public void save(){
Connection con = null;
Statement sta = null;
try {
String url ="jdbc:sqlserver://localhost:1433;databaseName=PAS";
String sql = "insert into student (stunum, clsid, stuname, stubtd, pwd, static, sex) values (212117111217, 47, '小王同志', '2001-1-1', 1, 1, 1)";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(url,"sa","sa");
sta = con.createStatement();
int rows = sta.executeUpdate(sql);
if (rows == 1){
System.out.println("insert success");
}else{
System.out.println("insert errors");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if (con != null){
con.close();
con = null;
}
if (sta != null){
sta.close();
sta = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
import com.lulu.DAO.LessonDAO;
import com.lulu.DAO.StudentDAO;
public class StudentDAOTest {
public static void main(String[] args) {
StudentDAO stu = new StudentDAO();
stu.save();
// stu.delete();
// stu.update();
}
}



