导包
先导入Java与MySQL连接的包我的是(mysql-connector-java-5.0.8.jar),导入后如果是放在lib文件夹下需要build path一下
lib包
在lib文件夹下新建文件jdbc.properties
driverClass=com.mysql.jdbc.Driver //5.0版本与6.0版本的语法不同,切不可混用
url=jdbc:mysql://localhost:3306/library?characterEncoding=UTF-8
username=root
password=?
这一步可以直接写入Util文件内。
Util 包
建立Util包,新建一个JDBC类
public class JDBCUtil {
static final String DRIVERCLASS;
static final String URL;
static final String USERNAME;
static final String PASSWORD;
static {
ResourceBundle bundle = ResourceBundle.getBundle("lib.jdbc");//引入jdbc文件内容:四要素
DRIVERCLASS = bundle.getString("driverClass");
URL = bundle.getString("url");
USERNAME = bundle.getString("username");
PASSWORD = bundle.getString("password");
}
// test 测试引用是否成功
// public static void main(String[] args) {
// System.out.println(DRIVERCLASS + "\n" + URL + "\n" + USERNAME + "\n" + PASSWORD);
// }
static {
try {
Class.forName(DRIVERCLASS);//初始化驱动,捕获类
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
/**
* 释放数据库资源
* @param conn
* @param stm
* @param rs
*/
public static void closeResource(Connection conn, Statement stm, ResultSet rs) {
closeResultSet(rs);
closeStatement(stm);
closeConnection(conn);
}
public static void closeResultSet(ResultSet rs) {
if(rs != null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeStatement(Statement stm) {
if(stm != null) {
try {
stm.close();
stm = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeConnection(Connection conn) {
if(conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
操作数据库
连接成功后对数据库的操作
try {
con = JDBCUtil.getConnection();//连接数据库
String a_name = admin.getName();
String a_psd = admin.getPassword();
String sql = "Select * from admin where a_name= ? And a_psd = ? ";//定义选择语句
ps = con.prepareStatement(sql); //调用prepareStatement方法执行语句
ps.setString(1, a_name); //给占位符赋值
ps.setString(2, a_psd);
rs = ps.executeQuery(); //执行 与excuteUpdate()功能相同但返回值不同
while (rs.next()) {
admin1 = new Admin(a_name, a_psd);
admin1.setId(rs.getInt("a_id"));
admin1.setTel(rs.getInt("a_tel"));
}
处理和显示结果
执行查询语句,并把结果返回给集合 ResultSet
ResultSet rs = ps.executeQuery();
利用While(rs.next){}将结果遍历出来 格式:a.setid(rs.getInt(“a_id”))“a_id”也可以用列号代替
Statement和PreparedStatement
异同及优缺点 同:两者都是用来执SQL语句的
异:PreparedStatement需要根据SQL语句来创建,它能够通过设置参数,指定相应的值,不是像Statement那样使用字符串拼接的方式
PreparedStatement的优点:
1、其使用参数设置,可读性好,不易记错。在statement中使用字符串拼接,可读性和维护性比较差
2、其具有预编译机制,性能比statement更快
3、其能够有效防止SQL注入攻击
execute和executeUpdate
相同点:二者都能够执行增加、删除、修改等操作
不同点: 1、execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句
2、execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付
