最近学校刚好讲到数据库DDL操作以及JDBC,东西有点多,所以做点笔记,方便以后查阅
注:本文仅为学习笔记,如有遗漏欢迎指正
1.JDBC简介JDBC全称为Java Database Connectivity(Java数据库链接),通过它,我们可以连接不同的数据库,执行各种操作(如insert,delete,update,select等)
2.如何使用JDBC 1,加载驱动程序
首先要将驱动程序jar包导入到项目中,导入方式为:
在对应项目下创建一个lab文件夹,然后将所需要的jar包放入lab文件夹中
像这样
然后在idea中依次点击File➜Project Structure➜Libraries,然后在Libraries中点击“+”号,然后点击Java,在页面中选择你创建的lib文件夹并点击ok,然后点击应用即可,之后便可以在右侧状态栏中看到添加的jar包
如图:
做完这一系列准备工作后,便可以开始驱动程序的加载,在这里我们要用到class类的静态方法
for name(驱动程序类名),这个驱动程序类名实现了java中的java.sql.Driver接口,该静态方法还会抛出一个编译时异常,该异常必须处理,不然无法完成编译,解决方法为添加try catch块,并在catch块中打印一句话,驱动程序没有找到,代码如下
try {
Class.forName("驱动程序包类名");
System.out.println("驱动程序加载完毕");
} catch (ClassNotFoundException e) {
System.out.println("驱动程序添加失败");
e.printStackTrace();
}
我这里连接的是sql server数据库,所以驱动程序包类名应该为 “com.microsoft.sqlserver.jdbc.SQLServerDriver”
上述这些的目的是将驱动程序加载到内存并且去DriverManager注册
2,建立连接connection
该连接connection可以理解为java程序和数据库之间的一条公路,所有通过java程序操作数据库的动作都要经过这条公路才行。我们建立连接,需要知道连接的ip(sql server为1433),数据库的名称,数据库的账号名和该账号名的密码,同时还要调用DriverManager.getConnection();要想往该方法内传参数,还需要定义一个url(字符串类型),该url内便包含了IP以及服务器名称。(url格式为:
"jdbc:数据库软件://localhost:端口号;databaseName=数据库名字";
)getConnection()方法也会报出一个编译时异常SQLException。该异常的处理方法也和之前那个异常的处理方法相同,添加一个try catch块即可,代码如下
try {
String url = "jdbc:sqlserver://localhost:1433;databaseName=pas";
Connection con = DriverManager.getConnection(url,"sa","sa");
} catch (SQLException e) {
e.printStackTrace();
}
注:sa是账号名和密码名,pas是数据库名字不用区分大小写。
如果连不上,需要去sql server配置管理器的SQL Server2005网络配置中的SQLEXPRESS协议中的TCP/IP中修改IP地址中的IPALL中的TCP端口为1433,以及SQL Native Client配置中的客户端协议中的TCP/IP的默认端口为1433,确定并重启数据库
3,创建Statement
关于Statement,可以理解为在公路connection上行驶的货车,运送关于操作数据库的信息
Statement sta = con.createStatement();
4,执行SQL语句
Statement有两个方法
1)excuteUpdate(String insert,update,delete,sql)返回值为int,为sql语句影响的行数
2)ResultSect executeQuery(String selectSql)查询语句
具体使用方法为
String sql = "insert into teacher(teanum, teaName, teatitle, teatypeid, teabtd, pwd, static) values ('20210001', '区区一只亚麻大', '老师', 1, '1982-5-7', 1, 1)";
String sql2 = "delete from teacher where teaNum = '20210001'";
int rows = sta.executeUpdate(sql2/sq1);
if (rows == 1) {
System.out.println("op successful");
}else{
System.out.println("op error");
}
5,关闭资源
关闭资源的顺序刚好和创建的顺序相反,先关闭Statement,然后关闭connection
finally {
try {
if(sta != null) {
sta.close();
sta = null;
}
if (con != null) {
con.close();
con = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("关闭成功");
}
使用finally块的原因是因为关闭操作无论进行之前出了什么错误都要关闭,所以关闭操作是一定要执行的,所以使用finally块,try catch块是因为close()方法同样会抛出一个编译时异常,必须处理,用if是要确定连接和statement是否创建,如果没创建则不需要关闭他们,令sta和con最后等于null是为了让垃圾回收车尽快回收内存。
如果这样写,那么sta和con就写在了之前的try catch块外卖,所以应该将他们俩定义为全局变量,即:
Connection con = null; Statement sta = null;
这就没问题了



