Java -- JDBC学习笔记1、连接数据库添加数据
1、JDBC是什么?
Java语言连接数据库,是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。
2、JDBC的本质是什么?
JDBC是SUN公司制定的一套接口(interface),也就是说SUN公司只负责定义,而不负责实现。作为开发人员是面向接口而编程。只需调用SUN公司提供的接口即可,而无需关心接口具体实现。java.sql.* (这个软件包下有许多的接口)
3、为什么要面向接口编程?
- 接口都有调用者和实现者,作为开发人员需要调用相应的接口,而如何实现则无需关心
- 为什么要面向接口编程?解耦合:降低程序的耦合度,提高程序的扩展力。多态就是典型的:面向抽象编程,不面向具体编程。
- 比如一个方法里的参数类型是接口类型,这样只需传入接口实现类即可,如果在方法参数写成类类型,那么就只能传入对应的类,不利于维护和修改。
4、为什么SUN制定一套JDBC接口?
- 为Java软件工程师修一座桥连接不同的数据库
- 上边已经说了,Java软件工程师只需调用SUN公司提供的接口即可,而接口的具体实现类正是由各大数据库厂商负责,因为每种数据库的实现原理不一样,Oracle数据库有自己的原理。MySQL数据库也有自己的原理。SqlServer数据库也有自己的原理。
- 如果没有SUN公司提供的接口,我们就要学习各大数据库厂商的实现类代码,非常复杂和麻烦,每个数据库厂商的实现都不一样,而有了SUN公司提供的接口后就简单了,当SUN公司将接口定义好后,各大数据库厂商纷纷相应,分别对接口进行实现,而我们只需将他们写的接口实现类下载下来,引入到项目当中,然后调用SUN公司提供的接口即可。
5、JDBC开发前的准备工作——下载jar驱动包
- jar包里边的内容就是各大数据库厂商对接口的具体实现类,我这里下载的是SQL server的驱动jar包。
- 开发工具使用的是IDEA。
- 数据库使用的是SQL server2012。
5.1、打开IDEA,新建一个Java Web项目
- 在Java Web项目中的WEB-INF文件下新建一个lib文件夹,不要在根目录下或者其它文件夹建。
- 将下载好的驱动jar复制到lib文件夹中。
- 右键lib文件,选择Add as Library。
5.2、JDBC中主要的接口和类如下:
6、JDBC的具体开发步骤
6.1、注册驱动
告诉Java程序,即将要连接的是哪个”品牌“的数据库,SQL server的注册方式:
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
- MySQL的加载驱动方式:Class.forName("com.mysql.jdbc.Driver")
- 将lib文件夹里的SQLserver的jar包换成对应的MySQL驱动的jar包即可
6.2、连接数据库
表示JVM进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,用完之后一定要关闭通道,代码如下:
Connection conn = null;
String url = "jdbc:sqlserver://localhost:1433;databaseName=StudentManage";
try
{
conn = DriverManager.getConnection(url,"sa","sql2012");
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
- url:数据库连接字符串,就是告诉Java数据库在哪,连接那个库
- sa:数据库登录名
- sql2012:数据库登录密码
- MYSQL对应的连接字符串:url=jdbc:mysql://localhost:3306/MyfirstDb?characterEncoding=utf-8&useSSL=false
6.3、获取发送SQL的对象
通过Connection对象获取Statement对象,专门执行sql语句的对象.
Statement statement = null;
try
{
statement = conn.createStatement();
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
6.4、执行SQL语句、处理结果
String addSql = "INSERT INTO Students(Name,LoginName,LoingPwd) values('小明','xm','123')";
try
{
int resultCount = statement.executeUpdate(addSql);
if (resultCount == 1)
{
System.out.println("add data success.....");
}
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
6.5、释放资源
try
{
statement.close();
conn.close();
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
遵循先开后关原则,释放所有使用到的资源对象。