JDBC
Java数据库连接(Java Database Connectivity,简称JDBC)是Sun公司定义的一套操作所有关系型数据库的规则(接口)。数据库产商实现这套接口并且提供数据库驱动Jar包,我们就可以使用这套接口来操作数据库。
DriverManager:驱动管理对象
static synchronized void registerDriver(java.sql.Driver driver) 注册驱动,告知程序该使用哪一个数据库驱动Jar包
static Connection getConnection(String url, String name, String password) 参数url指的是数据库连接的路径;user指的是数据库用户名;password指的是密码
Connection:数据库连接对象
Statement createStatement() 获取执行SQL的对象,在拼接SQL时会造成SQL注入的问题
PreparedStatement prepareStatement(String sql) 获取执行SQL的对象,使用预编译的SQL,参数使用?作为占位符可以有效的防止SQL注入的问题
void setAutoCommit(boolean autoCommit) 参数设置为false即开启事务(一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败)
void commit() 当所有SQL都执行完提交事务
void rollback() 在catch中回滚事务
Statement:执行SQL的对象
boolean execute(String sql) 可以执行任意SQL,不推荐使用
int executeUpdate(String sql) 用于执行insert、update、delete、create、alter、drop等语句,返回值为影响的行数,返回值>0则执行成功,反之则失败
ResultSet executeQuery(String sql) 用于执行select语句
PreparedStatement:执行SQL的对象
void setXxx(int parameterIndex, xxx x) 给?赋值,参数parameterIndex指的是?从1开始的位置编号;x指的是?的值
ResultSet:结果集对象
boolean next() 游标向下移动一行并判断当前行是否为末尾行,是则返回false,反之返回true
xxx getXxx(String columnLabel) 用于获取数据,Xxx指的是数据类型;xxx指的是列从1开始的编号;参数columnLabel指的是列名
CREATE DATABASE db000;
USE db000;
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(11) NOT NULL,
money INT
);
INSERT INTO account VALUES
(NULL, 'chongyi', 100),
(NULL, 'lianger', 200),
(NULL, 'zhansan', 300);
import java.sql.*;
public class Demo {
public static void main(String[] args) throws Exception {
Connection conn = null;
PreparedStatement prep = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db000", "root", "root");
conn.setAutoCommit(false);
prep = conn.prepareStatement("update account set money = 300 where id = ?");
prep.setInt(1, 4);
if (prep.executeUpdate() <= 0) {
System.out.println("SQL执行失败!");
}
int i = 1 / 0;
prep = conn.prepareStatement("select * from account");
rs = prep.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString("name") + " " + rs.getInt("money"));
}
conn.commit();
} catch (Exception e) {
if (conn != null) {
conn.rollback();
}
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (prep != null) {
prep.close();
}
if (conn != null) {
conn.close();
}
}
}
}
------------------------------
SQL执行失败!
JDBCUtils
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///db000
user=root
password=root
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String driver;
private static String url;
private static String user;
private static String password;
static {
try {
Properties prop = new Properties();
prop.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws Exception {
return DriverManager.getConnection(url, user, password);
}
public static void close(Connection conn, PreparedStatement prep, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (prep != null) {
try {
prep.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
|