JDBC1
1.JDBC是什么?
JDBC(java database connectivity)Java数据库连接。是Java语言中用来规范客户端程序如何来访问数据库[关系型数据库]的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
我们通常说的JDBC是面向关系型数据库的。
2.JDBC访问数据库需要用到的类、接口、方法?
2.1 java.sql包DriverManager类--负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接。 驱动程序,会将自身加载到DriverManager中去。
2.1.1数据驱动程序(Driver)--- 根据所连接的数据库不同需要下载对应数据库的驱动程序。
例如:MySQL数据库----https://downloads.mysql.com/archives/c-j/
mysql-connector-java-5.1.38-bin.jar
通过java的反射机制,来给DriverManager,提供被加载的数据库驱动名称。
Class.forName(“数据库驱动名称【包名+类名】”);
数据库驱动名称来自mysql-connector-java-5.1.38-bin.jar中Driver的java类的全名称。
Class.forName(“com.mysql.jdbc.Deiver”);
2.1.2向调用者返回相应的数据库连接
DriverManager类中的静态方法getConnection(url,username,password)向调用者返回相应的数据库连接
static Connection getConnection(url,username,password)
参数url---指定被连接的数据库位置
【jdbc:mysql://数据库服务器IP:端口/数据库名称】
参数username---登陆数据库服务器的用户名
参数password----登陆数据库服务器的密码
2.2 java.sql包Connection接口---数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
1.产生用以执行SQL的Statement。
[用以执行SQL查询和更新(针对静态SQL语句和单次执行)]
Statement createStatement()
select * from t_user where uid=12;[拼接字符串]
2.产生用以执行SQL的PreparedStatement。
[用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)]
PreparedStatement prepartatement(Sql)
参数sql---包含动态参数的SQL语句
select * from t_user where uid=?;【需要给sql动态传递参数值】
?---占位符
2.3 java.sql包Statement接口---用以执行SQL查询和更新(针对静态SQL语句和单次执行)
以执行SQL更新【insert / update /delete】
int executeUpdate(SQL)
参数SQL---[insert / update /delete]字符串类型的sql语句。
以执行SQL查询【select】
ResultSet executeQuery(SQL)
参数SQL---[select]字符串类型的sql语句。
2.4 java.sql包PreparedStatement接口--用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)
以执行SQL更新【insert / update /delete】
int executeUpdate()
以执行SQL查询【select】
ResultSet executeQuery()
注意:PreparedStatement需要执行的sql语句
1.sql语句是在创建PreparedStatement对象的时候传入执行,不是在调用executeUpdate()/executeQuery()的时候传入。
2.PreparedStatement对象所执行的sql语句中有“?【占位符】”
有一组填补sql语句占位符的方法
setInt(参数1,参数2) int--int
setLong(参数1,参数2) long---bigint
setDouble(参数1,参数2) double--double
setString(参数1,参数2) String--varchar/char
.....................
参数1---SQL语句中“?”的位置【从1开始】
参数2---SQL语句中“?”具体数据值
2.5.java.sql包ResultSet接口 --- 数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。
boolean next()--将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false。在 while 循环中使用它来迭代结果集。
由于通过next方法将指针移动到下一行,我们现在就可以取出指针指向的当前行的数据值。要获取当前行中保存的数据值,就需要一列一列的取出数据值,所以ResultSet会有一组获取指定列数据的方法。
getXXXX(int colindex)---int colindex[当前需要获取数据值的列在当前行中的位置【从1开始】]
getXXXX(String colname)--String colname[当前需要获取数据值的列名称]
1 [int]--[id] | Zhangsan [varchar]--[name] | 23 [int]--[age] |
2[int]--[id] | Lisi [varchar]--[name] | 24 [int]--[age] |
3[int]--[id] | Wangwu [varchar]--[name] | 25 [int]--[age] |
通过ResultSet对象得到第一行数据值
int id=ResultSet对象.getInt(1);
int id=ResultSet对象.getInt(“id”);
//id==1
String name=ResultSet对象.getString(2);
String name=ResultSet对象.getString(“name”);
//name==zhangsan
int age=ResultSet对象.getInt(3);
int age=ResultSet对象.getInt(“age”);
//age==23
3.JDBC访问数据库的流程
测试基于Statement接口的数据库访问
1、创建数据库表
create table t_user(
t_id int primary key auto_increment,
t_name char(20),
t_age int,
t_address char(20)
);
2、创建java项目,导入数据库启动包
3、创建保存用户信息的java类
package com.wangxing.jdbcdemo1.bean;
/**
* 保存用户信息的java类
* @author Administrator
*
*/
public class UserBean {
private int id;
private String name;
private int age;
private String address;
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getname(){
return name;
}
public void setname(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getAddress(){
return address;
}
public void setAddress(String address){
this.address=address;
}
}
4、创建数据库驱动管理类
package com.wangxing.jdbcdemo1.bean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 数据库驱动管理类---加载数据库驱动,得到数据库连接
* @author Administrator
*
*/
public class DBConnection {
//定义数据库表驱动名称
private static final String DRIVERNAME="com.mysql.jdbc.Driver";
//定义数据库的url
//jdbc:mysql://数据库服务器IP:端口/数据库名称
private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc";
//定义数据库的登录名
private static final String USERNAME="root";
//定义数据库的登录密码
private static final String PASSWORD="200120";
//加载数据库驱动[静代码块]
static{
try{
Class.forName(DRIVERNAME);
}catch(Exception e){
System.out.println("数据库驱动加载失败");
e.printStackTrace();
}
}
/**
* 得到数据库连接对象
*/
public static Connection getMyConnection(){
Connection connection=null;
try {
connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
System.out.println("数据库连接获取失败");
e.printStackTrace();
}
return connection;
}
}
5.创建数据库用户表信息的访问类
package com.wangxing.jdbcdemo1.bean;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
* 用户数据表的访问对象
* @author Administrator
*
*/
public class UserDaoObject {
//添加用户信息
public void insertUser(UserBean userBean){
Connection conn=null;
Statement statement=null;
try {
//得到数据库连接
conn=DBConnection.getMyConnection();
//创建添加数据的sql语句
String insert="insert into t_user values(null,'"+userBean.getname()+"',"+userBean.getAge()+",'"+userBean.getAddress()+"');";
System.out.println(insert);
//创建Statement对象
statement=conn.createStatement();
//执行添加sql
int temp=statement.executeUpdate(insert);
if(temp>0){
System.out.println("添加信息成功");
}
} catch (SQLException e) {
System.out.println("添加信息失败");
e.printStackTrace();
}finally{
if(statement!=null && conn!=null){
try {
statement.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
//根据用户id修改用户信息
public void updataUser(UserBean userBean){
Connection conn=null;
Statement statement=null;
try {
//得到数据库连接
conn=DBConnection.getMyConnection();
//创建修改数据的sql语句
String updat="update t_user set t_name='" + userBean.getname() + "',t_age=" + userBean.getAge()
+ ",t_address='" + userBean.getAddress() + "' where t_id=" + userBean.getId() + ";";
System.out.println(updat);
//创建Statement对象
statement=conn.createStatement();
//执行修改sql
int temp= statement.executeUpdate(updat);
System.out.println(temp);
if(temp>0){
System.out.println("修改信息成功");
}
} catch (SQLException e) {
System.out.println("修改信息失败");
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(statement!=null && conn!=null){
try{
statement.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
//根据id查询用户信息
public UserBean selectUserById(int userid){
UserBean userbean=null;
Connection conn=null;
Statement statement=null;
ResultSet resultset=null;
//得到数据库连接
conn=DBConnection.getMyConnection();
//创建根据用户id查询用户信息的sql语句
String select="select * from t_user where t_id="+userid+";";
System.out.println(select);
try {
//创建Statement对象
statement=conn.createStatement();
//执行查询sql语句
resultset=statement.executeQuery(select);
if(resultset.next()){
int id=resultset.getInt("t_id");
String name=resultset.getString("t_name");
int age=resultset.getInt("t_age");
String address=resultset.getString("t_address");
userbean=new UserBean();
userbean.setId(id);
userbean.setname(name);
userbean.setAge(age);
userbean.setAddress(address);
}
} catch (SQLException e) {
System.out.println("查询信息失败");
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(resultset!=null && statement!=null && conn !=null){
try{
resultset.close();
statement.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
return userbean;
}
//查询所有用户信息
public List<UserBean> selectUser(){
List<UserBean> list=new ArrayList<UserBean>();
Connection conn=null;
Statement statement=null;
ResultSet resultset=null;
//得到数据库连接
conn=DBConnection.getMyConnection();
//创建查询所有用户信息的sql语句
String select="select * from t_user;";
try {
//得到Statement对象
statement=conn.createStatement();
//执行查询sql语句
resultset=statement.executeQuery(select);
while(resultset.next()){
int id=resultset.getInt("t_id");
String name =resultset.getString("t_name");
int age=resultset.getInt("t_age");
String address=resultset.getString("t_address");
UserBean userbean=new UserBean();
userbean.setId(id);
userbean.setname(name);
userbean.setAge(age);
userbean.setAddress(address);
list.add(userbean);
}
} catch (SQLException e) {
System.out.println("查询信息失败");
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(resultset!=null && statement!=null && conn!=null){
try{
resultset.close();
conn.close();
statement.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
return list;
}
//根据id删除信息
public void deleteUserById(int userid){
Connection conn=null;
Statement statement=null;
//获取数据库连接
conn=DBConnection.getMyConnection();
//创建根据id删除信息的sql语句
String delete="delete from t_user where t_id="+userid+";";
System.out.println(delete);
try {
//获取Statement对象
statement=conn.createStatement();
//执行删除sql语句
int temp=statement.executeUpdate(delete);
if(temp>0){
System.out.println("删除信息成功");
}
} catch (SQLException e) {
System.out.println("删除信息失败");
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(statement!=null && conn!=null){
try{
statement.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
测试
package com.wangxing.jdbcdemo1.bean;
import java.util.ArrayList;
import java.util.List;
public class TestMain {
public static void main(String args[]){
//测试添加数据
// UserBean userbean=new UserBean();
// userbean.setname("zhangsan");
// userbean.setAge(23);
// userbean.setAddress("西安");
// UserDaoObject userDao=new UserDaoObject();
// userDao.insertUser(userbean);
//测试修改数据
// UserBean userbean=new UserBean();
// userbean.setId(1);
// userbean.setname("wangwu");
// userbean.setAge(55);
// userbean.setAddress("上海");
// UserDaoObject userDao=new UserDaoObject();
// userDao.updataUser(userbean);
//测试根据id查询用户信息
// UserDaoObject userDao=new UserDaoObject();
// UserBean user=userDao.selectUserById(2);
// if(user!=null){
// System.out.println(user.getId()+"\t"+user.getname()+"\t"+user.getAge()+"\t"+user.getAddress());
// }
//测试查询所有用户信息
// UserDaoObject userDao=new UserDaoObject();
// List<UserBean> list=new ArrayList<UserBean>();
// list=userDao.selectUser();
// if(list.size()>0){
// for(UserBean user:list){
// System.out.println(user.getId()+"\t"+user.getname()+"\t"+user.getAge()+"\t"+user.getAddress());
// }
// }
//测试根据id删除用户信息
UserDaoObject userDao=new UserDaoObject();
userDao.deleteUserById(1);
}
}