DMl 语句 加事务
public class Test01 {
public static void main(String[] args) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("driver");
String dri = resourceBundle.getString("dri");
String url = resourceBundle.getString("url");
String user = resourceBundle.getString("user");
String password = resourceBundle.getString("password");
Connection conn = null;
PreparedStatement ps = null;
try {
//1.注册驱动
Class.forName(dri);
//2.获取连接
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);//关闭自动提交事务
//3.获取预编译数据库操作对象
String sql = "update t_act set balance = ? where actno = ?";
ps = conn.prepareStatement(sql);
ps.setDouble(1, 1000);
ps.setInt(2, 2);
//4.执行sql语句
int i = ps.executeUpdate();
/*String temp = null;
temp.toString();*/
ps.setDouble(1, 2000);
ps.setInt(2, 3);
//4.执行sql语句
int j = ps.executeUpdate();
System.out.println(j);
//5.处理查询结果集
conn.commit();//提交事务
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
try {
if (conn != null) {
conn.rollback();//回滚事务
}
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
//6.释放资源
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
DQl语句
public class Test08 {
public static void main(String[] args) {
PreparedStatement ps = null;
ResultSet rs = null;
//1.注册驱动2.获取连接
Connection conn = DBUtil.getDBConnection();
try {
//3.获取预编译数据库操作对象PreparedStatement
String sql = "select ename from emp where ename like ? order by ename desc";
ps = conn.prepareStatement(sql);
ps.setString(1, "_a%");
//4.执行sql语句
rs = ps.executeQuery();
//5.处理查询结果集
while (rs.next()) {
System.out.println(rs.getString("ename"));
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
DBUtil.DBFinallize(conn, ps, rs);
}
}
}
public class DBUtil {
private static final ResourceBundle rB = ResourceBundle.getBundle("driver");
private DBUtil() {
}
static {
String dri = rB.getString("dri");
try {
Class.forName(dri);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getDBConnection () /*throws SQLException*/{
String dri = rB.getString("dri");
String url = rB.getString("url");
String user = rB.getString("user");
String password = rB.getString("password");
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void DBFinallize(Connection conn, PreparedStatement ps, ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2.
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
---------------------------SQL Server------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname>
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000
-------------------------------------------------------
3.jdbc使用PrepareStatement
防止sql注入
- mysql实现原理
把sql语句转化
- orcal数据库实现原理
orcal 把sql带占位符语句先编译,后接受jdbc传过来的参数,提高了执行效率.