首先要引入对应的jar包
jdbc的连接Oracle数据库,操作封装,事务控制,批处理,分页查询
jdbc与MySql数据库
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
1.jdbc连接数据库
//转载OracleDriver
把类装到内存里面,帮助jdbc找到jdbc接口的实现类
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@172.16.9.99:1521:boson1";//@ip:port:sid
String user="jsd1302";//用户名
String pwd="jsd1302";//密码
Connection con = DriverManager.getConnection(url,user,pwd);//三个参数
//可以打印看一下//System.out.println(con);//打印看一下
-------------------------------------------------------------------------------
1.连接
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@ip:port:sid";
String user="";
String pwd="";
Connection con=DrivaerManager.getConnection(url,user,pwd);
2.语句
String sql="....?";
PreparedStatement stmt =con.prepareStatement(sql);
stmt.setString(1,值);
3.接收
ResultSet rs=stmt.executeUpdate();//添加,删除,修改时用
ResultSet rs=stmt.executeQuery();//查询时用
while(rs.next()){
int id=rs.getInt("id");
}
4.关闭
rs.close();
stmt.close();
con.close();
-------------------------------------------------------------------------------
2.封装DBUtils,BaseDAO,DAO
(DBUtils类,BaseDAO类,实体类(implement Serializable),DAO类(extends BaseDAO,增删改查))
//
DBUtils类
----------
public class DBUtils{
private static String dirverClass="";
private static String url="";
private static String userName="";
private static String passWord="";
static{
Class.forName(dirverClass);
}
public static Connection getConnection(){
return DriverManager.getConnection(url, user, pwd);
}
}
//
properties文件存放连接数据库的数据
----------
XXXX.properties(扩展名) 存放键值对组成的文件
文件内容:
{
dirverClass = oracle.jdbc.OracleDriver
url = jdbc:oracle:thin:@172.16.9.99:1521:boson1
username = jsd1302
password = jsd1302
}
读取文件:
{
Properties props=new Properties();
InputStream is= DBUtils.class.getClassLoader().getResourceAsStream("com/tarena/tts/dao/db.properties");
props.load(is);
//getPropery()方法根据key获取value
System.out.println(props.getProperty("dirverClass"));
}
//
BaseDAO类
----------
public class BaseDAO{
protected Connection getConnection(){
return DBUtils.getConection();
}
}
-------------------------------------------------------------------------------
3.DAO中增删改查方法中的事务控制
//
//开启事务(默认是自动提交)
con.setAutoCommit(false);
//提交事务
con.commit();
//回滚事务
con.rollback();
-------------------------------------------------------------------------------
4.批处理执行多条sql语句
//
stmt.addBath(); //添加批处理,有SQL语句stmt,(多次就保存多条)
stmt.executeBatch();//执行批处理,(技巧多少次执行一次,一定要指定范围,防止内存溢出)
-------------------------------------------------------------------------------
5.重新封装BaseDAO,优化Connection的获取
引入ThreadLocal
private static ThreadLocal<Connection> threadLocal=new ThreadLocal<Connection>();
threadLocal.get();
threadLocal.set(xxx);
//优化getConnection方法
protected Connection getConnection(){
Connection conn=null;
conn=threadLocal.get();
if(conn==null){
conn=getConn();
threadLocal.set(conn);
}
return conn;
}
//优化closeConnection方法
protected void closeConnection(){
Connection con=threadLocal.get();
if(conn!=null){
conn.cose();
threadLocal.set(null);
}
}
-------------------------------------------------------------------------------
6.分页查询
参数:当前第几页,每页显示的条数
获取分页数据:通过参数知道这一页开始的下标和结束的下标,通过rownum的sql获得
获取总页数:获取总条数,然后除以每页显示的条数就是总页数(不能被整除+1)
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
7.MySQL数据库的操作
Class.forName(com.mysql.jdbc.Driver);
Connection的获得:
DriverManager.getConnection(jdbc:mysql://localhost:3306/数据库名?user=用户名&password=密码&useUnicode=true&characterEncoding=UTF8);
-----
mysql分页:
//第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 ,注意,10为偏移量
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 //也就是说,LIMIT n 等价于 LIMIT 0,n。