@wangyupu
2020-07-20T11:25:07.000000Z
字数 5513
阅读 19
JDBC
加载驱动Class.forName("com.mysql.jdbc.Driver");
使用DriverManager获取数据库connection连接
创建Statement对象 用于执行SQL语句
执行SQL语句
释放资源
com.microsoft.jdbc.sqlserver.SQLServerDriver(SQL Server)
com.mysql.jdbc.Driver(MySql)
oracle.jdbc.driver.OracleDriver(Oracle)
##ResultSet executeQuery(sql)
#执行sql查询语句,并返回ResultSet对象
执行insert,update,delete语句,返回受影响行数
执行insert,update,delete语句,返回true或false false成功
放入url连接路径之后
?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
PreparedStatement对象使用
防止SQL注入,使用占位符“?”方式进行SQL拼接
#导入包 因为每个mysql-connector-java-5.1.0- 每个项目如果单独整的话都需要自己手动导包
Connection conn = null;//必须这样写就行了
Statement stat = null;//必须这样写就行了
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//准备数据库连接路径
String url = "jdbc:mysql://127.0.0.1:3306/xxshop";
//用户名与密码
String username = "root";
String userpwd = "root";
//根据路径,用户名,密码 使用DriverManager获取数据库connection连接
conn = DriverManager.getConnection(
url,username,userpwd);
//准备要执行的SQL语句
String sql= "select user_id,user_name from sf_user";
//创建Statement对象 用于执行SQL语句
stat = conn.createStatement();
//执行SQL语句
ResultSet rs = stat.executeQuery(sql);//查询用这个。增删改用Update
//处理ResultSet结果集
//rs.next() 返回boolean 值
while(rs.next()){
Long user_id = rs.getLong(1);
String user_name = rs.getString(2);
System.out.println("用户ID:"+user_id);
System.out.println("用户名:"+user_name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
try {
stat.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
使用PreparedStatement对象进行用户登录
/**
* 定义登录方法(传入用户输入的用户名与密码)
*/
public User loginUser(String user_name,String user_pwd){
Connection conn = null;
PreparedStatement ps = null;
try {
//加载驱动 方言
Class.forName("com.mysql.jdbc.Driver");
//准备数据库连接路径
String url = "jdbc:mysql://127.0.0.1:3306/xxshop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";
//用户名与密码
String username = "root";
String userpwd = "root";
//获取Connection对象
conn = DriverManager.getConnection(
url,username,userpwd);
//准备登录SQL语句 使用占位符?代表参数
String sql ="select user_id,user_name from sf_user where user_name=? and user_password=?";
//预编译SQL语句
ps = conn.prepareStatement(sql);
//ps.setXXXX(位置<从1开始>,值<参数>)
ps.setString(1,user_name);
ps.setString(2,user_pwd);
//执行查询
ResultSet rs = ps.executeQuery();
//用于判断 等于null登录失败,否则成功
User user = null;
while(rs.next()){
//进入循环,登录成功,创建user对象
user = new User();
//使用rs.getXXX("返回的列名") 放入user对象
user.setUser_id(rs.getLong("user_id"));
user.setUser_name(rs.getString("user_name"));
}
return user;//返回用户登录对象
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放资源
try {
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
List<Goods> goodsList = new ArrayList<Goods>();
while(rs.next()){
Goods goods = new Goods();
goods.setGoods_id(rs.getLong("goods_id"));
goods.setGoods_title(rs.getString("goods_title"));
goods.setGoods_introduce(rs.getString("goods_introduce"));
goodsList.add(goods);
}
return goodsList;
String sql = "update sf_goods set goods_title=?," +
"goods_browse=?,goods_state=? where goods_id=?";
ps = conn.prepareStatement(sql);
ps.setString(1,goods.getGoods_title());
ps.setInt(2,goods.getGoods_browse());
ps.setInt(3,goods.getGoods_state());
ps.setLong(4,goods.getGoods_id());
int i = ps.executeUpdate();
return i;
Data Access Object(数据存取对象) 持久层
创建包
com.dao ----放接口文件 UserDao
BaseDao(数据库工具类)
com.dao.impl----放接口实现类 UserDaoImpl
com.entity ----放实体类 User
/**
* 数据库工具类
*/
public class BaseDao {
Connection conn = null;
PreparedStatement ps = null;
//获取Conn对象 打开数据库链接
public boolean getConn() {
boolean bool = false;//默认 false 未打开数据库
try {
//加载驱动 方言
Class.forName("com.mysql.jdbc.Driver");
//准备数据库连接路径
String url = "jdbc:mysql://127.0.0.1:3306/xxshop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";
//用户名与密码
String username = "root";
String userpwd = "root";
//根据路径,用户名,密码 使用DriverManager获取数据库connection连接
conn = DriverManager.getConnection(
url,username,userpwd);
bool = true;//已经打开
} catch (Exception e) {
e.printStackTrace();
bool = false ;//已经打开
}
return bool;
}
/**
* 添加,修改,删除数据
* @param sql
* @param objs
* @return
*/
public int executeUpdate(String sql,Object objs[])
{
int res = 0;//初始化执行结果 失败0
try {
if(getConn())//打开数据库链接
{
ps = conn.prepareStatement(sql);
if(objs!=null){
for (int i = 0; i < objs.length; i++) {
ps.setObject((i+1),objs[i]);
}
}
res = ps.executeUpdate();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeResource();//关闭数据源
}
return res;
}
/**
* 查询
* @param sql
* @param objs
* @return
*/
public ResultSet executeSQL(String sql,Object objs[]){
ResultSet rs = null;
try {
if(getConn())//打开数据库链接
{
ps = conn.prepareStatement(sql);
//判断是否有参数
if (objs != null) {
//循环封装参数
for (int i = 0; i < objs.length; i++) {
ps.setObject((i + 1), objs[i]);
}
}
rs = ps.executeQuery();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeResource();//释放资源
}
return rs;
}
//关闭资源
public void closeResource(){
try {
if(ps!=null)
{
ps.close();
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
实现类 继承 工具类(BaseDao)
查询:ResultSet rs = this.executeSQL(SQL语句,Object数组<参数数组>)
增,删,改: int i = this.executeUpdate(SQL语句,Object数组<参数数组>)
使用配置文件存储连接信息(properties文件)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/xxshop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.pwd=root
Properties properties = new Properties();
//读取properties文件 BaseDao为当前所在类
InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("jdbc.properties");
//将文件信息转换成properties对象
properties.load(is);
//通过getProperty(KEY)方法获取属性值
String driver = properties.getProperty("jdbc.driver");
ResourceBundle Bundle = ReSourceBundle.getBundle(`配置文件名称`);
String driver = bundle.getstring("driver");
String url = bundle.getstring("url");
String user = bundle.getstring("user");
String password = bundle.getstring("password");