Jdbc的步骤
1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar 1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键-->Add As Library 添加为库
1.Class.forName("com.mysql.jdbc.Driver"); 注册驱动 会运行Driver 的静态代码块
加载驱动的字节码文件到内存,真正的注册在 Driver的 静态代码块中
2.Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root"); 获取数据库连接对象
返回一个连接对象 , 当是本地连接时 可以省略 jdbc:mysql:///db3
3.String sql = "update account set balance = 500 where id = 1"; .定义sql语句
4. Statement stmt = conn.createStatement(); 获取执行sql的对象 Statement
5. int count = stmt.executeUpdate(sql); 执行sql
1.executeUpdate执行 DML(insert、update、delete)语句、DDL(create,alter、drop)语句 返回值为受影响的行数
2.executeQuery(String sql) : 执行DQL(select)语句 返回的是一个结果集对象
3.execute可以执行所有语句
6.System.out.println(count); 可以判断
7. stmt.close(); conn.close(); 释放资源
select DLL语句
1. ResultSet resultSet = statement.executeQuery(sql); 返回值是一个结果集, 开始光标指数据的上一行
2. boolean bool = resultSet.next() 判断下一行是否有数据
3. getXxx() 方法重载 填int 代表表的 列数 从1开始 填字符串 代表字段 名称
int id = resultSet.getInt(1); String name = resultSet.getString("name");
int age = resultSet.getInt("age"); String local = resultSet.getString("local");
double salary = resultSet.getDouble("salary"); Date date = resultSet.getDate(6);
封装JDBC工具类
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
static {
Properties properties = new Properties();
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
try {
properties.load(resourceAsStream);
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
driver = properties.getProperty("driver");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();}}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
关闭连接 关闭执行sql对象
public static void close(Statement sta, Connection conn){
if (sta!=null){
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();}}}
重载可关闭 结果集
public static void close(ResultSet set ,Statement sta, Connection conn){
if (set!=null){
try {
set.close();
} catch (SQLException e) {
e.printStackTrace();}}
if (sta!=null){
try {
sta.close();
} catch (SQLException e) {
e.printStackTrace();}}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();}}}}
PreparedStatement:执行sql的对象
1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
2.使用 PreparedStatement预编译sql 语句 解决安全问题 参数使用?作为占位符
conn = JDBCUtils.getConnection();
String sql = "select * from user where username= ? and password= ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user);
pstmt.setString(2, password);
res = pstmt.executeQuery();
return res.next();
事务
try {conn = JDBCUtils.getConnection(); 在获取连接后手动开启事务,如果报错回退到这
conn.setAutoCommit(false); 开启事务
......
conn.commit();} 没有错提交
catch (Exception e) {
try {
if(conn != null) {
conn.rollback(); 如果有错回滚
}
} catch (SQLException e1) {
e1.printStackTrace();}
e.printStackTrace();
}finally {
JDBCUtils.close(pstmt1,conn);
JDBCUtils.close(pstmt2,null); }