一.什么是JDBC?
java中连接数据库的一种技术
是java各种应用程序和数据库之间的桥梁
由一组使用java语言编写的类和接口组成
二、JDBC中常用的API?
DriverManager类:管理不同数据库的jdbc驱动
Connection接口:负责连接数据库并担任传递数据的任务
Statement接口:由Connection产生,负责执行sql语句
PreparedStatement是Statement的子接口
除了具备父接口Statement的能力外,还具有4高(安全性、性能、可读性、可维护性)功能
ResultSet接口:负责保存和处理Statement返回的查询结果
三、使用JDBC如何连接sqlserver数据库?
1、加载驱动
编码前的准备工作
1.将sqljdbc2008.jar文件复制粘贴到项目的文件夹中
2.将项目和jdbc驱动关联编码,加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //处理异常try…catch
2、编写数据库连接字符串、设置登录名、密码
2.1 final String url=”jdbc:sqlserver://localhost:1433;databasename=存在的数据库名”;
2.2 final String name = ”sqlserver身份验证的登录名”;
2.3 final String pwd = ”登录名对应的密码”;
3、使用DriverManger类的getConnection()方法,
关联url、name、pwd,返回一个Connection接口
Connection conn=DriverManger. getConnection(url ,name , pwd);
四、使用Statement接口对表的数据执行[增、删、改]操作
1、加载驱动连接数据库
2、 在try…catch外面,声明Statement变量并赋初值null
(或用PreparedStatement代替Statement)
Connection con=null;
Statement stm=null;
PreparedStatement pst=null;
3、 定义变量,保存sql语句(insert、delete、update语句)
使用PreparedStatement接口,sql语句中values()中的值,使用?
4、 DriverManager.getConnection()的下一行编写代码
Statement变量=Connection变量.createStatement();
PreparedStatement变量= Connection变量. prepareStatement(sql);
5、调用Statement变量的executeUpdate(sql)执行sql语句
int rows=executeUpdate(sql); //返回受影响的行数
为sql语句中的?赋值
PreparedStatement变量.set数据类型(数字,值);
调用PreparedStatement变量的executeUpdate()执行sql语句
int rows=executeUpdate();//返回受影响的行数
6、根据受影响的行数,判断sql语句执行是否成功---if(rows>0)
7、释放相关的资源
finally{
try{
if(Statement变量或PreparedStatement变量!=null)
Statement变量(或PreparedStatement变量).close();
if(Connection变量!=null)
Connection变量.close ();
} catch (SQLException e){
e.printStackTrace ();
}
}
五、使用JDBC查询表中的数据(ResultSet接口)
1、 加载sql2008 jdbc驱动包
(自动添加try…catch,手动添加finally语句块用于释放资源)
2、 在try…catch…finally语句块的外面,
a.声明3个接口(Connection、Statement或PreparedStatement、ResultSet的变量且赋值null)
b.在finally块中,调用这3个接口的close()释放资源
(有顺序:1.rs.close() 2.pstm.close() 3.con.close() )
3、 编写数据库连接字符串url
(jdbc:sqlserver://localhost:1433;databasename=存在的数据库名)
4、 使用DriverManager.getConnection(url,”登录名”,”登录密码”);
获取Connection接口的对象
5、 编写sql查询语句,保存到字符串的变量中
6、 获取发送并执行sql查询语句的接口对象
a) 父接口Statement对象
Connection接口变量.createStatement ();
b)子接口PreparedStatement对象
Connection接口变量. prepareStatement (sql);
7、 调用Statement或PreparedStatement接口的方法,执行sql查询语句,返回ResultSet
a) 父接口Statement对象
ResultSet变量=Statement接口变量.executeQuery(sql);
b) 子接口PreparedStatement对象
ResultSet变量=Statement接口变量.executeQuery();
8、 使用while循环,调用ResultSet接口变量的get数据类型(数字或列名)方法,来获取表中列的值
while(ResultSet接口变量.next()){
ResultSet接口变量.get数据类型(数字或列名);
get数据类型(数字); //数字从1开始
get数据类型(“列名”);
}
// 增、删、改操作
public int getExecute(String sql, ArrayList<?> list) {
con = getDB();// 调用打开数据库的连接的方法
int rows =0;
try {
pst = con.prepareStatement(sql);
//list集合为null,说明sql语句中没有?
if (list != null) {
for (int i = 0; i < list.size(); i++) {
pst.setObject(i + 1, list.get(i));
}
rows=pst.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
return rows;
}
// 查
public ResultSet getExecuteQuery(String sql ,ArrayList<?> list) {
con = getDB();// 调用打开数据库的连接的方法
try {
pst = con.prepareStatement(sql);
//list集合为null,说明sql语句中没有?
if (list != null) {
for (int i = 0; i <list.size(); i++) {
pst.setObject(i + 1, list.get(i));
}
}
rs = pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}